2017年茨城高専ロボット部 Nucleo用中枢プログラム(PS2と通信) 少しだけ、交ロボ用に減らしたけど
Dependencies: mbed
main.cpp
00001 #include "mbed.h" 00002 00003 /* USART通信ピン設定 */ 00004 Serial pic(D8, D2); //TX, RX 00005 00006 /* i2c通信ピン設定 */ 00007 I2C i2c(D14, D15); //SDA, SCL 00008 00009 /* 確認LED設定 */ 00010 DigitalOut myled(D13); 00011 00012 /* 緊急停止ピン設定 */ 00013 DigitalOut emergency(D9); 00014 00015 /* 各関数の宣言 */ 00016 void ice(int address, int data); 00017 void dev_rx(); 00018 void photo(); 00019 00020 00021 /* 右前メカナム */ 00022 int send_data1 = 0x30; 00023 00024 /* 右後メカナム */ 00025 int send_data2 = 0x30; 00026 00027 /* 左前メカナム */ 00028 int send_data3 = 0x30; 00029 00030 /* 左後メカナム */ 00031 int send_data4 = 0x30; 00032 00033 /* 射撃機構 */ 00034 int send_data5 = 0x30; 00035 00036 int send_data6 = 0x30; 00037 00038 /* 緊急停止用フラグ */ 00039 int emergency_flag = 0; 00040 00041 void ice(int address, int data) //I2C関数 00042 { 00043 /* 周波数: 100kHz */ 00044 //i2c.frequency(100000); 00045 00046 /* スタートコンディション出力 */ 00047 i2c.start(); 00048 00049 /* アドレスの書き込み */ 00050 i2c.write(address); 00051 00052 /* データの書き込み */ 00053 i2c.write(data); 00054 00055 /* ストップコンディション出力 */ 00056 i2c.stop(); 00057 } 00058 00059 void dev_rx() 00060 { 00061 /* ボーレートの設定 */ 00062 pic.baud(115200); 00063 00064 /* 各ボタンが押された時の処理 */ 00065 int rcv_data = pic.getc(); 00066 00067 00068 00069 if(rcv_data ==0x17){ 00070 send_data5 = 0x02; 00071 myled = 1; 00072 }else if(rcv_data == 0x18){ 00073 send_data6 = 0x02; 00074 myled = 1; 00075 } 00076 00077 /* -------------移動機構--------------- */ 00078 //前進 00079 if(rcv_data == 0x01){ //前進50% 00080 send_data1 = 0x02; 00081 send_data2 = 0x02; 00082 send_data3 = 0x02; 00083 send_data4 = 0x02; 00084 00085 myled = 1; 00086 00087 }else if(rcv_data == 0x05){ //前進 90% 00088 send_data1 = 0x03; 00089 send_data2 = 0x03; 00090 send_data3 = 0x03; 00091 send_data4 = 0x03; 00092 00093 myled = 1; 00094 00095 }else if(rcv_data == 0x09){ //前進 10% 00096 send_data1 = 0x01; 00097 send_data2 = 0x01; 00098 send_data3 = 0x01; 00099 send_data4 = 0x01; 00100 00101 myled = 1; 00102 }else if(rcv_data == 0x02){ //後進 50% 00103 send_data1 = 0x05; 00104 send_data2 = 0x05; 00105 send_data3 = 0x05; 00106 send_data4 = 0x05; 00107 00108 myled = 1; 00109 }else if(rcv_data == 0x06){ //後進 90% 00110 send_data1 = 0x06; 00111 send_data2 = 0x06; 00112 send_data3 = 0x06; 00113 send_data4 = 0x06; 00114 00115 myled = 1; 00116 00117 }else if(rcv_data == 0x10){ //後進 10% 00118 send_data1 = 0x04; 00119 send_data2 = 0x04; 00120 send_data3 = 0x04; 00121 send_data4 = 0x04; 00122 00123 myled = 1; 00124 00125 }else if(rcv_data == 0x03){ //右平衡移動 50% 00126 send_data1 = 0x05; 00127 send_data2 = 0x02; 00128 send_data3 = 0x05; 00129 send_data4 = 0x02; 00130 00131 myled = 1; 00132 }else if(rcv_data == 0x07){ //右平行移動 90% 00133 send_data1 = 0x06; 00134 send_data2 = 0x03; 00135 send_data3 = 0x06; 00136 send_data4 = 0x03; 00137 00138 myled = 1; 00139 }else if(rcv_data == 0x11){ //右平衡移動 10% 00140 send_data1 = 0x04; 00141 send_data2 = 0x01; 00142 send_data3 = 0x04; 00143 send_data4 = 0x01; 00144 00145 myled = 1; 00146 }else if(rcv_data == 0x04){ //左平衡移動 50% 00147 send_data1 = 0x02; 00148 send_data2 = 0x05; 00149 send_data3 = 0x02; 00150 send_data4 = 0x05; 00151 00152 myled = 1; 00153 }else if(rcv_data == 0x08){ //左平衡移動 90% 00154 send_data1 = 0x03; 00155 send_data2 = 0x06; 00156 send_data3 = 0x03; 00157 send_data4 = 0x06; 00158 00159 myled = 1; 00160 }else if(rcv_data == 0x12){ //左平衡移動 10% 00161 send_data1 = 0x01; 00162 send_data2 = 0x04; 00163 send_data3 = 0x01; 00164 send_data4 = 0x04; 00165 00166 myled = 1; 00167 00168 }else if(rcv_data == 0x13){ //右旋回 00169 send_data1 = 0x05; 00170 send_data2 = 0x02; 00171 send_data3 = 0x02; 00172 send_data4 = 0x05; 00173 00174 myled = 1; 00175 }else if(rcv_data == 0x15){ 00176 send_data1 = 0x04; 00177 send_data2 = 0x01; 00178 send_data3 = 0x01; 00179 send_data4 = 0x04; 00180 00181 myled = 1; 00182 00183 }else if(rcv_data == 0x14){ //左旋回 00184 send_data1 = 0x02; 00185 send_data2 = 0x05; 00186 send_data3 = 0x05; 00187 send_data4 = 0x02; 00188 00189 myled = 1; 00190 }else if(rcv_data == 0x16){ 00191 send_data1 = 0x01; 00192 send_data2 = 0x04; 00193 send_data3 = 0x04; 00194 send_data4 = 0x01; 00195 00196 myled = 1; 00197 } 00198 00199 00200 /* 緊急停止始動 */ 00201 else if(rcv_data == 0x2B){ 00202 emergency_flag = 1; 00203 myled = 1; 00204 } 00205 00206 /* 緊急停止解除 */ 00207 else if(rcv_data == 0x2C){ 00208 emergency_flag = 0; 00209 myled = 1; 00210 } 00211 00212 else if(rcv_data == 0x30){ 00213 send_data1 = 0x30; 00214 send_data2 = 0x30; 00215 send_data3 = 0x30; 00216 send_data4 = 0x30; 00217 send_data5 = 0x30; 00218 send_data6 = 0x30; 00219 00220 myled = 0; 00221 00222 } 00223 00224 /* 緊急停止関数 */ 00225 if(emergency_flag == 1){ 00226 emergency = 1; 00227 myled = 1; 00228 00229 } else { 00230 emergency = 0; 00231 myled = 0; 00232 } 00233 } 00234 00235 /* メイン関数 */ 00236 int main(void) 00237 { 00238 /* 緊急停止解除 */ 00239 emergency = 0; 00240 00241 /* 無限ループ関数 */ 00242 while(1) 00243 { 00244 00245 dev_rx(); 00246 /* 割り込み受信関数の呼び出し */ 00247 pic.attach(dev_rx, Serial::RxIrq); 00248 00249 00250 /* i2c関数の呼び出し */ 00251 ice(0xA0, send_data1); 00252 ice(0xA2, send_data2); 00253 ice(0xA4, send_data3); 00254 ice(0xA6, send_data4); 00255 ice(0xA8, send_data5); 00256 ice(0xAA, send_data6); 00257 } 00258 }
Generated on Sun Jul 17 2022 21:59:20 by
1.7.2