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 28 14:52:30 2015 +0000
Revision:
6:f8865b6d592a
Parent:
5:4d547f4c1278
Child:
7:f57abb3f0d3f
Pre Parser

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 4:aa08e8d5ac27 3 #include "IOFuncLib.h"
MaxScorda 1:e17894b4be01 4
MaxScorda 4:aa08e8d5ac27 5 //init standard
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 4:aa08e8d5ac27 9 //init funzioni personal lib
MaxScorda 4:aa08e8d5ac27 10 Flasher led(LED1);
MaxScorda 5:4d547f4c1278 11 Screen sc(&pc);
MaxScorda 4:aa08e8d5ac27 12 //var
MaxScorda 4:aa08e8d5ac27 13 int cont=0;
MaxScorda 1:e17894b4be01 14
MaxScorda 4:aa08e8d5ac27 15 //------------ Funzioni -------------
MaxScorda 0:dd5e64dd6caf 16
MaxScorda 0:dd5e64dd6caf 17 void pressed()
MaxScorda 0:dd5e64dd6caf 18 {
MaxScorda 5:4d547f4c1278 19 sc.pressed();
MaxScorda 0:dd5e64dd6caf 20 }
MaxScorda 0:dd5e64dd6caf 21
MaxScorda 0:dd5e64dd6caf 22
MaxScorda 4:aa08e8d5ac27 23 void callback()
MaxScorda 4:aa08e8d5ac27 24 {
MaxScorda 3:2f32e34d820c 25 // Note: you need to actually read from the serial to clear the RX interrupt
MaxScorda 4:aa08e8d5ac27 26 // ardser.printf("%d \n", cont++);
MaxScorda 4:aa08e8d5ac27 27 // myled2 = !myled2;
MaxScorda 3:2f32e34d820c 28 }
MaxScorda 3:2f32e34d820c 29
MaxScorda 0:dd5e64dd6caf 30
MaxScorda 5:4d547f4c1278 31 void parser(char stringa[])
MaxScorda 5:4d547f4c1278 32 {
MaxScorda 5:4d547f4c1278 33 bool errp=1;
MaxScorda 5:4d547f4c1278 34 //confronta la stringa ricevuta con le costanti accettate per il comando di accensione del led
MaxScorda 5:4d547f4c1278 35 //la funzione strcmp fa parte della libreria string standard del C e confronta 2 stringhe
MaxScorda 5:4d547f4c1278 36 //restituendo 0 se le stringhe sono uguali.
MaxScorda 5:4d547f4c1278 37 if ((strcmp(stringa,"on")==0) ||(strcmp(stringa,"acceso")==0) ||(strcmp(stringa,"apriti sesamo")==0)) {
MaxScorda 6:f8865b6d592a 38 // pc.printf("Led ACCESO \n\r");
MaxScorda 6:f8865b6d592a 39 sc.writeScreen("Led ACCESO \n",2,10);
MaxScorda 5:4d547f4c1278 40 ardser.printf("\nLed ACCESO \n\r");
MaxScorda 5:4d547f4c1278 41 led.onOff(1); //Accende il led
MaxScorda 5:4d547f4c1278 42 errp=0;
MaxScorda 6:f8865b6d592a 43 sc.commitScreen();
MaxScorda 4:aa08e8d5ac27 44 }
MaxScorda 5:4d547f4c1278 45 //Confronto per i comandi di spegnimento del led
MaxScorda 5:4d547f4c1278 46 if ((strcmp(stringa,"off")==0) ||(strcmp(stringa,"spento")==0) ||(strcmp(stringa,"chiuditi sesamo")==0)) {
MaxScorda 6:f8865b6d592a 47 // pc.printf("Led SPENTO !\n\r");
MaxScorda 6:f8865b6d592a 48 sc.writeScreen("Led SPENTO! \n",2,10);
MaxScorda 5:4d547f4c1278 49 ardser.printf("\nLed SPENTO! \n\r");
MaxScorda 5:4d547f4c1278 50 led.onOff(0); // spegne il led
MaxScorda 5:4d547f4c1278 51 errp=0;
MaxScorda 6:f8865b6d592a 52 sc.commitScreen();
MaxScorda 5:4d547f4c1278 53 }
MaxScorda 5:4d547f4c1278 54 if (errp==1) {
MaxScorda 6:f8865b6d592a 55 // pc.printf("Bad command\n\r");
MaxScorda 6:f8865b6d592a 56 sc.writeScreen("Bad Command\n",2,10);
MaxScorda 5:4d547f4c1278 57 ardser.printf("\nBad command\n\r");
MaxScorda 6:f8865b6d592a 58 sc.commitScreen();
MaxScorda 5:4d547f4c1278 59 }
MaxScorda 5:4d547f4c1278 60 }
MaxScorda 4:aa08e8d5ac27 61 //-------------- fine funzioni
MaxScorda 4:aa08e8d5ac27 62
MaxScorda 0:dd5e64dd6caf 63 int main()
MaxScorda 0:dd5e64dd6caf 64 {
MaxScorda 0:dd5e64dd6caf 65 char c; // variabile che contiene il carattere appena ricevuto
MaxScorda 0:dd5e64dd6caf 66 char buffer[128]; // buffer di accumulo dei caratteri in sequenza
MaxScorda 0:dd5e64dd6caf 67 char i=0; // variabile di comodo per il conteggio dei caratteri
MaxScorda 1:e17894b4be01 68 //Serial config
MaxScorda 1:e17894b4be01 69 pc.baud(SERIAL1BAUD);
MaxScorda 1:e17894b4be01 70 ardser.baud(SERIALARDBAUD);
MaxScorda 4:aa08e8d5ac27 71 //pc.format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1)
MaxScorda 3:2f32e34d820c 72
MaxScorda 0:dd5e64dd6caf 73 mybutton.fall(&pressed);
MaxScorda 6:f8865b6d592a 74 sc.emptyFrame();
MaxScorda 5:4d547f4c1278 75 sc.banner();
MaxScorda 0:dd5e64dd6caf 76
MaxScorda 0:dd5e64dd6caf 77 while(1) {
MaxScorda 3:2f32e34d820c 78 ardser.attach(&callback);
MaxScorda 0:dd5e64dd6caf 79 c=pc.getc(); //legge un carattere dalla seriale
MaxScorda 0:dd5e64dd6caf 80 if (c != 13) {
MaxScorda 0:dd5e64dd6caf 81 buffer[i]=c; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
MaxScorda 0:dd5e64dd6caf 82 i++; // incrementa il puntatore al buffer
MaxScorda 4:aa08e8d5ac27 83 led.flash(2);
MaxScorda 0:dd5e64dd6caf 84 } else {
MaxScorda 0:dd5e64dd6caf 85 pc.printf("\n\r");
MaxScorda 0:dd5e64dd6caf 86 buffer[i]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
MaxScorda 0:dd5e64dd6caf 87 i=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
MaxScorda 6:f8865b6d592a 88 ardser.printf("\ncmd Ready\n\r");
MaxScorda 5:4d547f4c1278 89 parser(buffer);
MaxScorda 0:dd5e64dd6caf 90 }
MaxScorda 0:dd5e64dd6caf 91 }
MaxScorda 0:dd5e64dd6caf 92 }
MaxScorda 6:f8865b6d592a 93
MaxScorda 6:f8865b6d592a 94