YOZAKURAのARMプログラム(ver.1)

Dependencies:   Dynamixel EthernetInterface MEMS_Thermal_Sensor mbed-rtos SerialHalfDuplex mbed

Revision:
14:523d184e5107
Parent:
13:5f5c2b446aac
Child:
15:d62819013445
diff -r 5f5c2b446aac -r 523d184e5107 main.cpp
--- 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