Vadim Gouskov 15-10-18 Vote Controller Version 1

Dependencies:   MQTT

Fork of PGO6_VoteController_template by Jens de hoog

Committer:
VadimGouskov
Date:
Mon Oct 15 15:53:31 2018 +0000
Revision:
3:e234aaf2a634
Parent:
2:5b7d055dbc91
15-10-17 VoteController Version 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jensdehoog 0:fd29cd85e75e 1 #define APP_VERSION 0.6f
jensdehoog 0:fd29cd85e75e 2 #define MQTT_VERSION 3
jensdehoog 0:fd29cd85e75e 3 #define BROKER_NAME "broker.hivemq.com"
jensdehoog 0:fd29cd85e75e 4 #define BROKER_PORT 1883
jensdehoog 0:fd29cd85e75e 5
jensdehoog 0:fd29cd85e75e 6 #include "debounce_button.h"
jensdehoog 0:fd29cd85e75e 7 #include "EthernetInterface.h"
jensdehoog 0:fd29cd85e75e 8 #include "MQTTNetwork.h"
jensdehoog 0:fd29cd85e75e 9 #include "MQTTmbed.h"
jensdehoog 0:fd29cd85e75e 10 #include "MQTTClient.h"
jensdehoog 0:fd29cd85e75e 11
jensdehoog 0:fd29cd85e75e 12 char* topic;
jensdehoog 0:fd29cd85e75e 13
jensdehoog 0:fd29cd85e75e 14 /**
jensdehoog 0:fd29cd85e75e 15 TODO
jensdehoog 0:fd29cd85e75e 16 ----
jensdehoog 0:fd29cd85e75e 17 - Check if the button has been pressed. If so, print the amount of clicks to a serial terminal.
jensdehoog 0:fd29cd85e75e 18 - Make an MQTT-service which:
jensdehoog 0:fd29cd85e75e 19 - starts up a network using EthernetInterface. Make sure the development board requests its address via DHCP.
jensdehoog 0:fd29cd85e75e 20 - makes a client and connects it to the broker using a client ID and credentials (username & password).
jensdehoog 0:fd29cd85e75e 21 - sends messages at the same topic as the smartphone app from PGO 2. Feel free to choose which Quality of Service
jensdehoog 0:fd29cd85e75e 22 you are going to use. Make a separate function which handles the sending procedure. Therefore, this function
jensdehoog 0:fd29cd85e75e 23 can be called each time we want to send a certain message.
jensdehoog 0:fd29cd85e75e 24 - When the button is pressed once, we send an upvote. When pressed twice, a downvote is sent. By pressing 4 times,
jensdehoog 0:fd29cd85e75e 25 the program disconnects from the broker and terminates.
jensdehoog 0:fd29cd85e75e 26
jensdehoog 0:fd29cd85e75e 27 Extra
jensdehoog 0:fd29cd85e75e 28 -----
jensdehoog 0:fd29cd85e75e 29 - Subscribe to the topic on which the song data is published. Display this received message on the serial terminal.
jensdehoog 0:fd29cd85e75e 30 - Test this controller in the complete system of PGO 2. Use these controllers instead of the smartphones.
jensdehoog 0:fd29cd85e75e 31
jensdehoog 0:fd29cd85e75e 32 Tips & tricks
jensdehoog 0:fd29cd85e75e 33 -------------
jensdehoog 0:fd29cd85e75e 34 - To generate an interrupt on the press of a button, use:
jensdehoog 0:fd29cd85e75e 35 InterruptIn button(USER_BUTTON);
jensdehoog 0:fd29cd85e75e 36 ...
jensdehoog 0:fd29cd85e75e 37 button.fall(callback(someFunction));
jensdehoog 0:fd29cd85e75e 38 - Before implementing MQTT, test the multiclick feature first.
jensdehoog 0:fd29cd85e75e 39 - Have a look at the MQTT-library for Mbed and the HelloMQTT-example.
jensdehoog 0:fd29cd85e75e 40 - To have a uniform message sending procedure, use the following function usage:
jensdehoog 0:fd29cd85e75e 41 sendMessage(&client, topic, buf, qos, retained, duplicate)
jensdehoog 0:fd29cd85e75e 42 */
jensdehoog 0:fd29cd85e75e 43
jensdehoog 0:fd29cd85e75e 44 int main(int argc, char* argv[])
jensdehoog 0:fd29cd85e75e 45 {
VadimGouskov 3:e234aaf2a634 46 InterruptIn button(USER_BUTTON);
VadimGouskov 3:e234aaf2a634 47 button.fall(callback(&button1_onpressed_cb));
VadimGouskov 3:e234aaf2a634 48 button1_busy = false;
VadimGouskov 3:e234aaf2a634 49 button1_enabled = true;
VadimGouskov 3:e234aaf2a634 50 button1_pressed = false;
VadimGouskov 3:e234aaf2a634 51 multiclick_state = 0;
VadimGouskov 3:e234aaf2a634 52 // status_led = 0;
VadimGouskov 3:e234aaf2a634 53
VadimGouskov 3:e234aaf2a634 54 while(1){
VadimGouskov 3:e234aaf2a634 55 if(debounced_flag){
VadimGouskov 3:e234aaf2a634 56 // printf("debounced \r\n");
VadimGouskov 3:e234aaf2a634 57 // printf("clicks %d\r\n", multiclick_state);
VadimGouskov 3:e234aaf2a634 58 // printf("button_enabled %d\r\n", button1_enabled);
VadimGouskov 3:e234aaf2a634 59 // printf("button_busy %d\r\n", button1_busy);
VadimGouskov 3:e234aaf2a634 60 debounced_flag = false;
VadimGouskov 3:e234aaf2a634 61
VadimGouskov 3:e234aaf2a634 62 }
VadimGouskov 3:e234aaf2a634 63 // printf("button_enabled %d\r\n", button1_enabled);
VadimGouskov 3:e234aaf2a634 64 if(done_counting){
VadimGouskov 3:e234aaf2a634 65 printf("counted %d \r\n", multiclick_state);
VadimGouskov 3:e234aaf2a634 66 // handle click amount here
VadimGouskov 3:e234aaf2a634 67 multiclick_state = 0;
VadimGouskov 3:e234aaf2a634 68 done_counting = false;
VadimGouskov 3:e234aaf2a634 69 }
VadimGouskov 3:e234aaf2a634 70 }
VadimGouskov 3:e234aaf2a634 71
jensdehoog 0:fd29cd85e75e 72 return 0;
jensdehoog 0:fd29cd85e75e 73 }