2017年茨城高専ロボット部 Nucleo用中枢プログラム(PS2と通信) 少しだけ、交ロボ用に減らしたけど
Dependencies: mbed
Revision 0:31209b575854, committed 2018-07-02
- Comitter:
- BIGBOSS04
- Date:
- Mon Jul 02 08:19:59 2018 +0000
- Commit message:
- 2017???????????Nucleo??????(?????????????)
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jul 02 08:19:59 2018 +0000 @@ -0,0 +1,258 @@ +#include "mbed.h" + +/* USART通信ピン設定 */ +Serial pic(D8, D2); //TX, RX + +/* i2c通信ピン設定 */ +I2C i2c(D14, D15); //SDA, SCL + +/* 確認LED設定 */ +DigitalOut myled(D13); + +/* 緊急停止ピン設定 */ +DigitalOut emergency(D9); + +/* 各関数の宣言 */ +void ice(int address, int data); +void dev_rx(); +void photo(); + + +/* 右前メカナム */ +int send_data1 = 0x30; + +/* 右後メカナム */ +int send_data2 = 0x30; + +/* 左前メカナム */ +int send_data3 = 0x30; + +/* 左後メカナム */ +int send_data4 = 0x30; + +/* 射撃機構 */ +int send_data5 = 0x30; + +int send_data6 = 0x30; + +/* 緊急停止用フラグ */ +int emergency_flag = 0; + +void ice(int address, int data) //I2C関数 +{ + /* 周波数: 100kHz */ + //i2c.frequency(100000); + + /* スタートコンディション出力 */ + i2c.start(); + + /* アドレスの書き込み */ + i2c.write(address); + + /* データの書き込み */ + i2c.write(data); + + /* ストップコンディション出力 */ + i2c.stop(); +} + +void dev_rx() +{ + /* ボーレートの設定 */ + pic.baud(115200); + + /* 各ボタンが押された時の処理 */ + int rcv_data = pic.getc(); + + + + if(rcv_data ==0x17){ + send_data5 = 0x02; + myled = 1; + }else if(rcv_data == 0x18){ + send_data6 = 0x02; + myled = 1; + } + + /* -------------移動機構--------------- */ + //前進 + if(rcv_data == 0x01){ //前進50% + send_data1 = 0x02; + send_data2 = 0x02; + send_data3 = 0x02; + send_data4 = 0x02; + + myled = 1; + + }else if(rcv_data == 0x05){ //前進 90% + send_data1 = 0x03; + send_data2 = 0x03; + send_data3 = 0x03; + send_data4 = 0x03; + + myled = 1; + + }else if(rcv_data == 0x09){ //前進 10% + send_data1 = 0x01; + send_data2 = 0x01; + send_data3 = 0x01; + send_data4 = 0x01; + + myled = 1; + }else if(rcv_data == 0x02){ //後進 50% + send_data1 = 0x05; + send_data2 = 0x05; + send_data3 = 0x05; + send_data4 = 0x05; + + myled = 1; + }else if(rcv_data == 0x06){ //後進 90% + send_data1 = 0x06; + send_data2 = 0x06; + send_data3 = 0x06; + send_data4 = 0x06; + + myled = 1; + + }else if(rcv_data == 0x10){ //後進 10% + send_data1 = 0x04; + send_data2 = 0x04; + send_data3 = 0x04; + send_data4 = 0x04; + + myled = 1; + + }else if(rcv_data == 0x03){ //右平衡移動 50% + send_data1 = 0x05; + send_data2 = 0x02; + send_data3 = 0x05; + send_data4 = 0x02; + + myled = 1; + }else if(rcv_data == 0x07){ //右平行移動 90% + send_data1 = 0x06; + send_data2 = 0x03; + send_data3 = 0x06; + send_data4 = 0x03; + + myled = 1; + }else if(rcv_data == 0x11){ //右平衡移動 10% + send_data1 = 0x04; + send_data2 = 0x01; + send_data3 = 0x04; + send_data4 = 0x01; + + myled = 1; + }else if(rcv_data == 0x04){ //左平衡移動 50% + send_data1 = 0x02; + send_data2 = 0x05; + send_data3 = 0x02; + send_data4 = 0x05; + + myled = 1; + }else if(rcv_data == 0x08){ //左平衡移動 90% + send_data1 = 0x03; + send_data2 = 0x06; + send_data3 = 0x03; + send_data4 = 0x06; + + myled = 1; + }else if(rcv_data == 0x12){ //左平衡移動 10% + send_data1 = 0x01; + send_data2 = 0x04; + send_data3 = 0x01; + send_data4 = 0x04; + + myled = 1; + + }else if(rcv_data == 0x13){ //右旋回 + send_data1 = 0x05; + send_data2 = 0x02; + send_data3 = 0x02; + send_data4 = 0x05; + + myled = 1; + }else if(rcv_data == 0x15){ + send_data1 = 0x04; + send_data2 = 0x01; + send_data3 = 0x01; + send_data4 = 0x04; + + myled = 1; + + }else if(rcv_data == 0x14){ //左旋回 + send_data1 = 0x02; + send_data2 = 0x05; + send_data3 = 0x05; + send_data4 = 0x02; + + myled = 1; + }else if(rcv_data == 0x16){ + send_data1 = 0x01; + send_data2 = 0x04; + send_data3 = 0x04; + send_data4 = 0x01; + + myled = 1; + } + + + /* 緊急停止始動 */ + else if(rcv_data == 0x2B){ + emergency_flag = 1; + myled = 1; + } + + /* 緊急停止解除 */ + else if(rcv_data == 0x2C){ + emergency_flag = 0; + myled = 1; + } + + else if(rcv_data == 0x30){ + send_data1 = 0x30; + send_data2 = 0x30; + send_data3 = 0x30; + send_data4 = 0x30; + send_data5 = 0x30; + send_data6 = 0x30; + + myled = 0; + + } + + /* 緊急停止関数 */ + if(emergency_flag == 1){ + emergency = 1; + myled = 1; + + } else { + emergency = 0; + myled = 0; + } +} + +/* メイン関数 */ +int main(void) +{ + /* 緊急停止解除 */ + emergency = 0; + + /* 無限ループ関数 */ + while(1) + { + + dev_rx(); + /* 割り込み受信関数の呼び出し */ + pic.attach(dev_rx, Serial::RxIrq); + + + /* i2c関数の呼び出し */ + ice(0xA0, send_data1); + ice(0xA2, send_data2); + ice(0xA4, send_data3); + ice(0xA6, send_data4); + ice(0xA8, send_data5); + ice(0xAA, send_data6); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Jul 02 08:19:59 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/aa5281ff4a02 \ No newline at end of file