Keegan Hu
/
finalcar
car
Fork of warehouse by
main.cpp@9:238780dda8af, 2018-05-17 (annotated)
- Committer:
- glintligo
- Date:
- Thu May 17 08:29:35 2018 +0000
- Revision:
- 9:238780dda8af
- Parent:
- 8:d5e340a59c71
- Child:
- 10:80ccb0dc0784
fasdf;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
brainliang | 0:63af4719467f | 1 | /*----------------------------------------------------- |
brainliang | 0:63af4719467f | 2 | File Name : main.cpp |
brainliang | 0:63af4719467f | 3 | Purpose : For esp8266 mbed porting |
brainliang | 0:63af4719467f | 4 | Creation Date : 22-06-2017 |
brainliang | 0:63af4719467f | 5 | Last Modified : |
brainliang | 0:63af4719467f | 6 | Created By : Jeasine Ma [jeasinema[at]gmail[dot]com] |
brainliang | 0:63af4719467f | 7 | -----------------------------------------------------*/ |
brainliang | 0:63af4719467f | 8 | #include <cstdarg> |
brainliang | 0:63af4719467f | 9 | #include <cstring> |
brainliang | 0:63af4719467f | 10 | #include "mbed.h" |
brainliang | 0:63af4719467f | 11 | #include "esp8266.h" |
brainliang | 0:63af4719467f | 12 | |
zhangyx | 7:49a823b5a935 | 13 | Serial ser2usb(PA_2, PA_3, 115200); |
zhangyx | 8:d5e340a59c71 | 14 | DigitalIn ref(PA_12); |
zhangyx | 8:d5e340a59c71 | 15 | DigitalOut LED(PC_13); |
brainliang | 0:63af4719467f | 16 | |
glintligo | 9:238780dda8af | 17 | |
glintligo | 9:238780dda8af | 18 | // PA_6 P3 从下往上第二个舵机 1ms 往后倒90度 1.5ms 往后倒45度 2ms 笔直 |
glintligo | 9:238780dda8af | 19 | // PB_1 P6 从下往上第四个舵机 2ms 张开 1.5ms 中间 1ms 完全合上 |
glintligo | 9:238780dda8af | 20 | // PA_7 P4 从下往上第一个舵机 1.5ms 从正前方看往右偏45度 1ms 正中间 2ms 右偏度 |
glintligo | 9:238780dda8af | 21 | // PB_0 P5 从下往上第三个舵机 1.5 中间 1 往后45度 2 往前45 |
glintligo | 9:238780dda8af | 22 | |
glintligo | 9:238780dda8af | 23 | |
glintligo | 9:238780dda8af | 24 | PwmOut mypwm1(PA_7); |
glintligo | 9:238780dda8af | 25 | PwmOut mypwm2(PA_6); |
glintligo | 9:238780dda8af | 26 | PwmOut mypwm3(PB_0); |
glintligo | 9:238780dda8af | 27 | PwmOut mypwm4(PB_1); |
glintligo | 9:238780dda8af | 28 | |
glintligo | 9:238780dda8af | 29 | |
glintligo | 9:238780dda8af | 30 | |
brainliang | 0:63af4719467f | 31 | int main(void) { |
zhangyx | 8:d5e340a59c71 | 32 | ser2usb.printf("starting\r\n"); |
zhangyx | 7:49a823b5a935 | 33 | |
zhangyx | 1:3b487c4813a2 | 34 | // 选定与 esp8266 相连接的串口,WiFi 名称和密码 |
glintligo | 9:238780dda8af | 35 | Esp8266 client(PA_9, PA_10, "iot_b827ebd838be", "ab087c9e");// 参数分别为 TX pin / RX pin / SSID / Password |
zyx | 3:06080fa094a0 | 36 | |
zyx | 3:06080fa094a0 | 37 | //声明所有的传感器,每行一个,每个由名字、单位两部分组成,最后一行必须为空指针作为结尾 |
zyx | 3:06080fa094a0 | 38 | const char* sensors[][2] = { |
zhangyx | 8:d5e340a59c71 | 39 | "light", "lx", |
zhangyx | 8:d5e340a59c71 | 40 | "reflection"," ", |
zyx | 3:06080fa094a0 | 41 | NULL, NULL //最后一行以空指针作为结束标记 |
zyx | 3:06080fa094a0 | 42 | }; |
zyx | 3:06080fa094a0 | 43 | |
zyx | 3:06080fa094a0 | 44 | //声明所有的执行器,每行一个,每个由名字、参数类型两部分组成,最后一行必须为空指针作为结尾 |
zyx | 3:06080fa094a0 | 45 | const char* actuators[][2] = { |
zhangyx | 8:d5e340a59c71 | 46 | "led", "int", |
zyx | 3:06080fa094a0 | 47 | NULL, NULL //最后一行以空指针作为结束标记 |
zyx | 3:06080fa094a0 | 48 | }; |
zhangyx | 8:d5e340a59c71 | 49 | ser2usb.printf("connecting...\r\n"); |
zyx | 3:06080fa094a0 | 50 | |
zyx | 3:06080fa094a0 | 51 | //连接到服务器 |
zhangyx | 8:d5e340a59c71 | 52 | client.connect_mqtt_broker("192.168.12.1", "alpha", sensors, actuators); |
zyx | 3:06080fa094a0 | 53 | |
brainliang | 0:63af4719467f | 54 | ser2usb.printf("Initialization done.\r\n"); |
zyx | 3:06080fa094a0 | 55 | |
zyx | 3:06080fa094a0 | 56 | char actuator_name[32], control_value[32]; |
zhangyx | 8:d5e340a59c71 | 57 | bool ref_last; |
zyx | 3:06080fa094a0 | 58 | float last_report=0; |
zyx | 3:06080fa094a0 | 59 | Timer t;// 定时器用于计量发送传感器数据的时间 |
zyx | 3:06080fa094a0 | 60 | t.start(); |
zyx | 3:06080fa094a0 | 61 | |
brainliang | 0:63af4719467f | 62 | while(1) { |
zyx | 3:06080fa094a0 | 63 | //检查有没有收到新的执行器控制指令 |
zyx | 3:06080fa094a0 | 64 | if(client.get_control_cmd(actuator_name, control_value)){ |
zhangyx | 8:d5e340a59c71 | 65 | ser2usb.printf("Received CMD %s %s\r\n", actuator_name, control_value); |
zyx | 3:06080fa094a0 | 66 | //判断哪个执行器收到命令 |
zhangyx | 8:d5e340a59c71 | 67 | if(strcmp(actuator_name, "led")==0){ |
glintligo | 9:238780dda8af | 68 | mypwm1.period_ms(20); |
glintligo | 9:238780dda8af | 69 | mypwm2.period_ms(20); |
glintligo | 9:238780dda8af | 70 | mypwm3.period_ms(20); |
glintligo | 9:238780dda8af | 71 | mypwm4.period_ms(20); |
glintligo | 9:238780dda8af | 72 | |
glintligo | 9:238780dda8af | 73 | |
glintligo | 9:238780dda8af | 74 | mypwm1.pulsewidth(0.001); |
glintligo | 9:238780dda8af | 75 | wait(0.5); |
glintligo | 9:238780dda8af | 76 | mypwm1.pulsewidth(0.0015); |
glintligo | 9:238780dda8af | 77 | wait(0.5); |
glintligo | 9:238780dda8af | 78 | mypwm1.pulsewidth(0.002); |
glintligo | 9:238780dda8af | 79 | wait(0.5); |
glintligo | 9:238780dda8af | 80 | mypwm1.pulsewidth(0.0015); |
glintligo | 9:238780dda8af | 81 | wait(0.5); |
glintligo | 9:238780dda8af | 82 | mypwm1.pulsewidth(0.001); |
glintligo | 9:238780dda8af | 83 | wait(0.5); |
glintligo | 9:238780dda8af | 84 | |
glintligo | 9:238780dda8af | 85 | mypwm3.pulsewidth(0.001); |
glintligo | 9:238780dda8af | 86 | wait(0.5); |
glintligo | 9:238780dda8af | 87 | mypwm3.pulsewidth(0.0015); |
glintligo | 9:238780dda8af | 88 | wait(0.5); |
glintligo | 9:238780dda8af | 89 | |
glintligo | 9:238780dda8af | 90 | mypwm4.pulsewidth(0.001); |
glintligo | 9:238780dda8af | 91 | wait(0.5); |
glintligo | 9:238780dda8af | 92 | mypwm4.pulsewidth(0.0015); |
glintligo | 9:238780dda8af | 93 | wait(0.5); |
glintligo | 9:238780dda8af | 94 | mypwm4.pulsewidth(0.002); |
glintligo | 9:238780dda8af | 95 | wait(0.5); |
glintligo | 9:238780dda8af | 96 | |
glintligo | 9:238780dda8af | 97 | mypwm3.pulsewidth(0.0015); |
glintligo | 9:238780dda8af | 98 | wait(0.5); |
glintligo | 9:238780dda8af | 99 | } |
zyx | 3:06080fa094a0 | 100 | } |
zhangyx | 8:d5e340a59c71 | 101 | |
zhangyx | 8:d5e340a59c71 | 102 | bool reflection = ref; |
zhangyx | 8:d5e340a59c71 | 103 | if(reflection != ref_last){ //仅在传感器发生变化时汇报数据 |
zhangyx | 8:d5e340a59c71 | 104 | |
zhangyx | 8:d5e340a59c71 | 105 | ref_last = reflection; |
zhangyx | 8:d5e340a59c71 | 106 | |
zhangyx | 8:d5e340a59c71 | 107 | char val[4]; |
zhangyx | 8:d5e340a59c71 | 108 | sprintf(val, "%d", (int)reflection); |
zhangyx | 8:d5e340a59c71 | 109 | |
zhangyx | 8:d5e340a59c71 | 110 | //汇报传感器数据,两个参数分别是传感器名字和值 |
zhangyx | 8:d5e340a59c71 | 111 | client.publish_value("reflection", val); |
zhangyx | 8:d5e340a59c71 | 112 | } |
zyx | 3:06080fa094a0 | 113 | |
zyx | 3:06080fa094a0 | 114 | if(t.read() - last_report > 1){ // 每1s发送汇报一次传感器数据 |
zyx | 3:06080fa094a0 | 115 | |
zyx | 3:06080fa094a0 | 116 | //汇报传感器数据,两个参数分别是传感器名字和值 |
zhangyx | 8:d5e340a59c71 | 117 | //client.publish_value("light", "30 lx"); |
zhangyx | 5:9a0acd11c445 | 118 | |
zhangyx | 5:9a0acd11c445 | 119 | last_report = t.read(); |
zyx | 3:06080fa094a0 | 120 | } |
brainliang | 0:63af4719467f | 121 | } |
brainliang | 0:63af4719467f | 122 | } |