Console Serial IO con display OLED e seriale asincrona

Dependencies:   mbed BufferedSerial AserialIOFuncLib SSD1306 TerminalPlusV2

Fork of SerialIO by Max Scordamaglia

Console Serial IO con display OLED e seriale asincrona

main.cpp

Committer:
MaxScorda
Date:
2015-05-24
Revision:
5:4d547f4c1278
Parent:
4:aa08e8d5ac27
Child:
6:f8865b6d592a

File content as of revision 5:4d547f4c1278:

#include "mbed.h"
#include "config.h"
#include "IOFuncLib.h"

//init standard
InterruptIn mybutton(USER_BUTTON);
Serial pc(SERIAL_TX, SERIAL_RX); //Apertura della seriale 2
Serial ardser(PA_11, PA_12); //Apertura della seriale 1 *opzionale vedi sotto
//init funzioni personal lib
Flasher led(LED1);
Screen sc(&pc);
//var
int cont=0;

//------------ Funzioni -------------

void pressed()
{
    sc.pressed();
}


void callback()
{
    // Note: you need to actually read from the serial to clear the RX interrupt
    // ardser.printf("%d \n", cont++);
//  myled2 = !myled2;
}


void parser(char stringa[])
{
    bool errp=1;
//confronta la stringa ricevuta con le costanti accettate per il comando di accensione del led
//la funzione strcmp fa parte della libreria string standard del C e confronta 2 stringhe
//restituendo 0 se le stringhe sono uguali.
    if ((strcmp(stringa,"on")==0) ||(strcmp(stringa,"acceso")==0) ||(strcmp(stringa,"apriti sesamo")==0)) {
        pc.printf("Led ACCESO \n\r");
        ardser.printf("\nLed ACCESO \n\r");
        led.onOff(1); //Accende il led
        errp=0;
    }
    //Confronto per i comandi di spegnimento del led
    if ((strcmp(stringa,"off")==0) ||(strcmp(stringa,"spento")==0) ||(strcmp(stringa,"chiuditi sesamo")==0)) {
        pc.printf("Led SPENTO !\n\r");
        ardser.printf("\nLed SPENTO! \n\r");
        led.onOff(0); // spegne il led
        errp=0;
    }
    if (errp==1) {
        pc.printf("Bad command\n\r");
        ardser.printf("\nBad command\n\r");
    }
}
//-------------- fine funzioni

int main()
{
    char c; // variabile che contiene il carattere appena ricevuto
    char buffer[128]; // buffer di accumulo dei caratteri in sequenza
    char i=0; // variabile di comodo per il conteggio dei caratteri
    //Serial config
    pc.baud(SERIAL1BAUD);
    ardser.baud(SERIALARDBAUD);
    //pc.format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1)

    mybutton.fall(&pressed);
    sc.banner();

    while(1) {
        ardser.attach(&callback);
        c=pc.getc(); //legge un carattere dalla seriale
        if (c != 13) {
            buffer[i]=c; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
            i++; // incrementa il puntatore al buffer
            led.flash(2);
        } else {
            pc.printf("\n\r");
            buffer[i]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
            i=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
            ardser.printf("\nxx\n\r");
            parser(buffer);
        }
    }
}