小车 走

Dependencies:   mbed

Committer:
xmwmx
Date:
Fri Jul 20 07:08:51 2018 +0000
Revision:
1:d89a943c462e
Child:
2:4a9ba34cd90a
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xmwmx 1:d89a943c462e 1 /*-----------------------------------------------------
xmwmx 1:d89a943c462e 2 File Name : main.cpp
xmwmx 1:d89a943c462e 3 Purpose : For esp8266 mbed porting
xmwmx 1:d89a943c462e 4 Creation Date : 22-06-2017
xmwmx 1:d89a943c462e 5 Last Modified :
xmwmx 1:d89a943c462e 6 Created By : Jeasine Ma [jeasinema[at]gmail[dot]com]
xmwmx 1:d89a943c462e 7 -----------------------------------------------------*/
xmwmx 1:d89a943c462e 8 #include <cstdarg>
xmwmx 1:d89a943c462e 9 #include <cstring>
xmwmx 1:d89a943c462e 10 #include "mbed.h"
xmwmx 1:d89a943c462e 11 #include "esp8266.h"
xmwmx 1:d89a943c462e 12
xmwmx 1:d89a943c462e 13 Serial ser2usb(PA_2, PA_3, 115200);
xmwmx 1:d89a943c462e 14 //DigitalIn ref(PA_12);
xmwmx 1:d89a943c462e 15 DigitalOut LED(PC_13);
xmwmx 1:d89a943c462e 16 DigitalOut IN1(PB_0);
xmwmx 1:d89a943c462e 17 DigitalOut IN2(PB_1);
xmwmx 1:d89a943c462e 18 DigitalOut IN3(PB_10);
xmwmx 1:d89a943c462e 19 DigitalOut IN4(PB_11);
xmwmx 1:d89a943c462e 20 //PwmOut ENA(PB_1);
xmwmx 1:d89a943c462e 21 //PwmOut ENB(PB_0);
xmwmx 1:d89a943c462e 22 //InterruptIn switch1(PB_6);
xmwmx 1:d89a943c462e 23 int state = 0;
xmwmx 1:d89a943c462e 24 int actionok = 0;
xmwmx 1:d89a943c462e 25 void run_forwoard();
xmwmx 1:d89a943c462e 26 void run_backwoard();
xmwmx 1:d89a943c462e 27 void stop();
xmwmx 1:d89a943c462e 28 void init();
xmwmx 1:d89a943c462e 29 void after_irq();
xmwmx 1:d89a943c462e 30 int switch_trigger;
xmwmx 1:d89a943c462e 31 int main(void) {
xmwmx 1:d89a943c462e 32 for(int i =0;i<4;i++)
xmwmx 1:d89a943c462e 33 {
xmwmx 1:d89a943c462e 34 LED=1;
xmwmx 1:d89a943c462e 35 wait(1.0);
xmwmx 1:d89a943c462e 36 LED=0;
xmwmx 1:d89a943c462e 37 wait(1.0);
xmwmx 1:d89a943c462e 38 }
xmwmx 1:d89a943c462e 39 IN1 = 0;
xmwmx 1:d89a943c462e 40 IN2 = 0;
xmwmx 1:d89a943c462e 41 IN3 = 0;
xmwmx 1:d89a943c462e 42 IN4 = 0;
xmwmx 1:d89a943c462e 43 // ENA.period_ms(10);
xmwmx 1:d89a943c462e 44 // ENB.period_ms(10);
xmwmx 1:d89a943c462e 45 // ENA.pulsewidth_ms(5);
xmwmx 1:d89a943c462e 46 // ENB.pulsewidth_ms(5);
xmwmx 1:d89a943c462e 47
xmwmx 1:d89a943c462e 48
xmwmx 1:d89a943c462e 49 ser2usb.printf("starting\r\n");
xmwmx 1:d89a943c462e 50
xmwmx 1:d89a943c462e 51 // 选定与 esp8266 相连接的串口,WiFi 名称和密码
xmwmx 1:d89a943c462e 52 Esp8266 client(PA_9, PA_10, "iot_b827eb8fb527", "7c02b50b");// 参数分别为 TX pin / RX pin / SSID / Password//"iot_b827eb8fb527", "7c02b50b"
xmwmx 1:d89a943c462e 53
xmwmx 1:d89a943c462e 54 //声明所有的传感器,每行一个,每个由名字、单位两部分组成,最后一行必须为空指针作为结尾
xmwmx 1:d89a943c462e 55 const char* sensors[][2] = {
xmwmx 1:d89a943c462e 56 "actionok", "",
xmwmx 1:d89a943c462e 57 NULL, NULL //最后一行以空指针作为结束标记
xmwmx 1:d89a943c462e 58 };
xmwmx 1:d89a943c462e 59
xmwmx 1:d89a943c462e 60 //声明所有的执行器,每行一个,每个由名字、参数类型两部分组成,最后一行必须为空指针作为结尾
xmwmx 1:d89a943c462e 61 const char* actuators[][2] = {
xmwmx 1:d89a943c462e 62 "sudo", "int",
xmwmx 1:d89a943c462e 63 NULL, NULL //最后一行以空指针作为结束标记
xmwmx 1:d89a943c462e 64 };
xmwmx 1:d89a943c462e 65 ser2usb.printf("connecting...\r\n");
xmwmx 1:d89a943c462e 66
xmwmx 1:d89a943c462e 67 //连接到服务器
xmwmx 1:d89a943c462e 68 client.connect_mqtt_broker("192.168.12.1", "car", sensors, actuators);
xmwmx 1:d89a943c462e 69
xmwmx 1:d89a943c462e 70 ser2usb.printf("Initialization done.\r\n");
xmwmx 1:d89a943c462e 71 char actuator_name[32], control_value[32];
xmwmx 1:d89a943c462e 72 Timer t;// 定时器用于计量发送传感器数据的时间
xmwmx 1:d89a943c462e 73 t.start();
xmwmx 1:d89a943c462e 74 client.publish_value("sudo", "carinit");
xmwmx 1:d89a943c462e 75 while(1) {
xmwmx 1:d89a943c462e 76 //检查有没有收到新的执行器控制指令
xmwmx 1:d89a943c462e 77 if(client.get_control_cmd(actuator_name, control_value)){
xmwmx 1:d89a943c462e 78 ser2usb.printf("Received CMD %s %s\r\n", actuator_name, control_value);
xmwmx 1:d89a943c462e 79 //判断哪个执行器收到命令
xmwmx 1:d89a943c462e 80 state = atoi(control_value);
xmwmx 1:d89a943c462e 81 switch (state)
xmwmx 1:d89a943c462e 82 {
xmwmx 1:d89a943c462e 83 case 1: // white to black
xmwmx 1:d89a943c462e 84 run_forwoard();
xmwmx 1:d89a943c462e 85 wait(1);
xmwmx 1:d89a943c462e 86 stop();
xmwmx 1:d89a943c462e 87 client.publish_value("sudo", "carfinish");
xmwmx 1:d89a943c462e 88 break;
xmwmx 1:d89a943c462e 89
xmwmx 1:d89a943c462e 90 case 2:
xmwmx 1:d89a943c462e 91 run_backwoard();
xmwmx 1:d89a943c462e 92 wait(1);
xmwmx 1:d89a943c462e 93 stop();
xmwmx 1:d89a943c462e 94 client.publish_value("sudo", "carfinish");
xmwmx 1:d89a943c462e 95 break;
xmwmx 1:d89a943c462e 96
xmwmx 1:d89a943c462e 97 default:
xmwmx 1:d89a943c462e 98 break;
xmwmx 1:d89a943c462e 99
xmwmx 1:d89a943c462e 100 }
xmwmx 1:d89a943c462e 101 }
xmwmx 1:d89a943c462e 102 }
xmwmx 1:d89a943c462e 103 }
xmwmx 1:d89a943c462e 104
xmwmx 1:d89a943c462e 105
xmwmx 1:d89a943c462e 106 void run_forwoard()
xmwmx 1:d89a943c462e 107 { IN1 = 1;
xmwmx 1:d89a943c462e 108 IN2 = 0;
xmwmx 1:d89a943c462e 109 IN3 = 1;
xmwmx 1:d89a943c462e 110 IN4 = 0;
xmwmx 1:d89a943c462e 111 }
xmwmx 1:d89a943c462e 112
xmwmx 1:d89a943c462e 113 void run_backwoard()
xmwmx 1:d89a943c462e 114 {
xmwmx 1:d89a943c462e 115 IN1 = 0;
xmwmx 1:d89a943c462e 116 IN2 = 1;
xmwmx 1:d89a943c462e 117 IN3 = 0;
xmwmx 1:d89a943c462e 118 IN4 = 1;
xmwmx 1:d89a943c462e 119 }
xmwmx 1:d89a943c462e 120
xmwmx 1:d89a943c462e 121 void stop()
xmwmx 1:d89a943c462e 122 {
xmwmx 1:d89a943c462e 123 IN1 = 0;
xmwmx 1:d89a943c462e 124 IN2 = 0;
xmwmx 1:d89a943c462e 125 IN3 = 0;
xmwmx 1:d89a943c462e 126 IN4 = 0;
xmwmx 1:d89a943c462e 127 }