PSD練習問題集
[PSD練習問題1]
1. センサ1の反応距離に応じて3段階にDCモータの速度が変化するようにしてみよう。
2. センサ2の反応距離に応じてサーボモータの角度が変化するようにしてみよう。
2. センサ2の反応距離に応じてサーボモータの角度が変化するようにしてみよう。
[解答例]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #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 angle=0; initNolibM(); //初期化 for (;;) // 無限ループ { /*------------------↓↓↓ここから書き換える↓↓↓--------------------*/ sen1 = sensor(A1); // A1(CN5)に接続されたセンサの値を読み取り,sen1に代入する sen2 = sensor(A2); // A2(CN6)に接続されたセンサの値を読み取り,sen2に代入する /* * CN5に接続されたセンサが反応した場合は距離に応じて3段階に速度が変化 */ if (sen1 > 1700){ // sen1の値が1700より大きい(センサからの距離が10cmくらいの)場合 motor(+70,MotCN3); // 速度70で正回転 } else if (sen1 <= 1700 && sen1 > 1100){ // sen1の値が1100より大きく1700以下の場合 motor(+50,MotCN3); // 速度50で正回転 } else { // sen1の値が1200以下の場合(センサから対象物の距離が離れている) motor(+30,MotCN3); // 速度30で正回転 } /* * CN6に接続されたセンサが反応距離に応じてサーボモータの角度が変化する */ if (sen2 > 1900){ // sen2が1900よりも大きいとき servo(+90,D4); // サーボモータを+90度の位置まで回転 // wait(10); } else if (sen2 <= 1900 && sen2 > 1000){ angle = sen2/5-290; //sen2が1000から1900の間で変動するとき、angleは-90から90の間で変化 servo(angle,D4); } else { //sen2が1000以下の時 servo(-90,D4); //サーボモータを-90度の位置まで回転 } } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ } |