涼太郎 中村
/
f3rc2
めいん
prime.h
- Committer:
- choutin
- Date:
- 2016-08-28
- Revision:
- 0:df2659fd8031
- Child:
- 1:a1e592eca305
File content as of revision 0:df2659fd8031:
/* primeではPINを制御する関数を扱う。 以下一覧 open,close hand open close arm step move blueorred lrsensor 全関数共通で意図しない動作が起きたら基板上のLEDを点灯 */ PwmOut pwmarm(PC_6); PwmOut pwmhand(PC_8); AnalogIn rightsensor(A0); AnalogIn leftsensor(A1); AnalogIn armadj(A2); AnalogIn handadj(A3); DigitalIn team(PC_3); DigitalOut errorled(LED1); DigitalIn phase1(PC_14); DigitalIn phase2(PC_15); DigitalIn phase4(PH_0); DigitalIn phase8(PH_1); void close_hand(void) { int i,degree; pwmhand.period_ms(20); //20ms degree=175; i=500+degree*1900/180; pwmhand.pulsewidth_us(i); } void close_arm(void) { PwmOut mypwm(PB_3); int i,degree; mypwm.period_ms(20); //20ms degree=160; i=500+degree*1900/180; pwmarm.pulsewidth_us(i); } void open_hand(void) { PwmOut mypwm(PWM_OUT); int i,degree; pwmhand.period_ms(20); //20ms degree=90; i=500+degree*1900/180; mypwm.pulsewidth_us(i); } void open_arm(void) { PwmOut mypwm(PWM_OUT); int i,degree; mypwm.period_ms(20); //20ms degree=10; i=500+degree*1900/180; pwmarm.pulsewidth_us(i); } void step(int degree){ DigitalOut PINW(PA_3); DigitalOut PINX(PA_2); DigitalOut PINY(PA_10); DigitalOut PINZ(PB_3); int puls_times=0; if(degree>0){ puls_times=1+(int)(degree/(3.75)); while(1){ PINW=1; PINX=1; PINY=0; PINZ=0; wait_ms(20); puls_times--; if(puls_times<0){break;} PINW=0; PINX=1; PINY=1; PINZ=0; wait_ms(20); puls_times--; if(puls_times<0){break;} PINW=0; PINX=0; PINY=1; PINZ=1; wait_ms(20); puls_times--; if(puls_times<0){break;} PINW=1; PINX=1; PINY=0; PINZ=0; wait_ms(20); puls_times--; if(puls_times<0){break;} } } if(degree<0){ puls_times=(-1)*(1+(int)(degree/(3.75))); while(1){ PINW=1; PINX=1; PINY=0; PINZ=0; wait_ms(20); puls_times--; if(puls_times<0){break;} PINW=1; PINX=0; PINY=0; PINZ=1; wait_ms(20); puls_times--; if(puls_times<0){break;} PINW=0; PINX=0; PINY=1; PINZ=1; wait_ms(20); puls_times--; if(puls_times<0){break;} PINW=0; PINX=1; PINY=1; PINZ=0; wait_ms(20); puls_times--; if(puls_times<0){break;} } } } int sensor(void){ //センサー読 int right ,left,x,y; right=rightsensor.read(); left=leftsensor.read(); if(right>0.5){x=1;} else{right=0;} if(left>0.5){y=1;} else{left=0;} return x+2*(y); //(right,left)=(off,off),(on,off),(off,on),(on,on) // 0 1 2 3 } void move(int right,int left){ if(right>256){right=256;} if(left>256){left=256;} if(right<-256){right=-256;} if(left<-256){left=-256;} PwmOut M1cw(PA_11); PwmOut M1ccw(PB_15); PwmOut M2cw(PB_14); PwmOut M2ccw(PB_13); M1cw.period_us(256); M1ccw.period_us(256); M2cw.period_us(256); M2ccw.period_us(256); right=256-right; left=256-left;//トランジスタ挿入によってON,OFFが逆転したための措置 //回さないモーターにはperiod=widthを出力 if(right>0&&left>0){ M1cw.pulsewidth_us(right); M2cw.pulsewidth_us(left); M1ccw.pulsewidth_us(256); M2ccw.pulsewidth_us(256); } else if(right<0&&left>0){ M1cw.pulsewidth_us(256); M2cw.pulsewidth_us(left); M1ccw.pulsewidth_us(right); M2ccw.pulsewidth_us(256); } else if(right>0&&left<0){ M1cw.pulsewidth_us(right); M2cw.pulsewidth_us(256); M1ccw.pulsewidth_us(256); M2ccw.pulsewidth_us(left); } else if(right<0&&left<0){ M1cw.pulsewidth_us(256); M2cw.pulsewidth_us(256); M1ccw.pulsewidth_us(right); M2ccw.pulsewidth_us(left); } else if(right==0&&left==0){ M1cw.pulsewidth_us(256); M2cw.pulsewidth_us(256); M1ccw.pulsewidth_us(256); M2ccw.pulsewidth_us(256); } } int blue(){ int x; x=(-1)*team; return x; } int phase(void){ phase1.mode(PullUp); phase2.mode(PullUp); phase4.mode(PullUp); phase8.mode(PullUp); int r=0; r=phase1+2*phase2+4*phase4+8*phase8; return r; }