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

Committer:
MaxScorda
Date:
Thu May 21 15:34:30 2015 +0000
Revision:
3:2f32e34d820c
Parent:
2:e7915367de83
Child:
4:aa08e8d5ac27
Pre spostamento seriale a interrupt
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MaxScorda 0:dd5e64dd6caf 1 #include "mbed.h"
MaxScorda 1:e17894b4be01 2 #include "config.h"
MaxScorda 1:e17894b4be01 3
MaxScorda 0:dd5e64dd6caf 4 DigitalOut myled1(LED1); //definisce myled
MaxScorda 0:dd5e64dd6caf 5 DigitalOut myled2(LED2); //definisce myled
MaxScorda 0:dd5e64dd6caf 6 InterruptIn mybutton(USER_BUTTON);
MaxScorda 0:dd5e64dd6caf 7 Serial pc(SERIAL_TX, SERIAL_RX); //Apertura della seriale 2
MaxScorda 3:2f32e34d820c 8 Serial ardser(PA_11, PA_12); //Apertura della seriale 1 *opzionale vedi sotto
MaxScorda 1:e17894b4be01 9
MaxScorda 3:2f32e34d820c 10 int cont=0;
MaxScorda 0:dd5e64dd6caf 11
MaxScorda 0:dd5e64dd6caf 12
MaxScorda 0:dd5e64dd6caf 13 void pressed()
MaxScorda 0:dd5e64dd6caf 14 {
MaxScorda 0:dd5e64dd6caf 15 pc.printf("\f");
MaxScorda 0:dd5e64dd6caf 16 pc.printf("*** Reset Screen ***\n\r\n");
MaxScorda 0:dd5e64dd6caf 17 }
MaxScorda 0:dd5e64dd6caf 18
MaxScorda 0:dd5e64dd6caf 19 void banner()
MaxScorda 0:dd5e64dd6caf 20 {
MaxScorda 0:dd5e64dd6caf 21 pc.printf("\f");
MaxScorda 0:dd5e64dd6caf 22 pc.printf("----- Boot screen -----\n\r");
MaxScorda 0:dd5e64dd6caf 23 pc.printf("--- Nucleo Scorda IO Test ---\n\r\n");
MaxScorda 0:dd5e64dd6caf 24 }
MaxScorda 0:dd5e64dd6caf 25
MaxScorda 3:2f32e34d820c 26 void callback() {
MaxScorda 3:2f32e34d820c 27 // Note: you need to actually read from the serial to clear the RX interrupt
MaxScorda 3:2f32e34d820c 28 // ardser.printf("%d \n", cont++);
MaxScorda 3:2f32e34d820c 29 // myled2 = !myled2;
MaxScorda 3:2f32e34d820c 30 }
MaxScorda 3:2f32e34d820c 31
MaxScorda 0:dd5e64dd6caf 32
MaxScorda 0:dd5e64dd6caf 33 int main()
MaxScorda 0:dd5e64dd6caf 34 {
MaxScorda 0:dd5e64dd6caf 35 char c; // variabile che contiene il carattere appena ricevuto
MaxScorda 0:dd5e64dd6caf 36 char buffer[128]; // buffer di accumulo dei caratteri in sequenza
MaxScorda 0:dd5e64dd6caf 37 char i=0; // variabile di comodo per il conteggio dei caratteri
MaxScorda 1:e17894b4be01 38 //Serial config
MaxScorda 1:e17894b4be01 39 pc.baud(SERIAL1BAUD);
MaxScorda 1:e17894b4be01 40 ardser.baud(SERIALARDBAUD);
MaxScorda 1:e17894b4be01 41 //pc.format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1)
MaxScorda 1:e17894b4be01 42
MaxScorda 3:2f32e34d820c 43
MaxScorda 0:dd5e64dd6caf 44 mybutton.fall(&pressed);
MaxScorda 0:dd5e64dd6caf 45 banner();
MaxScorda 0:dd5e64dd6caf 46
MaxScorda 0:dd5e64dd6caf 47 while(1) {
MaxScorda 3:2f32e34d820c 48 ardser.attach(&callback);
MaxScorda 0:dd5e64dd6caf 49 c=pc.getc(); //legge un carattere dalla seriale
MaxScorda 0:dd5e64dd6caf 50 if (c != 13) {
MaxScorda 0:dd5e64dd6caf 51 buffer[i]=c; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
MaxScorda 0:dd5e64dd6caf 52 i++; // incrementa il puntatore al buffer
MaxScorda 0:dd5e64dd6caf 53 } else {
MaxScorda 0:dd5e64dd6caf 54 pc.printf("\n\r");
MaxScorda 0:dd5e64dd6caf 55 buffer[i]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
MaxScorda 0:dd5e64dd6caf 56 i=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
MaxScorda 0:dd5e64dd6caf 57 if ((strcmp(buffer,"on")==0) // confronta la stringa ricevuta con le costanti accettate per il comando di accensione del led
MaxScorda 0:dd5e64dd6caf 58 ||(strcmp(buffer,"acceso")==0) //la funzione strcmp fa parte della libreria string standard del C e confronta 2 stringhe
MaxScorda 0:dd5e64dd6caf 59 ||(strcmp(buffer,"apriti sesamo")==0)) { //restituendo 0 se le stringhe sono uguali.
MaxScorda 0:dd5e64dd6caf 60 pc.printf("Led ACCESO \n\r");
MaxScorda 3:2f32e34d820c 61 ardser.printf("\nLed ACCESO \n\r");
MaxScorda 0:dd5e64dd6caf 62 myled1 = 1; //Accende il led
MaxScorda 0:dd5e64dd6caf 63 }
MaxScorda 0:dd5e64dd6caf 64 if ((strcmp(buffer,"off")==0) //Confronto per i comandi di spegnimento del led
MaxScorda 0:dd5e64dd6caf 65 ||(strcmp(buffer,"spento")==0)
MaxScorda 0:dd5e64dd6caf 66 ||(strcmp(buffer,"chiuditi sesamo")==0)) {
MaxScorda 0:dd5e64dd6caf 67 pc.printf("Led SPENTO !\n\r");
MaxScorda 3:2f32e34d820c 68 ardser.printf("\nLed SPENTO! \n\r");
MaxScorda 0:dd5e64dd6caf 69
MaxScorda 0:dd5e64dd6caf 70 myled1 = 0; // spegne il led
MaxScorda 0:dd5e64dd6caf 71 }
MaxScorda 0:dd5e64dd6caf 72 }
MaxScorda 0:dd5e64dd6caf 73 }
MaxScorda 0:dd5e64dd6caf 74 }