![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
YOZAKURAのARMプログラム(ver.1)
Dependencies: Dynamixel EthernetInterface MEMS_Thermal_Sensor mbed-rtos SerialHalfDuplex mbed
Diff: main.cpp
- Revision:
- 14:523d184e5107
- Parent:
- 13:5f5c2b446aac
- Child:
- 15:d62819013445
--- a/main.cpp Thu Apr 09 06:55:16 2015 +0000 +++ b/main.cpp Sat Apr 11 05:53:45 2015 +0000 @@ -4,8 +4,10 @@ */ #include "mbed.h" +#include "rtos.h" DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); +Mutex stdio_mutex; /*--Ethernet:begin------------------------------------------------------------------------------------------*/ #include "mbed.h" @@ -102,7 +104,7 @@ /*--CO2_Sensor:begin--------------------------------------------------------------------------------------*/ /*CO2センサモジュール:A051020-AQ6B-01*/ /*データシート:http://www.fisinc.co.jp/common/pdf/A051020-AQ6.pdf*/ -/*参考 外気:396.0[ppm](2013年) 呼気:13,200[ppm] ※このセンサで測れるのは5400[ppm]まで*/ +/*参考 外気:396.0[ppm](2013年) 呼気:13,200[ppm] ※このセンサで測れるのは3000[ppm]まで*/ #include "mbed.h" AnalogIn ain(p20); @@ -132,7 +134,9 @@ float CO2_data; Ethernet_init(); + stdio_mutex.lock(); Dyna_init(); + stdio_mutex.unlock(); char S_data[200], R_data[2]; int Joy_mode, linear_mode, pitch_mode, yaw_mode; @@ -146,6 +150,7 @@ switch(Joy_mode){ case 0: //通常モード + stdio_mutex.lock(); /*--Dynamixel:begin---------------------------------------------------------------*/ //現在の角度・電圧・電流を取得 myled1=1; @@ -153,7 +158,7 @@ pP = pitch.GetPosition(); pC = pitch.GetCurrent(); yP = yaw.GetPosition(); yC = yaw.GetCurrent(); myled1=0; - + //Dynamixelへの命令を判定 linear_mode = R_data[0] & 0x0c; linear_mode = linear_mode >> 2; pitch_mode = R_data[0] & 0x30; pitch_mode = linear_mode >> 4; @@ -205,19 +210,20 @@ ThD2[0],ThD2[1],ThD2[2],ThD2[3],ThD2[4],ThD2[5],ThD2[6],ThD2[7], ThD2[8],ThD2[9],ThD2[10],ThD2[11],ThD2[12],ThD2[13],ThD2[14],ThD2[15]); sprintf(S_data, "%f %f %f %f %f %f %s %f",lP,lV,pP,pC,yP,yC,Thermo_data,CO2_data); + stdio_mutex.unlock(); sock.sendTo(echo_server, S_data, sizeof(S_data)); myled3=0; break; case 1: //ホームポジション - Dyna_home_position(); break; + stdio_mutex.lock(); Dyna_home_position(); stdio_mutex.unlock(); break; case 2: //リセット - Dyna_reset(); break; + stdio_mutex.lock(); Dyna_reset(); stdio_mutex.unlock(); break; case 3: //終了 - myled4=1; Dyna_end(); sock.close(true); eth.disconnect(); return 0; + stdio_mutex.lock(); myled4=1; Dyna_end(); stdio_mutex.unlock(); sock.close(true); eth.disconnect(); return 0; } } } \ No newline at end of file