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-09-09
Revision:
28:f7a59cee5f0d
Parent:
27:b8d7f2ede945
Child:
29:bfb815540de7

File content as of revision 28:f7a59cee5f0d:

#include "mbed.h"
#include "config.h"
#include "IOFuncLib.h"
#include "BufferedSerial.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
BufferedSerial pc(SERIAL_TX, SERIAL_RX); //Apertura della seriale 2
BufferedSerial ardser(PA_11, PA_12); //Apertura della seriale 1 *opzionale vedi sotto
//init funzioni personal lib
Flasher led(LED1);
Screen sc(&pc);
genFunctions fnz;
Ticker ScreenSaver;

//var
int cont=0;
int dispType=0; //0:oled  1:lcd
bool realExtraSerial=true; //se true manda fuori solo le info reali senno demo


//------------ Funzioni -------------
#include "macroDisp.h"
#include "Functions.h"


int main()
{
    // Seriale Principale
    char c[4]; // variabile che contiene il carattere appena ricevuto
    char buffer[4][128]; // buffer di accumulo dei caratteri in sequenza
    char bufferTemp[128]; //buffer di appoggio per le funzioni di stampa. Sarebbe meglio evitarlo passando alla funzione una matrice
    char i[4]= {0,0,0,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);
    ScreenSaver.attach(&scsa,60);
    sc.emptyFrame();
    sc.banner();
    //ardser
    ardser.printf("Connected\r");
    // display
    initDisp(dispType);
    setFontDisp(dispType,'N');
    bannerDisp(dispType);

    while(1) {
        // ardser.attach(&callback);
        //seriale interna
        if (pc.readable()) {
            c[0]=pc.getc(); //legge un carattere dalla seriale
            if (c[0] != 13) {
                buffer[0][i[0]]=c[0]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
                i[0]++; // incrementa il puntatore al buffer
                led.flash(2);
            } else {
                pc.printf("\n\r");
                buffer[0][i[0]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
                //controlla di non  mandare solo un CR
                if (i[0]>0) {
                   // if (realExtraSerial==false) ardser.printf("cmd Ready\n\r");
                    for(int ii=0; ii<=i[0]; ii++) bufferTemp[ii]=buffer[0][ii];
                    parser(bufferTemp);
                } else sc.commitScreen();
                i[0]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
            }
        }
        //seriale esterna
        if (ardser.readable()) {
            c[1]=ardser.getc(); //legge un carattere dalla seriale
            if (c[1] != 13) {                   
                buffer[1][i[1]]=c[1]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
                i[1]++; // incrementa il puntatore al buffer
                led.flash(2);
            } else {
                //ardser.printf("\n\r");     
                buffer[1][i[1]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
                //controlla di non  mandare solo un CR
                if (i[1]>0) {
                    for(int ii=0; ii<=i[1]; ii++) bufferTemp[ii]=buffer[1][ii];
                    writeInput(bufferTemp);                    
                } else sc.commitScreen();
                i[1]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
            }
        }

    }
}