一个使用Nucleo_F411RE开发履带坦克底盘的工程,代码不断完善中

Dependencies:   Encoder HCSR04 LED MOTOR RemoteIR

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Files at this revision

API Documentation at this revision

Comitter:
adaphoto
Date:
Tue Jun 19 14:32:54 2018 +0000
Parent:
71:0c5f9561e5b7
Commit message:
??MBED OS?Nucleo_F411RE??????????????????????????

Changed in this revision

Encoder.lib Show annotated file Show diff for this revision Revisions of this file
HCSR04.lib Show annotated file Show diff for this revision Revisions of this file
LED.lib Show annotated file Show diff for this revision Revisions of this file
MOTOR.lib Show annotated file Show diff for this revision Revisions of this file
RemoteIR.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Encoder.lib	Tue Jun 19 14:32:54 2018 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/vsluiter/code/Encoder/#18b000b443af
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HCSR04.lib	Tue Jun 19 14:32:54 2018 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/TVZ-Mechatronics-Team/code/HCSR04/#cf3e4e307d15
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LED.lib	Tue Jun 19 14:32:54 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/adaphoto/code/LED/#94318e6e89ff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MOTOR.lib	Tue Jun 19 14:32:54 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/adaphoto/code/MOTOR/#d31307e787fd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RemoteIR.lib	Tue Jun 19 14:32:54 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/adaphoto/code/RemoteIR/#355a854280cd
--- a/main.cpp	Tue Jun 19 13:00:02 2018 +0100
+++ b/main.cpp	Tue Jun 19 14:32:54 2018 +0000
@@ -1,12 +1,134 @@
 #include "mbed.h"
+#include "rtos.h"
+
+#include "LED.h"        //LED控制的头文件
+#include "ReceiverIR.h" //红外接收的头文件
+#include "HCSR04.h"     //超声波模块的头文件
+#include "motodriver.h"
+#include "encoder.h"
+
+// 变量
+int     ir_bitcount, ir_decoded;
 
-DigitalOut led1(LED1);
+// IO口定义声明
+LED           user_led(PA_5);
+Serial        pc(PA_2,PA_3);
+ReceiverIR    ir_rx(PB_12);        // 声明一个红外接接口,这里用PB12,这里可以使用一个通用的IO口就可以,不需要专门的IO口
+HCSR04        sr04(PC_0, PC_1);    // 声明两个IO口连接SR04模块,PC_0->ECHO PC1->TRIG
+Motor         motor1(PA_8,PA_9);   // 声明两个IO口连接电机1驱动模块,必须具有PWM功能的IO
+Motor         motor2(PA_11,PA_10); // 声明两个IO口连接电机2驱动模块,必须具有PWM功能的IO
+Encoder       encoder1(PB_14,PB_13,true);
+
+// Thread 线程
+Thread thread_led;
+Thread thread_ir;
+Thread thread_sr04;
+
+// Timer
+Timer sr04_timer;
+
+// 线程实现函数
+void led_thread();
+void ir_thread();
+void sr04_thread();
 
 // main() runs in its own thread in the OS
-int main() {
-    while (true) {
-        led1 = !led1;
-        wait(0.5);
+int main() 
+{
+    // 初始化
+    user_led.LED_Off();
+    
+    pc.baud(115200);
+    pc.printf("\r\n*** Nucleo_F411RE_OS_Robot ***");
+    pc.printf("\r\n***      Hello World!      ***");
+    
+    // 延时一下
+    wait(1.0);
+    
+    // 启动线程
+    thread_led.start(led_thread);
+    thread_ir.start(ir_thread);
+    thread_sr04.start(sr04_thread);
+    
+    while (true) 
+    {
+        //pc.printf("pos: %d, speed %f \r\n",encoder1.getPosition(), encoder1.getSpeed());
+        switch(ir_decoded)
+        {
+            case 0xb9://forward
+                motor1.Speed(0.5);
+                motor2.Speed(0.5);
+                break;
+            case 0xbf://stop
+                motor1.Stop();
+                motor2.Stop();
+                break;
+            case 0xea://backward
+                motor1.Speed(-0.5);
+                motor2.Speed(-0.5);
+                break;
+            case 0xbb://turn_left
+                motor1.Speed(-0.5);
+                motor2.Speed(0.5);
+                break;
+            case 0xbc://turn_right
+                motor1.Speed(0.5);
+                motor2.Speed(-0.5);
+                break;
+            default:
+            break;
+        }
+        Thread::wait(1);
     }
 }
 
+/*************************************************/
+// LED线程 1秒钟闪烁一次
+void led_thread() 
+{
+    while(true)
+    {
+        Thread::wait(1000);
+        user_led.LED_Troggle();
+    }
+}
+
+// 红外接收线程
+void ir_thread()
+{
+    // 和红外接收有关的变量
+    RemoteIR::Format format;
+    uint8_t buf[32];
+    
+    while(true)
+    {
+        if (ir_rx.getState() == ReceiverIR::Received) 
+        {
+            ir_bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8);
+            if (ir_bitcount>0) 
+            {
+                ir_decoded=buf[3];
+                pc.printf("\r\n ir_receive_code: %x",ir_decoded);
+            }
+            pc.printf(".");
+        } 
+    }
+}
+
+// SR04超声波测距模块线程
+void sr04_thread()
+{
+    while(true)
+    {
+        sr04_timer.reset();
+        sr04_timer.start();
+        sr04.startMeasurement();
+        while(!sr04.isNewDataReady()) {
+          // wait for new data
+          // waiting time depends on the distance
+        }
+        //pc.printf("\r\n Distance: %5.1f mm", sr04.getDistance_mm());
+        sr04_timer.stop();
+        Thread::wait(500 - sr04_timer.read_ms()); // time the loop
+    }
+}
\ No newline at end of file