json test

main.cpp

Committer:
tgw
Date:
2018-01-26
Revision:
0:2ee762ea11b3

File content as of revision 0:2ee762ea11b3:

#include "mbed.h"

#include <json/config.h>
#include <json/value.h>
#include <json/writer.h>
#include <json/config.h>
#include <json/json.h>
#include <cstring>
#include <limits>
#include <sstream>
#include <string>
#include <iomanip>
#include <stdio.h>
#include <deque>

DigitalOut led1(LED1);
Serial pc(USBTX, USBRX);

bool running;
Thread thread;

// Blink function toggles the led in a long running loop
void blink(DigitalOut *led) {
    while (running) {
        *led = !*led;
        wait(1);
    }
}

void callback_ex() {
    // Note: you need to actually read from the serial to clear the RX interrupt
    int tmp=pc.getc();
    //printf("%c\n", tmp);
}

// Spawns a thread to run blink for 5 seconds
// main() runs in its own thread in the OS
int main() {
    
    
    pc.baud(9600);
    pc.attach(&callback_ex);
    
    thread.start(callback(blink, &led1));
    
    running = true;

    
    //thread_gsensor.start(callback(gsensorThread));
    //wait(1);
    //thread_motor.start(callback(motorThread));
    //wait(1);
    //thread_sonar.start(callback(sonarThread));
    
    //Thread thread_sonar(sonarThread);
    
     Json::Reader reader;

  Json::Value json_object;

  const char* json_document = "{\"age\" : 26,\"name\" : \"huchao\"}";

  if (!reader.parse(json_document, json_object))return 0;

  printf("name : %s\n",json_object["name"]);

  printf("name : %s\n",json_object["age"]);
}


/*
主程序指定中断函数
flipper.attach(&flip, 2.0); // the address of the function to be attached (flip) and the interval (2 seconds)

主程序指定 类 的 方法
t.attach(callback(&f, &Flipper::flip), 2.0); // the address of the object, member function, and interval


1、线程
需加载mbed-os

#include "mbed.h"

Thread thread;
DigitalOut led1(LED1);
volatile bool running = true;

// Blink function toggles the led in a long running loop
void blink(DigitalOut *led) {
    while (running) {
        *led = !*led;
        wait(1);
    }
}

// Spawns a thread to run blink for 5 seconds
int main() {
    thread.start(callback(blink, &led1));
    wait(5);
    running = false;
    thread.join();
}


2、休眠+按键中断唤醒
需更新mbed
使用F401板时,IDD电流测试,运行时:18mA,灯亮时21 .2mA,睡眠时:6.26 mA,深度睡眠时:0.68 mA,

RTC唤醒使用第三方类(未测试)

#include "mbed.h"

InterruptIn event(USER_BUTTON);
DigitalOut myled(LED1);

int go_to_sleep = 0;

void pressed()
{
    printf("Button pressed\n");
    go_to_sleep = go_to_sleep + 1;
    if (go_to_sleep > 3) go_to_sleep = 0;

}

int main()
{
    int i = 0;

    printf("\nPress Button to enter/exit sleep & deepsleep\n");

    event.fall(&pressed);

    while (1) {

        if ((go_to_sleep == 0) || (go_to_sleep == 2)) {
            printf("%d: Running\n", i);
            myled = !myled;
            wait(1.0);
        }

        if (go_to_sleep == 1) {
            myled = 0;
            printf("%d: Entering sleep (press user button to resume)\n", i);
            sleep();
        }

        if (go_to_sleep == 3) {
            myled = 0;
            printf("%d: Entering deepsleep (press user button to resume)\n", i);
            deepsleep();
        }

        i++;
    }
}


3、系统定时器中断
#include "mbed.h"

Ticker toggle_led_ticker;

DigitalOut led1(LED1);

void toggle_led() {
    led1 = !led1;
}

int main() {
    // Init the ticker with the address of the function (toggle_led) to be attached and the interval (100 ms)
    toggle_led_ticker.attach(&toggle_led, 0.1);
    while (true) {
        // Do other things...
    }
}

4、超时定时器中断
#include "mbed.h"
 
// A class for flip()-ing a DigitalOut 
class Flipper {
public:
    Flipper(PinName pin) : _pin(pin) {
        _pin = 0;
    }
    void flip() {
        _pin = !_pin;
    }
private:
    DigitalOut _pin;
};
 
DigitalOut led1(LED1);
Flipper f(LED2);
Timeout t;
 
int main() {
    // the address of the object, member function, and interval
    t.attach(callback(&f, &Flipper::flip), 2.0); 
 
    // spin in a main loop. flipper will interrupt it to call flip
    while(1) {
        led1 = !led1;
        wait(0.2);
    }
}
            

5、通用定时器中断

 // Count the time to toggle a LED
 
 #include "mbed.h"
 
 Timer timer;
 DigitalOut led(LED1);
 int begin, end;
 
 int main() {
     timer.start();
     begin = timer.read_us();
     led = !led;
     end = timer.read_us();
     printf("Toggle the led takes %d us", end - begin);
 }

6、外部中断附加事件
需加载mbed-os

#include "mbed.h"
#include "mbed_events.h"

DigitalOut led1(LED1);
InterruptIn sw(SW2);
EventQueue queue(32 * EVENTS_EVENT_SIZE);
Thread t;

void rise_handler(void) {
    // Toggle LED
    led1 = !led1;
}

void fall_handler(void) {
    printf("fall_handler in context %p\r\n", Thread::gettid());
    // Toggle LED
    led1 = !led1;
}

int main() {
    // Start the event queue
    t.start(callback(&queue, &EventQueue::dispatch_forever));
    printf("Starting in context %p\r\n", Thread::gettid());
    // The 'rise' handler will execute in IRQ context
    sw.rise(rise_handler);
    // The 'fall' handler will execute in the context of thread 't'
    sw.fall(queue.event(fall_handler));
}


7、线程间信号量的传递
需加载mbed-os

#include "mbed.h"
 
Thread thread;
DigitalOut led(LED1);
 
void led_thread() {
    while (true) {
        // Signal flags that are reported as event are automatically cleared.
        Thread::signal_wait(0x1);
        led = !led;
    }
}
 
int main (void) {
    thread.start(callback(led_thread));
 
    while (true) {
        wait(1);
        thread.signal_set(0x1);
    }
}

*/