still need some modification
Dependencies: mbed-http DebounceIn PinDetect OneButton
Diff: ECH_V004.cpp
- Revision:
- 1:1a06bde4e0db
- Parent:
- 0:454abaa26f3c
- Child:
- 2:1d2a43e66b41
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ECH_V004.cpp Wed Apr 03 11:55:23 2019 +0000 @@ -0,0 +1,368 @@ +#include "select-demo.h" + +#if DEMO == DEMO_HTTP + +#include "rtos.h" +#include "mbed.h" +#include "http_request.h" +#include "network-helper.h" +#include "mbed_mem_trace.h" +#include "PinDetect.h" + + + + +//FINITE STATE MACHINE EVENTS +#define NO_EVENT 0 +#define TIME_OUT 1 +#define BUTTON_PRESS_1 2 +#define BUTTON_PRESS_2 3 +#define TILT 3 +#define PUSH 4 + +//STATES +#define STATE_0 0 +#define STATE_1 1 +#define STATE_2 2 + + +//pass event via message queue +typedef struct { + int event; /* AD result of measured voltage */ +} message_t; + +MemoryPool<message_t, 16> mpool; +Queue<message_t, 16> queue; + +//Digital input +//DigitalIn coin(p14); +PinDetect button_1(p23); +PinDetect button_2(p24); + +//Global varible +int button_press_1=0; +int button_press_2=0; +int button_press_Wait=0; + + +//leds for debug +DigitalOut led4(LED4); //LED +DigitalOut led3(LED3); //LED +DigitalOut led2(LED2); //LED +DigitalOut myled(LED1); + +//Relays: + +DigitalOut Relay_1(p11); +DigitalOut Relay_2(p12); + + + +//Mutex +Mutex flag_mutex; + + +void button_1_event_thread(void const *argument) +{ + + + while (true) + { + //Thread::wait(10); + if (button_press_1 == 1 && button_press_2 == 0 && button_press_Wait==0) { + + //event via a message queue + button_press_Wait=1; + message_t *message = mpool.alloc(); + message->event = BUTTON_PRESS_1; + queue.put(message); + + led3 = !led3; + Thread::wait(5000); + } + + } +} + + +void button_2_event_thread(void const *argument) +{ + + + while (true) + { + //Thread::wait(10); + if (button_press_2 == 1 && button_press_1 == 0 && button_press_Wait==0) { + + //event via a message queue + button_press_Wait = 1; + message_t *message = mpool.alloc(); + message->event = BUTTON_PRESS_2; + queue.put(message); + + led2 = !led2; + Thread::wait(5000); + + } + + } +} + + +void timeout_event(void const *n) +{ + + //event via a message queue + message_t *message = mpool.alloc(); + message->event = TIME_OUT; + queue.put(message); + + led4 = !led4; + +} + + +void button_1_hit_callback() +{ +//Flash_LED_Thread.signal_set(0x1); + + button_press_1=1; + +} + +void button_2_hit_callback() +{ +//Flash_LED_Thread.signal_set(0x1); + + button_press_2=1; + +} + + + + + +void dump_response_1(HttpResponse* res) +{ + + Relay_1=0; + Relay_2=1; + + + printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str()); + + printf("Headers:\n"); + for (size_t ix = 0; ix < res->get_headers_length(); ix++) + { + printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str()); + } + printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str()); + + Thread::wait(5000); + Relay_1=1; + + Thread::wait(5000); + button_press_2 = 0; + button_press_1 = 0; + button_press_Wait = 0; + +} + + +void dump_response_2(HttpResponse* res) +{ + Relay_1=1; + Relay_2=0; + + printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str()); + + printf("Headers:\n"); + for (size_t ix = 0; ix < res->get_headers_length(); ix++) { + printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str()); + } + printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str()); + + + Thread::wait(5000); + Relay_2=1; + + Thread::wait(5000); + button_press_2 = 0; + button_press_1 = 0; + + button_press_Wait = 0; + + +} + + +int main() +{ + + + Relay_1=1; + + Relay_2=1; + //Thread fsm(fsm_thread); + Thread button_1_event(button_1_event_thread); + Thread button_2_event(button_2_event_thread); + + + + RtosTimer timer(timeout_event, osTimerPeriodic, (void *)0); + + + button_1.mode(PullUp); + button_2.mode(PullUp); + + //Interrupts + /* button_1.fall(&Button_1_Inter); + button_2.fall(&Button_2_Inter);*/ + + // Setup Interrupt callback function for a pb hit + button_1.attach_deasserted(& button_1_hit_callback); + // Start sampling pb input using interrupts + button_1.setSampleFrequency(); + + // Setup Interrupt callback function for a pb hit + button_2.attach_deasserted(& button_2_hit_callback); + // Start sampling pb input using interrupts + button_2.setSampleFrequency(); + + + + + int state = STATE_0; + + //network setup + NetworkInterface* network = connect_to_default_network_interface(); + if (!network) + { + printf("Cannot connect to the network, see serial output\n"); + //return 1; + } + if(network) + myled=1; + + while (true) { + + + switch(state) { + case STATE_0: + osEvent evt = queue.get(); + if (evt.status == osEventMessage) + { + message_t *message = (message_t*)evt.value.p; + + + if(message->event == BUTTON_PRESS_1) + { + printf("HttpRequest Sending"); + printf(network->get_gateway); + HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://192.168.0.57:5500/mch/kick"); + + post_req->set_header("Content-Type", "application/json"); + + + const char body[] = "{\"hello\":\"Nada\"}"; + + HttpResponse* post_res = post_req->send(body, strlen(body)); + if (!post_res) + { + printf("HttpRequest failed (error code %d)\n", post_req->get_error()); + // return 1; + + button_press_2 = 0; + button_press_1 = 0; + } + else + { + + printf("\n----- HTTP POST response 1-----\n"); + + dump_response_1(post_res); + + //Thread::wait(5000); + + + + delete post_req; + } + + state = STATE_0; + } + else if(message->event == BUTTON_PRESS_2) + { + + HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://192.168.0.57:5500/mch/call"); + + post_req->set_header("Content-Type", "application/json"); + + + const char body[] = "{\"hello\":\"World\"}"; + + HttpResponse* post_res = post_req->send(body, strlen(body)); + if (!post_res) + { + printf("HttpRequest failed (error code %d)\n", post_req->get_error()); + // return 1; + + button_press_2 = 0; + button_press_1 = 0; + } + else + { + + printf("\n----- HTTP POST response 2-----\n"); + + dump_response_2(post_res); + + delete post_req; + //Thread::wait(5000); + + + + + } + state = STATE_0; + } + + mpool.free(message); + } + + timer.start(15000); + + break; + + case STATE_1: + + evt = queue.get(); + if (evt.status == osEventMessage) + { + message_t *message = (message_t*)evt.value.p; + + + if(message->event == BUTTON_PRESS_1) + { + + state = STATE_0; + } + + mpool.free(message); + } + + timer.start(10000); + + break; + + + }//End of switch + + //toggle led for local testing + //led2= !led2; + + }//end of while(1) + +} + +#endif