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 Dec 12 20:58:45 2019 +0000
Revision:
45:58713cc78010
Parent:
41:fb612a3936fb
Info

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 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