void knob_paint(t_knob *x, t_object *view) { t_rect rect; if(x->f_endless) { if(x->f_min < x->f_max) { x->f_value = fmodf(x->f_value + x->f_max - x->f_min, x->f_max - x->f_min); } else { x->f_value = fmodf(x->f_value + x->f_min - x->f_max, x->f_min - x->f_max); } } else { if(x->f_min < x->f_max) x->f_value = pd_clip_minmax(x->f_value, x->f_min, x->f_max); else x->f_value = pd_clip_minmax(x->f_value, x->f_max, x->f_min); } ebox_get_rect_for_view((t_ebox *)x, &rect); draw_background(x, view, &rect); draw_needle(x, view, &rect); }
static void knob_paint(t_knob *x, t_object *view) { t_rect rect; ebox_get_rect_for_view((t_ebox *)x, &rect); draw_background(x, view, &rect); draw_needle(x, view, &rect); }
/********************************************************************* * 電圧を毎回表示する. ********************************************************************* */ void draw_AnalogInput(void) { static double vavg_n=(-1); static double vavg_d=(-1); char buf[256]; double volt; int vcol, vsize; int dl = LOWPASS_DIGITAL; int nl = LOWPASS_NEEDLE; int f = getAnalogVolt(&volt,0); #if 1 if(f>=0) { if( vavg_n < 0) { vavg_n = volt; }else{ vavg_n = (vavg_n * (nl-1) + volt ) / nl; } if( vavg_d < 0) { vavg_d = volt; }else{ vavg_d = (vavg_d * (dl-1) + volt ) / dl; } } #endif if(f<0) { sprintf(buf,"ERROR"); }else{ sprintf(buf,"%6.2f ",vavg_d); } //アナログ針で表示. draw_needle( (int) (vavg_n*1000) ); vcol = 0xaa40e040; vsize = 36; //数値で表示. gr_puts(AIN_CENTER_X-80,AIN_CENTER_H+12,buf ,vcol,BKCOL2,vsize); gr_puts(AIN_CENTER_X+32,AIN_CENTER_H+12,"V ",vcol,BKCOL2,vsize); draw_graphic((int) (volt * VOLT_SCALE)); }
/********************************************************************* * 抵抗値を毎回表示する. ********************************************************************* */ void draw_Registance(void) { static double vavg_n=(-1); static double vavg_d=(-1); char buf[256]; double Kohm; int vcol, vsize; int dl = LOWPASS_DIGITAL; int nl = LOWPASS_NEEDLE; int f = getRegistance(&Kohm,0); int scale = reg_scaled(Kohm,0); #if 1 if(f>=0) { if( Kohm>=0 ) { //KΩの値を平滑. if( vavg_d < 0) { vavg_d = Kohm; }else{ vavg_d = (vavg_d * (dl-1) + Kohm ) / dl; } }else{ vavg_d = -1; } } #endif //針の位置を平滑. if( vavg_n < 0) { vavg_n = scale; }else{ vavg_n = (vavg_n * (nl-1) + scale ) / nl; } //KΩの値を表示. if(f<0) { sprintf(buf,"ERROR"); }else{ if(Kohm<0) { sprintf(buf," R = OPEN"); }else{ sprintf(buf,"%12.3f ",vavg_d); } } vcol = 0xaa40e040; vsize = 36; //数値で表示. gr_puts(AIN_CENTER_X-120,AIN_CENTER_H+12,buf ,vcol,BKCOL2,vsize); gr_puts(AIN_CENTER_X+62 ,AIN_CENTER_H+12," KΩ",vcol,BKCOL2,vsize); //アナログ針を表示. draw_needle( vavg_n ); // draw_graphic( reg_scaled(vavg_n) ); }