Fan練習問題集
[FAN練習問題1]
センサに反応したら即座に首振り方向を変化させて反応あった方向に風を送る
※サンプルプログラムはwait(1000);の命令があるため一度90度まで行ききらないと戻ってこない。それを改善し途中からでも反応できるようにする。
※サンプルプログラムはwait(1000);の命令があるため一度90度まで行ききらないと戻ってこない。それを改善し途中からでも反応できるようにする。
[解答例]
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "NolibM.h" // Watch Viewでの値表示用にglobal変数として宣言 Uint16 sen1; Uint16 sen2; volatile struct EPWM_REGS *ePWM[] = { &EPwm1Regs, //intentional: (ePWM[0] not used) &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs, }; void main(void) { int tgt=0; initNolibM(); //初期化 servo(tgt,D4); ledFlash(ON,1); ledFlash(ON,2); ledFlash(ON,3); ledFlash(ON,4); wait(500); ledFlash(OFF,1); ledFlash(OFF,2); ledFlash(OFF,3); ledFlash(OFF,4); for(;;) // 無限ループ {/*------------------↓↓↓ここから書き換える↓↓↓--------------------*/ sen1 = sensor(A1); // CN5に接続されたセンサの値を読み取り,sen1に代入する sen2 = sensor(A2); // CN6に接続されたセンサの値を読み取り,sen2に代入する if(sw1(ON)){ //スイッチ1がONならば,以下を実行(センサに反応した首振り機能ON) if(sen1 > 1500 && sen2 > 1500){ // 左右両方の測距センサが反応した motor(-30,MotCN3); // DCモータ(CN3)を-30の速度で回転 ledFlash(ON,1); // LED1を光らせる } else if(sen1 > 1500 && sen2 <= 1500){ // 向かって右(CN5)の測距センサが反応した場合 motor(+15,MotCN3); //DCモータ(CN3)を+15の速度で回転 ledFlash(ON,2); // LED2を光らせる if(tgt<=90){tgt+=1;}else{tgt=90;} servo(tgt,D4); } else if(sen1 <= 1500 && sen2 > 1500){ // 向かって右(CN5)の測距センサが反応した場合 motor(+15,MotCN3); //DCモータ(CN3)を+15の速度で回転 ledFlash(ON,3); // LED2を光らせる if(tgt>=-90){tgt-=1;}else{tgt=-90;} servo(tgt,D4); } else{ motor(+15,MotCN3); //DCモータ(CN3)を+15の速度で回転 ledFlash(ON,4); // LED4を光らせる if(tgt>5)tgt-=1; if(tgt<-5)tgt+=1; servo(tgt,D4); //サーボモータを+90度の位置まで回転 } } else //スイッチ1がOFFならば,以下を実行(自動首振り) { motor(+15,MotCN3); //DCモータ(CN3)を+30の速度で回転 servo(+90,D4); wait(2000); servo(-90,D4); wait(2000); } wait(20); ledFlash(OFF,1); ledFlash(OFF,2); ledFlash(OFF,3); ledFlash(OFF,4); } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ } //=========================================================================== // 以上 //===========================================================================