automatic car

Dependencies:   esp8266 mbed

Committer:
Dennis_Yu
Date:
Sat Aug 04 01:01:44 2018 +0000
Revision:
1:932ee61c3db1
Parent:
0:e9727d1dd806
published esp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dennis_Yu 0:e9727d1dd806 1 #include <cstdarg>
Dennis_Yu 0:e9727d1dd806 2 #include <cstring>
Dennis_Yu 0:e9727d1dd806 3 #include "mbed.h"
Dennis_Yu 0:e9727d1dd806 4 #include "esp8266.h"
Dennis_Yu 0:e9727d1dd806 5
Dennis_Yu 0:e9727d1dd806 6 Serial ser2usb(PA_2, PA_3, 115200);
Dennis_Yu 0:e9727d1dd806 7
Dennis_Yu 0:e9727d1dd806 8 //DigitalIn ref(PA_12);
Dennis_Yu 0:e9727d1dd806 9 //DigitalOut LED(PC_13);
Dennis_Yu 0:e9727d1dd806 10 DigitalOut IN1(PB_0);
Dennis_Yu 0:e9727d1dd806 11 DigitalOut IN2(PB_1);
Dennis_Yu 0:e9727d1dd806 12 DigitalOut IN3(PB_10);
Dennis_Yu 0:e9727d1dd806 13 DigitalOut IN4(PB_11);
Dennis_Yu 0:e9727d1dd806 14 //PwmOut ENA(PB_1);
Dennis_Yu 0:e9727d1dd806 15 //PwmOut ENB(PB_0);
Dennis_Yu 0:e9727d1dd806 16 //InterruptIn switch1(PB_6);
Dennis_Yu 0:e9727d1dd806 17 bool ready(false), received(false), start(false), done(false);
Dennis_Yu 0:e9727d1dd806 18 void run_forwoard();
Dennis_Yu 0:e9727d1dd806 19 void run_backwoard();
Dennis_Yu 0:e9727d1dd806 20 void stop();
Dennis_Yu 0:e9727d1dd806 21 void init();
Dennis_Yu 0:e9727d1dd806 22 void after_irq();
Dennis_Yu 0:e9727d1dd806 23 int switch_trigger;
Dennis_Yu 0:e9727d1dd806 24 int main(void)
Dennis_Yu 0:e9727d1dd806 25 {
Dennis_Yu 0:e9727d1dd806 26 IN1 = 0;
Dennis_Yu 0:e9727d1dd806 27 IN2 = 0;
Dennis_Yu 0:e9727d1dd806 28 IN3 = 0;
Dennis_Yu 0:e9727d1dd806 29 IN4 = 0;
Dennis_Yu 0:e9727d1dd806 30 // ENA.period_ms(10);
Dennis_Yu 0:e9727d1dd806 31 // ENB.period_ms(10);
Dennis_Yu 0:e9727d1dd806 32 // ENA.pulsewidth_ms(5);
Dennis_Yu 0:e9727d1dd806 33 // ENB.pulsewidth_ms(5);
Dennis_Yu 0:e9727d1dd806 34
Dennis_Yu 0:e9727d1dd806 35 ser2usb.printf("starting\r\n");
Dennis_Yu 0:e9727d1dd806 36
Dennis_Yu 0:e9727d1dd806 37 // 选定与 esp8266 相连接的串口,WiFi 名称和密码
Dennis_Yu 0:e9727d1dd806 38 Esp8266 client(PA_9, PA_10, "iot_b827eb8fb527", "7c02b50b"); // 参数分别为 TX pin / RX pin / SSID / Password
Dennis_Yu 0:e9727d1dd806 39
Dennis_Yu 0:e9727d1dd806 40 //声明所有的传感器,每行一个,每个由名字、单位两部分组成,最后一行必须为空指针作为结尾
Dennis_Yu 0:e9727d1dd806 41 const char* sensors[][2] = {
Dennis_Yu 0:e9727d1dd806 42 "report", "",
Dennis_Yu 0:e9727d1dd806 43 NULL, NULL //最后一行以空指针作为结束标记
Dennis_Yu 0:e9727d1dd806 44 };
Dennis_Yu 0:e9727d1dd806 45
Dennis_Yu 0:e9727d1dd806 46 //声明所有的执行器,每行一个,每个由名字、参数类型两部分组成,最后一行必须为空指针作为结尾
Dennis_Yu 0:e9727d1dd806 47 const char* actuators[][2] = {
Dennis_Yu 0:e9727d1dd806 48 "command", "",
Dennis_Yu 0:e9727d1dd806 49 "dat", "",
Dennis_Yu 0:e9727d1dd806 50 NULL, NULL //最后一行以空指针作为结束标记
Dennis_Yu 0:e9727d1dd806 51 };
Dennis_Yu 0:e9727d1dd806 52 ser2usb.printf("connecting...\r\n");
Dennis_Yu 0:e9727d1dd806 53
Dennis_Yu 0:e9727d1dd806 54 //连接到服务器
Dennis_Yu 0:e9727d1dd806 55 client.connect_mqtt_broker("192.168.12.1", "car", sensors, actuators);
Dennis_Yu 0:e9727d1dd806 56
Dennis_Yu 0:e9727d1dd806 57 client.subscribe_control(actuators[0][0]);
Dennis_Yu 0:e9727d1dd806 58 client.subscribe_control(actuators[1][0]);
Dennis_Yu 0:e9727d1dd806 59
Dennis_Yu 0:e9727d1dd806 60 ser2usb.printf("Initialization done.\r\n");
Dennis_Yu 0:e9727d1dd806 61 char actuator_name[32], control_value[32];
Dennis_Yu 0:e9727d1dd806 62 Timer t; // 定时器用于计量发送传感器数据的时间
Dennis_Yu 0:e9727d1dd806 63 t.start();
Dennis_Yu 0:e9727d1dd806 64 //client.publish_value("report", "ready.");
Dennis_Yu 0:e9727d1dd806 65 while(1)
Dennis_Yu 0:e9727d1dd806 66 {
Dennis_Yu 0:e9727d1dd806 67 if (client.get_control_cmd(actuator_name, control_value))
Dennis_Yu 0:e9727d1dd806 68 {
Dennis_Yu 0:e9727d1dd806 69 ser2usb.printf("Received %s %s\r\n", actuator_name, control_value);
Dennis_Yu 0:e9727d1dd806 70 if (strcmp(actuator_name, "command") == 0)
Dennis_Yu 0:e9727d1dd806 71 {
Dennis_Yu 0:e9727d1dd806 72 ser2usb.printf("Received CMD %s %s\r\n", actuator_name, control_value);
Dennis_Yu 0:e9727d1dd806 73 int the_command = atoi(control_value);
Dennis_Yu 0:e9727d1dd806 74 switch(the_command)
Dennis_Yu 0:e9727d1dd806 75 {
Dennis_Yu 0:e9727d1dd806 76 case 1:
Dennis_Yu 0:e9727d1dd806 77 ser2usb.printf("server ready\r\n");
Dennis_Yu 0:e9727d1dd806 78 while (!client.get_control_cmd(actuator_name, control_value))
Dennis_Yu 0:e9727d1dd806 79 {
Dennis_Yu 0:e9727d1dd806 80 client.publish_value("report", "wait data.");
Dennis_Yu 0:e9727d1dd806 81 }
Dennis_Yu 0:e9727d1dd806 82 break;
Dennis_Yu 0:e9727d1dd806 83 default:
Dennis_Yu 0:e9727d1dd806 84 break;
Dennis_Yu 0:e9727d1dd806 85 }
Dennis_Yu 0:e9727d1dd806 86 }
Dennis_Yu 0:e9727d1dd806 87 }
Dennis_Yu 0:e9727d1dd806 88 else
Dennis_Yu 0:e9727d1dd806 89 {
Dennis_Yu 0:e9727d1dd806 90 client.publish_value("report", "ready.");
Dennis_Yu 0:e9727d1dd806 91 }
Dennis_Yu 0:e9727d1dd806 92 if(!ready)
Dennis_Yu 0:e9727d1dd806 93 {
Dennis_Yu 0:e9727d1dd806 94 client.publish_value( "report", "ready.");
Dennis_Yu 0:e9727d1dd806 95 //ser2usb.printf("send ready.%d\r\n",flagw);
Dennis_Yu 0:e9727d1dd806 96 ser2usb.printf("ready?\r\n");
Dennis_Yu 0:e9727d1dd806 97
Dennis_Yu 0:e9727d1dd806 98 }
Dennis_Yu 0:e9727d1dd806 99 if(!start&&ready)
Dennis_Yu 0:e9727d1dd806 100 {
Dennis_Yu 0:e9727d1dd806 101 ser2usb.printf("send start.\r\n");
Dennis_Yu 0:e9727d1dd806 102 client.publish_value("report", "wait data.");
Dennis_Yu 0:e9727d1dd806 103 }
Dennis_Yu 0:e9727d1dd806 104 if(start)
Dennis_Yu 0:e9727d1dd806 105 {
Dennis_Yu 0:e9727d1dd806 106 ser2usb.printf("work start.\r\n");
Dennis_Yu 0:e9727d1dd806 107 client.publish_value("report", "done.");
Dennis_Yu 0:e9727d1dd806 108 ready=0;
Dennis_Yu 0:e9727d1dd806 109 received=0;
Dennis_Yu 0:e9727d1dd806 110 start=0;
Dennis_Yu 0:e9727d1dd806 111 done=0;
Dennis_Yu 0:e9727d1dd806 112 }
Dennis_Yu 0:e9727d1dd806 113 }
Dennis_Yu 0:e9727d1dd806 114 }