![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
小车 走
mainwmx.cpp@1:d89a943c462e, 2018-07-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |