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@45:58713cc78010, 2019-12-12 (annotated)
- Committer:
- MaxScorda
- Date:
- Thu Dec 12 20:58:45 2019 +0000
- Revision:
- 45:58713cc78010
- Parent:
- 41:fb612a3936fb
Info
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 | 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 | 38:d88296cbb39c | 12 | // originale!!!!!!!!! BufferedSerial ardser(PA_11, PA_12); //Apertura della seriale 1 *opzionale vedi sotto |
MaxScorda | 38:d88296cbb39c | 13 | BufferedSerial ardser(PC_4, PC_5); |
MaxScorda | 4:aa08e8d5ac27 | 14 | //init funzioni personal lib |
MaxScorda | 4:aa08e8d5ac27 | 15 | Flasher led(LED1); |
MaxScorda | 5:4d547f4c1278 | 16 | Screen sc(&pc); |
MaxScorda | 36:9ecb98d7c2cd | 17 | //genFunctions fnz; |
MaxScorda | 36:9ecb98d7c2cd | 18 | genFunctions fnzAdd; //messa qui rende la raccolta funzioni indipendente |
MaxScorda | 23:b7bd85345617 | 19 | Ticker ScreenSaver; |
MaxScorda | 7:f57abb3f0d3f | 20 | |
MaxScorda | 4:aa08e8d5ac27 | 21 | //var |
MaxScorda | 13:92303a41947a | 22 | int cont=0; |
MaxScorda | 12:78f6112c900f | 23 | int dispType=0; //0:oled 1:lcd |
MaxScorda | 39:0d7165083e7a | 24 | bool status=false; //accensione |
MaxScorda | 41:fb612a3936fb | 25 | bool randomActivate=false; //se true attiva sul sequencer il cambio di valori casuali |
MaxScorda | 20:fc0a3050c5d1 | 26 | |
MaxScorda | 38:d88296cbb39c | 27 | string menu_main[10]; |
MaxScorda | 40:48422add4537 | 28 | string menu_funcChoice[10]; |
MaxScorda | 40:48422add4537 | 29 | /* |
MaxScorda | 40:48422add4537 | 30 | 0-Descrizione |
MaxScorda | 40:48422add4537 | 31 | 1-index function_val |
MaxScorda | 40:48422add4537 | 32 | */ |
MaxScorda | 40:48422add4537 | 33 | string menu_function[50]; |
MaxScorda | 40:48422add4537 | 34 | int function_val[50][7]; //valori delle funzioni |
MaxScorda | 40:48422add4537 | 35 | /* |
MaxScorda | 40:48422add4537 | 36 | 0-menu |
MaxScorda | 40:48422add4537 | 37 | 1-funzione |
MaxScorda | 40:48422add4537 | 38 | 2-min |
MaxScorda | 40:48422add4537 | 39 | 3-max |
MaxScorda | 40:48422add4537 | 40 | 4-step |
MaxScorda | 40:48422add4537 | 41 | 5-valstart |
MaxScorda | 40:48422add4537 | 42 | 6-valore attuale |
MaxScorda | 40:48422add4537 | 43 | */ |
MaxScorda | 40:48422add4537 | 44 | |
MaxScorda | 38:d88296cbb39c | 45 | int menuidx=0; |
MaxScorda | 38:d88296cbb39c | 46 | int funcidx=0; |
MaxScorda | 39:0d7165083e7a | 47 | int funccontidx=0; //contatore di posizione durante caricamento |
MaxScorda | 38:d88296cbb39c | 48 | |
MaxScorda | 38:d88296cbb39c | 49 | //---------- extern |
MaxScorda | 38:d88296cbb39c | 50 | // dichiarando qui le variabili extern, posso inizializzarle in qualunque parte del programma. In teoria parrebbe inutile ma in questo modo posso un domani istanziarle ovunque |
MaxScorda | 38:d88296cbb39c | 51 | extern int p01,p02,p03; |
MaxScorda | 39:0d7165083e7a | 52 | extern int p16, p17; |
MaxScorda | 38:d88296cbb39c | 53 | extern int p51, p52; |
MaxScorda | 1:e17894b4be01 | 54 | |
MaxScorda | 4:aa08e8d5ac27 | 55 | //------------ Funzioni ------------- |
MaxScorda | 12:78f6112c900f | 56 | #include "macroDisp.h" |
MaxScorda | 7:f57abb3f0d3f | 57 | #include "Functions.h" |
MaxScorda | 3:2f32e34d820c | 58 | |
MaxScorda | 24:1603f5b23d98 | 59 | |
MaxScorda | 0:dd5e64dd6caf | 60 | int main() |
MaxScorda | 0:dd5e64dd6caf | 61 | { |
MaxScorda | 19:8a436200d76c | 62 | // Seriale Principale |
MaxScorda | 27:b8d7f2ede945 | 63 | char c[4]; // variabile che contiene il carattere appena ricevuto |
MaxScorda | 27:b8d7f2ede945 | 64 | char buffer[4][128]; // buffer di accumulo dei caratteri in sequenza |
MaxScorda | 27:b8d7f2ede945 | 65 | char bufferTemp[128]; //buffer di appoggio per le funzioni di stampa. Sarebbe meglio evitarlo passando alla funzione una matrice |
MaxScorda | 27:b8d7f2ede945 | 66 | char i[4]= {0,0,0,0}; // variabile di comodo per il conteggio dei caratteri |
MaxScorda | 27:b8d7f2ede945 | 67 | |
MaxScorda | 1:e17894b4be01 | 68 | //Serial config |
MaxScorda | 33:19d1d8bc5891 | 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 | 23:b7bd85345617 | 74 | ScreenSaver.attach(&scsa,60); |
MaxScorda | 29:bfb815540de7 | 75 | |
MaxScorda | 18:dbe0172cca20 | 76 | //ardser |
MaxScorda | 18:dbe0172cca20 | 77 | ardser.printf("Connected\r"); |
MaxScorda | 13:92303a41947a | 78 | // display |
MaxScorda | 13:92303a41947a | 79 | initDisp(dispType); |
MaxScorda | 13:92303a41947a | 80 | setFontDisp(dispType,'N'); |
MaxScorda | 17:7c8c37fbec9f | 81 | bannerDisp(dispType); |
MaxScorda | 33:19d1d8bc5891 | 82 | //terminal |
MaxScorda | 37:befd2fe96ee3 | 83 | bannerAdv(); |
MaxScorda | 36:9ecb98d7c2cd | 84 | preloadValue(); |
MaxScorda | 39:0d7165083e7a | 85 | //richiedi menu |
MaxScorda | 39:0d7165083e7a | 86 | ardser.printf("rl\r"); |
MaxScorda | 0:dd5e64dd6caf | 87 | |
MaxScorda | 0:dd5e64dd6caf | 88 | while(1) { |
MaxScorda | 28:f7a59cee5f0d | 89 | // ardser.attach(&callback); |
MaxScorda | 19:8a436200d76c | 90 | //seriale interna |
MaxScorda | 25:5e93e62a319e | 91 | if (pc.readable()) { |
MaxScorda | 27:b8d7f2ede945 | 92 | c[0]=pc.getc(); //legge un carattere dalla seriale |
MaxScorda | 29:bfb815540de7 | 93 | term.putc(c[0]); //redirect to terminal |
MaxScorda | 32:b7859f48942a | 94 | if (c[0] != 13) { |
MaxScorda | 27:b8d7f2ede945 | 95 | buffer[0][i[0]]=c[0]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer |
MaxScorda | 27:b8d7f2ede945 | 96 | i[0]++; // incrementa il puntatore al buffer |
MaxScorda | 25:5e93e62a319e | 97 | led.flash(2); |
MaxScorda | 25:5e93e62a319e | 98 | } else { |
MaxScorda | 29:bfb815540de7 | 99 | //pc.printf("\n\r"); |
MaxScorda | 27:b8d7f2ede945 | 100 | buffer[0][i[0]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa |
MaxScorda | 25:5e93e62a319e | 101 | //controlla di non mandare solo un CR |
MaxScorda | 27:b8d7f2ede945 | 102 | if (i[0]>0) { |
MaxScorda | 27:b8d7f2ede945 | 103 | for(int ii=0; ii<=i[0]; ii++) bufferTemp[ii]=buffer[0][ii]; |
MaxScorda | 29:bfb815540de7 | 104 | parserVT100(bufferTemp); |
MaxScorda | 36:9ecb98d7c2cd | 105 | } else term.readypos(); |
MaxScorda | 27:b8d7f2ede945 | 106 | i[0]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa |
MaxScorda | 25:5e93e62a319e | 107 | } |
MaxScorda | 19:8a436200d76c | 108 | } |
MaxScorda | 33:19d1d8bc5891 | 109 | |
MaxScorda | 27:b8d7f2ede945 | 110 | //seriale esterna |
MaxScorda | 27:b8d7f2ede945 | 111 | if (ardser.readable()) { |
MaxScorda | 27:b8d7f2ede945 | 112 | c[1]=ardser.getc(); //legge un carattere dalla seriale |
MaxScorda | 38:d88296cbb39c | 113 | if ((c[1] != 10) && (c[1] != 13)) { |
MaxScorda | 27:b8d7f2ede945 | 114 | buffer[1][i[1]]=c[1]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer |
MaxScorda | 27:b8d7f2ede945 | 115 | i[1]++; // incrementa il puntatore al buffer |
MaxScorda | 27:b8d7f2ede945 | 116 | } else { |
MaxScorda | 33:19d1d8bc5891 | 117 | //ardser.printf("\n\r"); |
MaxScorda | 27:b8d7f2ede945 | 118 | buffer[1][i[1]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa |
MaxScorda | 27:b8d7f2ede945 | 119 | //controlla di non mandare solo un CR |
MaxScorda | 27:b8d7f2ede945 | 120 | if (i[1]>0) { |
MaxScorda | 28:f7a59cee5f0d | 121 | for(int ii=0; ii<=i[1]; ii++) bufferTemp[ii]=buffer[1][ii]; |
MaxScorda | 33:19d1d8bc5891 | 122 | writeInput(bufferTemp); |
MaxScorda | 33:19d1d8bc5891 | 123 | } else term.readypos(); |
MaxScorda | 27:b8d7f2ede945 | 124 | i[1]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa |
MaxScorda | 27:b8d7f2ede945 | 125 | } |
MaxScorda | 27:b8d7f2ede945 | 126 | } |
MaxScorda | 27:b8d7f2ede945 | 127 | |
MaxScorda | 0:dd5e64dd6caf | 128 | } |
MaxScorda | 0:dd5e64dd6caf | 129 | } |
MaxScorda | 6:f8865b6d592a | 130 | |
MaxScorda | 6:f8865b6d592a | 131 | |
MaxScorda | 20:fc0a3050c5d1 | 132 |