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:
Wed Sep 23 23:57:28 2015 +0000
Revision:
33:19d1d8bc5891
Parent:
32:b7859f48942a
Child:
36:9ecb98d7c2cd
Corretta latenza seriale in ingresso

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 23:b7bd85345617 4 #include "BufferedSerial.h"
MaxScorda 29:bfb815540de7 5 #include "Terminal.h"
MaxScorda 29:bfb815540de7 6
MaxScorda 4:aa08e8d5ac27 7 //init standard
MaxScorda 0:dd5e64dd6caf 8 InterruptIn mybutton(USER_BUTTON);
MaxScorda 29:bfb815540de7 9
MaxScorda 29:bfb815540de7 10 Terminal term(USBTX, USBRX); // tx, rx
MaxScorda 25:5e93e62a319e 11 BufferedSerial pc(SERIAL_TX, SERIAL_RX); //Apertura della seriale 2
MaxScorda 25:5e93e62a319e 12 BufferedSerial ardser(PA_11, PA_12); //Apertura della seriale 1 *opzionale vedi sotto
MaxScorda 4:aa08e8d5ac27 13 //init funzioni personal lib
MaxScorda 4:aa08e8d5ac27 14 Flasher led(LED1);
MaxScorda 5:4d547f4c1278 15 Screen sc(&pc);
MaxScorda 7:f57abb3f0d3f 16 genFunctions fnz;
MaxScorda 23:b7bd85345617 17 Ticker ScreenSaver;
MaxScorda 7:f57abb3f0d3f 18
MaxScorda 4:aa08e8d5ac27 19 //var
MaxScorda 13:92303a41947a 20 int cont=0;
MaxScorda 12:78f6112c900f 21 int dispType=0; //0:oled 1:lcd
MaxScorda 20:fc0a3050c5d1 22 bool realExtraSerial=true; //se true manda fuori solo le info reali senno demo
MaxScorda 20:fc0a3050c5d1 23
MaxScorda 1:e17894b4be01 24
MaxScorda 4:aa08e8d5ac27 25 //------------ Funzioni -------------
MaxScorda 12:78f6112c900f 26 #include "macroDisp.h"
MaxScorda 7:f57abb3f0d3f 27 #include "Functions.h"
MaxScorda 3:2f32e34d820c 28
MaxScorda 24:1603f5b23d98 29
MaxScorda 0:dd5e64dd6caf 30 int main()
MaxScorda 0:dd5e64dd6caf 31 {
MaxScorda 19:8a436200d76c 32 // Seriale Principale
MaxScorda 27:b8d7f2ede945 33 char c[4]; // variabile che contiene il carattere appena ricevuto
MaxScorda 27:b8d7f2ede945 34 char buffer[4][128]; // buffer di accumulo dei caratteri in sequenza
MaxScorda 27:b8d7f2ede945 35 char bufferTemp[128]; //buffer di appoggio per le funzioni di stampa. Sarebbe meglio evitarlo passando alla funzione una matrice
MaxScorda 27:b8d7f2ede945 36 char i[4]= {0,0,0,0}; // variabile di comodo per il conteggio dei caratteri
MaxScorda 27:b8d7f2ede945 37
MaxScorda 1:e17894b4be01 38 //Serial config
MaxScorda 33:19d1d8bc5891 39 pc.baud(SERIAL1BAUD);
MaxScorda 1:e17894b4be01 40 ardser.baud(SERIALARDBAUD);
MaxScorda 4:aa08e8d5ac27 41 //pc.format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1)
MaxScorda 3:2f32e34d820c 42
MaxScorda 0:dd5e64dd6caf 43 mybutton.fall(&pressed);
MaxScorda 23:b7bd85345617 44 ScreenSaver.attach(&scsa,60);
MaxScorda 29:bfb815540de7 45
MaxScorda 18:dbe0172cca20 46 //ardser
MaxScorda 18:dbe0172cca20 47 ardser.printf("Connected\r");
MaxScorda 13:92303a41947a 48 // display
MaxScorda 13:92303a41947a 49 initDisp(dispType);
MaxScorda 13:92303a41947a 50 setFontDisp(dispType,'N');
MaxScorda 17:7c8c37fbec9f 51 bannerDisp(dispType);
MaxScorda 33:19d1d8bc5891 52 //terminal
MaxScorda 33:19d1d8bc5891 53 term.bannerAdv();
MaxScorda 0:dd5e64dd6caf 54
MaxScorda 0:dd5e64dd6caf 55 while(1) {
MaxScorda 28:f7a59cee5f0d 56 // ardser.attach(&callback);
MaxScorda 19:8a436200d76c 57 //seriale interna
MaxScorda 25:5e93e62a319e 58 if (pc.readable()) {
MaxScorda 27:b8d7f2ede945 59 c[0]=pc.getc(); //legge un carattere dalla seriale
MaxScorda 29:bfb815540de7 60 term.putc(c[0]); //redirect to terminal
MaxScorda 32:b7859f48942a 61 if (c[0] != 13) {
MaxScorda 27:b8d7f2ede945 62 buffer[0][i[0]]=c[0]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
MaxScorda 27:b8d7f2ede945 63 i[0]++; // incrementa il puntatore al buffer
MaxScorda 25:5e93e62a319e 64 led.flash(2);
MaxScorda 25:5e93e62a319e 65 } else {
MaxScorda 29:bfb815540de7 66 //pc.printf("\n\r");
MaxScorda 27:b8d7f2ede945 67 buffer[0][i[0]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
MaxScorda 25:5e93e62a319e 68 //controlla di non mandare solo un CR
MaxScorda 27:b8d7f2ede945 69 if (i[0]>0) {
MaxScorda 33:19d1d8bc5891 70 // if (realExtraSerial==false) ardser.printf("cmd Ready\n\r");
MaxScorda 27:b8d7f2ede945 71 for(int ii=0; ii<=i[0]; ii++) bufferTemp[ii]=buffer[0][ii];
MaxScorda 29:bfb815540de7 72 parserVT100(bufferTemp);
MaxScorda 33:19d1d8bc5891 73 } else sc.commitScreen();
MaxScorda 27:b8d7f2ede945 74 i[0]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
MaxScorda 25:5e93e62a319e 75 }
MaxScorda 19:8a436200d76c 76 }
MaxScorda 33:19d1d8bc5891 77
MaxScorda 27:b8d7f2ede945 78 //seriale esterna
MaxScorda 27:b8d7f2ede945 79 if (ardser.readable()) {
MaxScorda 27:b8d7f2ede945 80 c[1]=ardser.getc(); //legge un carattere dalla seriale
MaxScorda 33:19d1d8bc5891 81 if ((c[1] != 10) && (c[1] != 13)) {
MaxScorda 27:b8d7f2ede945 82 buffer[1][i[1]]=c[1]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
MaxScorda 27:b8d7f2ede945 83 i[1]++; // incrementa il puntatore al buffer
MaxScorda 27:b8d7f2ede945 84 } else {
MaxScorda 33:19d1d8bc5891 85 //ardser.printf("\n\r");
MaxScorda 27:b8d7f2ede945 86 buffer[1][i[1]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
MaxScorda 27:b8d7f2ede945 87 //controlla di non mandare solo un CR
MaxScorda 27:b8d7f2ede945 88 if (i[1]>0) {
MaxScorda 28:f7a59cee5f0d 89 for(int ii=0; ii<=i[1]; ii++) bufferTemp[ii]=buffer[1][ii];
MaxScorda 33:19d1d8bc5891 90 writeInput(bufferTemp);
MaxScorda 33:19d1d8bc5891 91 } else term.readypos();
MaxScorda 27:b8d7f2ede945 92 i[1]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
MaxScorda 27:b8d7f2ede945 93 }
MaxScorda 27:b8d7f2ede945 94 }
MaxScorda 27:b8d7f2ede945 95
MaxScorda 0:dd5e64dd6caf 96 }
MaxScorda 0:dd5e64dd6caf 97 }
MaxScorda 6:f8865b6d592a 98
MaxScorda 6:f8865b6d592a 99
MaxScorda 20:fc0a3050c5d1 100