Console Serial IO con display OLED e seriale asincrona
Dependencies: mbed BufferedSerial AserialIOFuncLib SSD1306 TerminalPlusV2
Fork of SerialIO by
Console Serial IO con display OLED e seriale asincrona
main.cpp@5:4d547f4c1278, 2015-05-24 (annotated)
- Committer:
- MaxScorda
- Date:
- Sun May 24 18:38:44 2015 +0000
- Revision:
- 5:4d547f4c1278
- Parent:
- 4:aa08e8d5ac27
- Child:
- 6:f8865b6d592a
Correzioni minori
Who changed what in which revision?
User | Revision | Line number | New 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 | 5:4d547f4c1278 | 38 | pc.printf("Led ACCESO \n\r"); |
MaxScorda | 5:4d547f4c1278 | 39 | ardser.printf("\nLed ACCESO \n\r"); |
MaxScorda | 5:4d547f4c1278 | 40 | led.onOff(1); //Accende il led |
MaxScorda | 5:4d547f4c1278 | 41 | errp=0; |
MaxScorda | 4:aa08e8d5ac27 | 42 | } |
MaxScorda | 5:4d547f4c1278 | 43 | //Confronto per i comandi di spegnimento del led |
MaxScorda | 5:4d547f4c1278 | 44 | if ((strcmp(stringa,"off")==0) ||(strcmp(stringa,"spento")==0) ||(strcmp(stringa,"chiuditi sesamo")==0)) { |
MaxScorda | 5:4d547f4c1278 | 45 | pc.printf("Led SPENTO !\n\r"); |
MaxScorda | 5:4d547f4c1278 | 46 | ardser.printf("\nLed SPENTO! \n\r"); |
MaxScorda | 5:4d547f4c1278 | 47 | led.onOff(0); // spegne il led |
MaxScorda | 5:4d547f4c1278 | 48 | errp=0; |
MaxScorda | 5:4d547f4c1278 | 49 | } |
MaxScorda | 5:4d547f4c1278 | 50 | if (errp==1) { |
MaxScorda | 5:4d547f4c1278 | 51 | pc.printf("Bad command\n\r"); |
MaxScorda | 5:4d547f4c1278 | 52 | ardser.printf("\nBad command\n\r"); |
MaxScorda | 5:4d547f4c1278 | 53 | } |
MaxScorda | 5:4d547f4c1278 | 54 | } |
MaxScorda | 4:aa08e8d5ac27 | 55 | //-------------- fine funzioni |
MaxScorda | 4:aa08e8d5ac27 | 56 | |
MaxScorda | 0:dd5e64dd6caf | 57 | int main() |
MaxScorda | 0:dd5e64dd6caf | 58 | { |
MaxScorda | 0:dd5e64dd6caf | 59 | char c; // variabile che contiene il carattere appena ricevuto |
MaxScorda | 0:dd5e64dd6caf | 60 | char buffer[128]; // buffer di accumulo dei caratteri in sequenza |
MaxScorda | 0:dd5e64dd6caf | 61 | char i=0; // variabile di comodo per il conteggio dei caratteri |
MaxScorda | 1:e17894b4be01 | 62 | //Serial config |
MaxScorda | 1:e17894b4be01 | 63 | pc.baud(SERIAL1BAUD); |
MaxScorda | 1:e17894b4be01 | 64 | ardser.baud(SERIALARDBAUD); |
MaxScorda | 4:aa08e8d5ac27 | 65 | //pc.format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1) |
MaxScorda | 3:2f32e34d820c | 66 | |
MaxScorda | 0:dd5e64dd6caf | 67 | mybutton.fall(&pressed); |
MaxScorda | 5:4d547f4c1278 | 68 | sc.banner(); |
MaxScorda | 0:dd5e64dd6caf | 69 | |
MaxScorda | 0:dd5e64dd6caf | 70 | while(1) { |
MaxScorda | 3:2f32e34d820c | 71 | ardser.attach(&callback); |
MaxScorda | 0:dd5e64dd6caf | 72 | c=pc.getc(); //legge un carattere dalla seriale |
MaxScorda | 0:dd5e64dd6caf | 73 | if (c != 13) { |
MaxScorda | 0:dd5e64dd6caf | 74 | buffer[i]=c; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer |
MaxScorda | 0:dd5e64dd6caf | 75 | i++; // incrementa il puntatore al buffer |
MaxScorda | 4:aa08e8d5ac27 | 76 | led.flash(2); |
MaxScorda | 0:dd5e64dd6caf | 77 | } else { |
MaxScorda | 0:dd5e64dd6caf | 78 | pc.printf("\n\r"); |
MaxScorda | 0:dd5e64dd6caf | 79 | buffer[i]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa |
MaxScorda | 0:dd5e64dd6caf | 80 | i=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa |
MaxScorda | 5:4d547f4c1278 | 81 | ardser.printf("\nxx\n\r"); |
MaxScorda | 5:4d547f4c1278 | 82 | parser(buffer); |
MaxScorda | 0:dd5e64dd6caf | 83 | } |
MaxScorda | 0:dd5e64dd6caf | 84 | } |
MaxScorda | 0:dd5e64dd6caf | 85 | } |