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:
Sun Dec 27 23:15:53 2015 +0000
Revision:
39:0d7165083e7a
Parent:
38:d88296cbb39c
Child:
40:48422add4537
Interfaccia statica ma funzionante

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 39:0d7165083e7a 25 bool randomActivate=true; //se true attiva sul sequencer il cambio di valori casuali
MaxScorda 20:fc0a3050c5d1 26
MaxScorda 38:d88296cbb39c 27 string menu_main[10];
MaxScorda 39:0d7165083e7a 28 string menu_funcChoice[100]; //no 100
MaxScorda 38:d88296cbb39c 29 string menu_function[99];
MaxScorda 38:d88296cbb39c 30 int menuidx=0;
MaxScorda 38:d88296cbb39c 31 int funcidx=0;
MaxScorda 39:0d7165083e7a 32 int funccontidx=0; //contatore di posizione durante caricamento
MaxScorda 38:d88296cbb39c 33
MaxScorda 38:d88296cbb39c 34 //---------- extern
MaxScorda 38:d88296cbb39c 35 // 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 36 extern int p01,p02,p03;
MaxScorda 39:0d7165083e7a 37 extern int p16, p17;
MaxScorda 38:d88296cbb39c 38 extern int p51, p52;
MaxScorda 1:e17894b4be01 39
MaxScorda 4:aa08e8d5ac27 40 //------------ Funzioni -------------
MaxScorda 12:78f6112c900f 41 #include "macroDisp.h"
MaxScorda 7:f57abb3f0d3f 42 #include "Functions.h"
MaxScorda 3:2f32e34d820c 43
MaxScorda 24:1603f5b23d98 44
MaxScorda 0:dd5e64dd6caf 45 int main()
MaxScorda 0:dd5e64dd6caf 46 {
MaxScorda 19:8a436200d76c 47 // Seriale Principale
MaxScorda 27:b8d7f2ede945 48 char c[4]; // variabile che contiene il carattere appena ricevuto
MaxScorda 27:b8d7f2ede945 49 char buffer[4][128]; // buffer di accumulo dei caratteri in sequenza
MaxScorda 27:b8d7f2ede945 50 char bufferTemp[128]; //buffer di appoggio per le funzioni di stampa. Sarebbe meglio evitarlo passando alla funzione una matrice
MaxScorda 27:b8d7f2ede945 51 char i[4]= {0,0,0,0}; // variabile di comodo per il conteggio dei caratteri
MaxScorda 27:b8d7f2ede945 52
MaxScorda 1:e17894b4be01 53 //Serial config
MaxScorda 33:19d1d8bc5891 54 pc.baud(SERIAL1BAUD);
MaxScorda 1:e17894b4be01 55 ardser.baud(SERIALARDBAUD);
MaxScorda 4:aa08e8d5ac27 56 //pc.format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1)
MaxScorda 3:2f32e34d820c 57
MaxScorda 0:dd5e64dd6caf 58 mybutton.fall(&pressed);
MaxScorda 23:b7bd85345617 59 ScreenSaver.attach(&scsa,60);
MaxScorda 29:bfb815540de7 60
MaxScorda 18:dbe0172cca20 61 //ardser
MaxScorda 18:dbe0172cca20 62 ardser.printf("Connected\r");
MaxScorda 13:92303a41947a 63 // display
MaxScorda 13:92303a41947a 64 initDisp(dispType);
MaxScorda 13:92303a41947a 65 setFontDisp(dispType,'N');
MaxScorda 17:7c8c37fbec9f 66 bannerDisp(dispType);
MaxScorda 33:19d1d8bc5891 67 //terminal
MaxScorda 37:befd2fe96ee3 68 bannerAdv();
MaxScorda 36:9ecb98d7c2cd 69 preloadValue();
MaxScorda 39:0d7165083e7a 70 //richiedi menu
MaxScorda 39:0d7165083e7a 71 ardser.printf("rl\r");
MaxScorda 0:dd5e64dd6caf 72
MaxScorda 0:dd5e64dd6caf 73 while(1) {
MaxScorda 28:f7a59cee5f0d 74 // ardser.attach(&callback);
MaxScorda 19:8a436200d76c 75 //seriale interna
MaxScorda 25:5e93e62a319e 76 if (pc.readable()) {
MaxScorda 27:b8d7f2ede945 77 c[0]=pc.getc(); //legge un carattere dalla seriale
MaxScorda 29:bfb815540de7 78 term.putc(c[0]); //redirect to terminal
MaxScorda 32:b7859f48942a 79 if (c[0] != 13) {
MaxScorda 27:b8d7f2ede945 80 buffer[0][i[0]]=c[0]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
MaxScorda 27:b8d7f2ede945 81 i[0]++; // incrementa il puntatore al buffer
MaxScorda 25:5e93e62a319e 82 led.flash(2);
MaxScorda 25:5e93e62a319e 83 } else {
MaxScorda 29:bfb815540de7 84 //pc.printf("\n\r");
MaxScorda 27:b8d7f2ede945 85 buffer[0][i[0]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
MaxScorda 25:5e93e62a319e 86 //controlla di non mandare solo un CR
MaxScorda 27:b8d7f2ede945 87 if (i[0]>0) {
MaxScorda 27:b8d7f2ede945 88 for(int ii=0; ii<=i[0]; ii++) bufferTemp[ii]=buffer[0][ii];
MaxScorda 29:bfb815540de7 89 parserVT100(bufferTemp);
MaxScorda 36:9ecb98d7c2cd 90 } else term.readypos();
MaxScorda 27:b8d7f2ede945 91 i[0]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
MaxScorda 25:5e93e62a319e 92 }
MaxScorda 19:8a436200d76c 93 }
MaxScorda 33:19d1d8bc5891 94
MaxScorda 27:b8d7f2ede945 95 //seriale esterna
MaxScorda 27:b8d7f2ede945 96 if (ardser.readable()) {
MaxScorda 27:b8d7f2ede945 97 c[1]=ardser.getc(); //legge un carattere dalla seriale
MaxScorda 38:d88296cbb39c 98 if ((c[1] != 10) && (c[1] != 13)) {
MaxScorda 27:b8d7f2ede945 99 buffer[1][i[1]]=c[1]; // se il carattere è diverso da CarriageReturn (ASCII 13) lo memorizza nel buffer
MaxScorda 27:b8d7f2ede945 100 i[1]++; // incrementa il puntatore al buffer
MaxScorda 27:b8d7f2ede945 101 } else {
MaxScorda 33:19d1d8bc5891 102 //ardser.printf("\n\r");
MaxScorda 27:b8d7f2ede945 103 buffer[1][i[1]]=0; //se è un CR inserisci un carattere nullo nel buffer per delimitare la stringa
MaxScorda 27:b8d7f2ede945 104 //controlla di non mandare solo un CR
MaxScorda 27:b8d7f2ede945 105 if (i[1]>0) {
MaxScorda 28:f7a59cee5f0d 106 for(int ii=0; ii<=i[1]; ii++) bufferTemp[ii]=buffer[1][ii];
MaxScorda 33:19d1d8bc5891 107 writeInput(bufferTemp);
MaxScorda 33:19d1d8bc5891 108 } else term.readypos();
MaxScorda 27:b8d7f2ede945 109 i[1]=0; //azzera la posizione del puntatore del buffer pronto per la ricezione di una nuova stringa
MaxScorda 27:b8d7f2ede945 110 }
MaxScorda 27:b8d7f2ede945 111 }
MaxScorda 27:b8d7f2ede945 112
MaxScorda 0:dd5e64dd6caf 113 }
MaxScorda 0:dd5e64dd6caf 114 }
MaxScorda 6:f8865b6d592a 115
MaxScorda 6:f8865b6d592a 116
MaxScorda 20:fc0a3050c5d1 117