Vadim Gouskov 15-10-18 Vote Controller Version 1

Dependencies:   MQTT

Fork of PGO6_VoteController_template by Jens de hoog

main.cpp

Committer:
VadimGouskov
Date:
2018-10-15
Revision:
3:e234aaf2a634
Parent:
2:5b7d055dbc91

File content as of revision 3:e234aaf2a634:

#define APP_VERSION     0.6f
#define MQTT_VERSION    3
#define BROKER_NAME     "broker.hivemq.com"
#define BROKER_PORT     1883

#include "debounce_button.h"
#include "EthernetInterface.h"
#include "MQTTNetwork.h"
#include "MQTTmbed.h"
#include "MQTTClient.h"

char* topic;

/**
    TODO
    ----
    -   Check if the button has been pressed. If so, print the amount of clicks to a serial terminal.
    -   Make an MQTT-service which:
        -   starts up a network using EthernetInterface. Make sure the development board requests its address via DHCP.
        -   makes a client and connects it to the broker using a client ID and credentials (username & password).
        -   sends messages at the same topic as the smartphone app from PGO 2. Feel free to choose which Quality of Service
            you are going to use. Make a separate function which handles the sending procedure. Therefore, this function
            can be called each time we want to send a certain message.
    -   When the button is pressed once, we send an upvote. When pressed twice, a downvote is sent. By pressing 4 times,
        the program disconnects from the broker and terminates.
        
    Extra
    -----
    -   Subscribe to the topic on which the song data is published. Display this received message on the serial terminal.
    -   Test this controller in the complete system of PGO 2. Use these controllers instead of the smartphones.
    
    Tips & tricks
    -------------
    -   To generate an interrupt on the press of a button, use:
            InterruptIn button(USER_BUTTON);
            ...
            button.fall(callback(someFunction));
    -   Before implementing MQTT, test the multiclick feature first.
    -   Have a look at the MQTT-library for Mbed and the HelloMQTT-example.
    -   To have a uniform message sending procedure, use the following function usage:
            sendMessage(&client, topic, buf, qos, retained, duplicate)
*/

int main(int argc, char* argv[])
{
    InterruptIn button(USER_BUTTON);
    button.fall(callback(&button1_onpressed_cb));
    button1_busy = false;
    button1_enabled = true;
    button1_pressed = false;
    multiclick_state = 0;
//    status_led = 0;   
    
    while(1){
            if(debounced_flag){
//                printf("debounced \r\n");
//                printf("clicks %d\r\n", multiclick_state);
//                printf("button_enabled %d\r\n", button1_enabled);
//                printf("button_busy %d\r\n", button1_busy);
                debounced_flag = false;
                
            }
//                printf("button_enabled %d\r\n", button1_enabled);
            if(done_counting){
                printf("counted %d \r\n", multiclick_state);
                // handle click amount here
                multiclick_state = 0;
                done_counting = false;         
            }
    }
    
    return 0;
}