init

Dependencies:   mbed

Fork of 仓库 by Keegan Hu

main.cpp

Committer:
glintligo
Date:
2018-05-17
Revision:
9:238780dda8af
Parent:
8:d5e340a59c71

File content as of revision 9:238780dda8af:

/*-----------------------------------------------------
 File Name : main.cpp
 Purpose : For esp8266 mbed porting
 Creation Date : 22-06-2017
 Last Modified :
 Created By : Jeasine Ma [jeasinema[at]gmail[dot]com]
-----------------------------------------------------*/
#include <cstdarg>
#include <cstring>
#include "mbed.h"
#include "esp8266.h"

Serial ser2usb(PA_2, PA_3, 115200);
DigitalIn ref(PA_12);
DigitalOut LED(PC_13);


//   PA_6   P3  从下往上第二个舵机   1ms   往后倒90度   1.5ms   往后倒45度    2ms 笔直
//   PB_1   P6  从下往上第四个舵机   2ms  张开      1.5ms  中间  1ms  完全合上
//   PA_7   P4  从下往上第一个舵机   1.5ms   从正前方看往右偏45度  1ms    正中间   2ms 右偏度
//   PB_0   P5  从下往上第三个舵机    1.5 中间      1  往后45度  2  往前45


PwmOut mypwm1(PA_7);
PwmOut mypwm2(PA_6);
PwmOut mypwm3(PB_0);
PwmOut mypwm4(PB_1);



int main(void) {
    ser2usb.printf("starting\r\n");
    
    // 选定与 esp8266 相连接的串口,WiFi 名称和密码
    Esp8266 client(PA_9, PA_10, "iot_b827ebd838be", "ab087c9e");// 参数分别为 TX pin / RX pin / SSID / Password

    //声明所有的传感器,每行一个,每个由名字、单位两部分组成,最后一行必须为空指针作为结尾
    const char* sensors[][2] = {
        "light", "lx",
        "reflection"," ",
        NULL, NULL //最后一行以空指针作为结束标记
    };

    //声明所有的执行器,每行一个,每个由名字、参数类型两部分组成,最后一行必须为空指针作为结尾
    const char* actuators[][2] = {
        "led", "int",
        NULL, NULL //最后一行以空指针作为结束标记
    };
    ser2usb.printf("connecting...\r\n");

    //连接到服务器
    client.connect_mqtt_broker("192.168.12.1", "alpha", sensors, actuators);

    ser2usb.printf("Initialization done.\r\n");

    char actuator_name[32], control_value[32];
    bool ref_last;
    float last_report=0;
    Timer t;// 定时器用于计量发送传感器数据的时间
    t.start();

    while(1) {
        //检查有没有收到新的执行器控制指令
        if(client.get_control_cmd(actuator_name, control_value)){
            ser2usb.printf("Received CMD %s %s\r\n", actuator_name, control_value);
            //判断哪个执行器收到命令
            if(strcmp(actuator_name, "led")==0){
                mypwm1.period_ms(20);
                mypwm2.period_ms(20);
                mypwm3.period_ms(20);
                mypwm4.period_ms(20);
                
                
                mypwm1.pulsewidth(0.001);
                wait(0.5);
                mypwm1.pulsewidth(0.0015);
                wait(0.5);
                mypwm1.pulsewidth(0.002);
                wait(0.5);
                mypwm1.pulsewidth(0.0015);
                wait(0.5);
                mypwm1.pulsewidth(0.001);
                wait(0.5);
                
                mypwm3.pulsewidth(0.001);
                wait(0.5);
                mypwm3.pulsewidth(0.0015);
                wait(0.5);
                
                mypwm4.pulsewidth(0.001);
                wait(0.5);
                mypwm4.pulsewidth(0.0015);
                wait(0.5);
                mypwm4.pulsewidth(0.002);
                wait(0.5);
                
                 mypwm3.pulsewidth(0.0015);
                wait(0.5);
                }
        }
        
        bool reflection = ref;
        if(reflection != ref_last){ //仅在传感器发生变化时汇报数据
        
            ref_last = reflection;

            char val[4];
            sprintf(val, "%d", (int)reflection);
            
            //汇报传感器数据,两个参数分别是传感器名字和值
            client.publish_value("reflection", val);
        }

        if(t.read() - last_report > 1){ // 每1s发送汇报一次传感器数据

            //汇报传感器数据,两个参数分别是传感器名字和值
            //client.publish_value("light", "30 lx");
            
            last_report = t.read();
        }
    }
}