mbed_robotcar / Mbed OS sensor_test3
Revision:
0:d41a03c442f7
diff -r 000000000000 -r d41a03c442f7 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jul 09 03:08:43 2020 +0000
@@ -0,0 +1,94 @@
+#include "mbed.h"
+#include "rtos.h"
+
+DigitalIn sensor1(p20); //センサ1
+DigitalIn sensor2(p19); //センサ2
+
+DigitalOut ENA(p21); //ENA(右モーター)
+DigitalOut IN1(p22); //IN1(右モーター)   
+DigitalOut IN2(p23); //IN2(右モーター)
+DigitalOut IN3(p24); //IN3(左モーター)
+DigitalOut IN4(p25); //IN4(左モーター)
+DigitalOut ENB(p26); //ENB(左モーター)
+
+int value1; //センサ1の値をintとして所持
+int value2; //センサ2の値をintとして所持
+
+//直進
+void advance(){
+    ENA=1;
+    IN1=1;
+    IN2=0;
+    ENB=1;
+    IN3=1;
+    IN4=0;
+    printf("両センサ反応(sensor1=%d,sensor2=%d)\n\r",value1,value2);
+}
+
+//右折
+void right(){
+    ENA=1;
+    IN1=1;
+    IN2=0;
+    ENB=1;
+    IN3=0;
+    IN4=1;
+    printf("右センサ反応(sensor1=%d,sensor2=%d)\n\r",value1,value2);
+    }
+    
+//左折
+void left(){
+    ENA=1;
+    IN1=0;
+    IN2=1;
+    ENB=1;
+    IN3=1;
+    IN4=0;
+    printf("左センサ反応(sensor1=%d,sensor2=%d)\n\r",value1,value2);
+}
+
+//停止
+void stop(){…
+    ENA=0;
+    IN1=0;
+    IN2=0;
+    ENB=0;
+    IN3=0;
+    IN4=0;
+    printf("反応なし(sensor1=%d,sensor2=%d)\n\r",value1,value2);
+}
+
+//走行方法を決定
+void run(){
+    while(1){
+    if(value1 == 0 && value2 ==0){//両センサが反応
+        advance();
+    }else if(value1 == 0){//右センサが反応
+        right();
+    }else if(value2 == 0){//左センサが反応
+        left();
+    }else if(value1 == 1 && value2 ==1){//センサ反応なし
+        stop();
+    }
+    ThisThread::sleep_for(1);
+        }
+    }
+
+//読み込んだセンサの値をvalueに格納
+void sensor(void const *argument){
+    value1 = sensor1;
+    value2 = sensor2;
+    }
+
+//main関数
+int main(){
+    Thread thread; //スレッド作成
+    RtosTimer sensor_timer(sensor,osTimerPeriodic,(void*)0); //sensor関数をRtosTimerに設定
+    sensor_timer.start(5); //sensorを5msごとに起動
+    thread.start(run); //スレッドとしてrun関数を開始
+    
+    while(1){
+        ThisThread::sleep_for(5);
+        }
+    
+    }
\ No newline at end of file