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:
42:8ca8ff1ab387
Info

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MaxScorda 7:f57abb3f0d3f 1 #include <string>
MaxScorda 7:f57abb3f0d3f 2 #include "IOFuncLib.h"
MaxScorda 36:9ecb98d7c2cd 3 #include "choiceFunctions.h"
MaxScorda 7:f57abb3f0d3f 4
MaxScorda 38:d88296cbb39c 5 //Valori di Menu
MaxScorda 39:0d7165083e7a 6 int p16, p17;
MaxScorda 38:d88296cbb39c 7 int p01, p02, p03;
MaxScorda 38:d88296cbb39c 8 int p51, p52;
MaxScorda 37:befd2fe96ee3 9
MaxScorda 37:befd2fe96ee3 10 void bannerAdv()
MaxScorda 37:befd2fe96ee3 11 {
MaxScorda 37:befd2fe96ee3 12 //spostato qui per lasciare in pace la libreria
MaxScorda 37:befd2fe96ee3 13 term.reset();
MaxScorda 37:befd2fe96ee3 14 term.cls();
MaxScorda 37:befd2fe96ee3 15 term.frame(0, 0, 79, 22,1);
MaxScorda 37:befd2fe96ee3 16 term.forgcol(3);
MaxScorda 37:befd2fe96ee3 17 term.bold();
MaxScorda 38:d88296cbb39c 18 term.formatPrintf("_____ H-Ard Synth Project Console _____\n",19,1);
MaxScorda 38:d88296cbb39c 19 term.formatPrintf("______ Nucleo Scorda IO Terminal ______\n",19,2);
MaxScorda 37:befd2fe96ee3 20
MaxScorda 37:befd2fe96ee3 21 term.resetattrib();
MaxScorda 37:befd2fe96ee3 22 term.forgcol(7);
MaxScorda 37:befd2fe96ee3 23 //3-4
MaxScorda 37:befd2fe96ee3 24 term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr("\n",78,char(196))),1,3,1); //top 1/2
MaxScorda 37:befd2fe96ee3 25 term.forgcol(6);
MaxScorda 38:d88296cbb39c 26 /*
MaxScorda 38:d88296cbb39c 27 //5-6
MaxScorda 37:befd2fe96ee3 28 term.formatPrintf("Pattern 0......... \n",2,6); //p11
MaxScorda 37:befd2fe96ee3 29 term.formatPrintf("Pattern 1......... \n",42,6); //p12
MaxScorda 38:d88296cbb39c 30 //7-8
MaxScorda 39:0d7165083e7a 31
MaxScorda 38:d88296cbb39c 32 //9-10
MaxScorda 37:befd2fe96ee3 33 term.formatPrintf("Serial Real(sro/f) \n",2,10); //p31
MaxScorda 38:d88296cbb39c 34 //11-12
MaxScorda 37:befd2fe96ee3 35 term.formatPrintf("Note Pattern......\n",2,12,99); //p41
MaxScorda 38:d88296cbb39c 36 */
MaxScorda 39:0d7165083e7a 37 //16
MaxScorda 39:0d7165083e7a 38 p16=16;
MaxScorda 39:0d7165083e7a 39 p17=16;
MaxScorda 39:0d7165083e7a 40 term.formatPrintf("Status \n",2,p16); //p16
MaxScorda 39:0d7165083e7a 41 term.formatPrintf("Random \n",32,p17); //p17
MaxScorda 38:d88296cbb39c 42 //18-19
MaxScorda 38:d88296cbb39c 43 p51=18;
MaxScorda 38:d88296cbb39c 44 p52=18;
MaxScorda 38:d88296cbb39c 45 term.formatPrintf("Input string...... \n",2,p51); //p51
MaxScorda 38:d88296cbb39c 46 term.formatPrintf("Command Type \n",48,p52); //p52
MaxScorda 38:d88296cbb39c 47 p01=19;
MaxScorda 38:d88296cbb39c 48 p02=19;
MaxScorda 38:d88296cbb39c 49 p03=19;
MaxScorda 38:d88296cbb39c 50 term.formatPrintf("Funzione \n",2,p01); //p01
MaxScorda 38:d88296cbb39c 51 term.formatPrintf("Numero \n",32,p02); //p02
MaxScorda 38:d88296cbb39c 52 term.formatPrintf("Parametro \n",51,p03); //p03
MaxScorda 38:d88296cbb39c 53 //21
MaxScorda 37:befd2fe96ee3 54 term.forgcol(7);
MaxScorda 37:befd2fe96ee3 55 term.formatPrintf("Serial Feedback \n",2,21);
MaxScorda 37:befd2fe96ee3 56
MaxScorda 37:befd2fe96ee3 57
MaxScorda 37:befd2fe96ee3 58 // grigino
MaxScorda 38:d88296cbb39c 59 /*
MaxScorda 39:0d7165083e7a 60 term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr("\n",78,char(196))),1,5); //top 3/4
MaxScorda 39:0d7165083e7a 61 term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr("\n",78,char(196))),1,9); //top 7/8
MaxScorda 39:0d7165083e7a 62 term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr("\n",78,char(196))),1,13); //top 11/12
MaxScorda 37:befd2fe96ee3 63
MaxScorda 39:0d7165083e7a 64 term.forgcol(2);
MaxScorda 39:0d7165083e7a 65 term.formatPrintf("Pattern: da 031 a 252 - Traccia 0-2, Note 3-6, Len 1-2 \n",2,16); //help
MaxScorda 39:0d7165083e7a 66 term.formatPrintf("Stato random: r1on-r1off \n",2,17); //help
MaxScorda 39:0d7165083e7a 67 term.formatPrintf("Cambia Note: da n01 a n53 - Nota 0-5, Val 1-3 \n",2,18); //help
MaxScorda 39:0d7165083e7a 68 term.formatPrintf("start, stop, dstop (delay) - rl: reload value\n",2,19); //help
MaxScorda 39:0d7165083e7a 69 term.forgcol(7);
MaxScorda 39:0d7165083e7a 70 */
MaxScorda 39:0d7165083e7a 71 term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr("\n",78,char(196))),1,15,1); //bottom pot
MaxScorda 38:d88296cbb39c 72 term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr("\n",78,char(196))),1,17,1); //bottom pot
MaxScorda 38:d88296cbb39c 73 term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr("\n",78,char(196))),1,20); //azzo funziona...
MaxScorda 37:befd2fe96ee3 74 term.locate(0, 23);
MaxScorda 37:befd2fe96ee3 75 printf("Command: > ");
MaxScorda 37:befd2fe96ee3 76
MaxScorda 37:befd2fe96ee3 77 }
MaxScorda 37:befd2fe96ee3 78
MaxScorda 37:befd2fe96ee3 79
MaxScorda 7:f57abb3f0d3f 80 void callback()
MaxScorda 7:f57abb3f0d3f 81 {
MaxScorda 7:f57abb3f0d3f 82 // Note: you need to actually read from the serial to clear the RX interrupt
MaxScorda 7:f57abb3f0d3f 83 // ardser.printf("%d \n", cont++);
MaxScorda 7:f57abb3f0d3f 84 // myled2 = !myled2;
MaxScorda 7:f57abb3f0d3f 85 }
MaxScorda 7:f57abb3f0d3f 86
MaxScorda 23:b7bd85345617 87 void scsa()
MaxScorda 23:b7bd85345617 88 {
MaxScorda 23:b7bd85345617 89 //Funzione per screensaver
MaxScorda 23:b7bd85345617 90 inverseDisp(dispType);
MaxScorda 23:b7bd85345617 91 }
MaxScorda 7:f57abb3f0d3f 92
MaxScorda 29:bfb815540de7 93
MaxScorda 29:bfb815540de7 94 void parserVT100(char stringa[])
MaxScorda 29:bfb815540de7 95 {
MaxScorda 29:bfb815540de7 96 string func; //funzione l=led
MaxScorda 29:bfb815540de7 97 string funcnum; //funzione ordinata 1,2,3 ecc
MaxScorda 29:bfb815540de7 98 string param; //parametro on, off
MaxScorda 29:bfb815540de7 99 string strIn = string(stringa);
MaxScorda 29:bfb815540de7 100 bool errp=1;
MaxScorda 29:bfb815540de7 101 //pad a 4
MaxScorda 29:bfb815540de7 102 strIn=fnzAdd.padstr(strIn,5,' ');
MaxScorda 29:bfb815540de7 103 strIn=fnzAdd.addEOS(strIn);
MaxScorda 29:bfb815540de7 104 //split
MaxScorda 29:bfb815540de7 105 func=strIn.substr(0,1);
MaxScorda 29:bfb815540de7 106 funcnum=strIn.substr(1,1);
MaxScorda 29:bfb815540de7 107 param=strIn.substr(2,3);
MaxScorda 29:bfb815540de7 108 //write param
MaxScorda 38:d88296cbb39c 109 term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS(func)),11,p01,10,1); //p01
MaxScorda 38:d88296cbb39c 110 term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS(funcnum)),39,p02,10,1); //p02
MaxScorda 38:d88296cbb39c 111 term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS(param)),61,p03,10,1); //p03
MaxScorda 29:bfb815540de7 112 //write input string
MaxScorda 38:d88296cbb39c 113 term.formatPrintf(fnzAdd.string2char(strIn),21,p51,10,1); //p51
MaxScorda 29:bfb815540de7 114 //term.formatPrintf(((char*)func.c_str() ,02,07); funziona anche cosi'
MaxScorda 29:bfb815540de7 115
MaxScorda 39:0d7165083e7a 116 //in arrivo e carica funzioni da Arduino
MaxScorda 38:d88296cbb39c 117 if (func=="f") {
MaxScorda 40:48422add4537 118 errp=funcOut(func, string(stringa));
MaxScorda 36:9ecb98d7c2cd 119 }
MaxScorda 36:9ecb98d7c2cd 120
MaxScorda 36:9ecb98d7c2cd 121 //led for test
MaxScorda 36:9ecb98d7c2cd 122 else if (func=="l") {
MaxScorda 36:9ecb98d7c2cd 123 errp=Lfunc(func, funcnum,param);
MaxScorda 36:9ecb98d7c2cd 124 }
MaxScorda 36:9ecb98d7c2cd 125
MaxScorda 39:0d7165083e7a 126 //in arrivo e carica menu da Arduino
MaxScorda 38:d88296cbb39c 127 else if (func=="m") {
MaxScorda 40:48422add4537 128 errp=menuOut(func,string(stringa));
MaxScorda 29:bfb815540de7 129 }
MaxScorda 36:9ecb98d7c2cd 130
MaxScorda 42:8ca8ff1ab387 131 //Random Activate
MaxScorda 38:d88296cbb39c 132 else if (func=="r") {
MaxScorda 42:8ca8ff1ab387 133 errp=RfuncOut(func, strIn);
MaxScorda 42:8ca8ff1ab387 134 }
MaxScorda 42:8ca8ff1ab387 135
MaxScorda 42:8ca8ff1ab387 136 //Random Activate
MaxScorda 42:8ca8ff1ab387 137 else if (strIn.substr(0,2)=="so"){
MaxScorda 42:8ca8ff1ab387 138 errp=sensorOut(func, strIn);
MaxScorda 36:9ecb98d7c2cd 139 }
MaxScorda 36:9ecb98d7c2cd 140
MaxScorda 41:fb612a3936fb 141 //start
MaxScorda 36:9ecb98d7c2cd 142 else if (strIn.substr(0,5)=="start") {
MaxScorda 36:9ecb98d7c2cd 143 errp=StartfuncOut();
MaxScorda 29:bfb815540de7 144 }
MaxScorda 29:bfb815540de7 145
MaxScorda 41:fb612a3936fb 146 //stop
MaxScorda 36:9ecb98d7c2cd 147 else if (strIn.substr(0,4)=="stop") {
MaxScorda 36:9ecb98d7c2cd 148 errp=StopfuncOut();
MaxScorda 36:9ecb98d7c2cd 149 }
MaxScorda 36:9ecb98d7c2cd 150
MaxScorda 41:fb612a3936fb 151 else if (func=="+") {
MaxScorda 41:fb612a3936fb 152 errp=plusOut(func,string(stringa));
MaxScorda 41:fb612a3936fb 153 }
MaxScorda 41:fb612a3936fb 154
MaxScorda 41:fb612a3936fb 155 else if (func=="-") {
MaxScorda 41:fb612a3936fb 156 errp=minusOut(func,string(stringa));
MaxScorda 41:fb612a3936fb 157 }
MaxScorda 41:fb612a3936fb 158
MaxScorda 29:bfb815540de7 159 // comando fuori parsing
MaxScorda 29:bfb815540de7 160 if (errp==1) {
MaxScorda 32:b7859f48942a 161 term.forgcol(1);
MaxScorda 38:d88296cbb39c 162 term.formatPrintf("Bad Command\n",61,p52,99,1); //p52
MaxScorda 32:b7859f48942a 163 term.forgcol(9);
MaxScorda 39:0d7165083e7a 164 ardser.printf("Bad command\n\r");
MaxScorda 29:bfb815540de7 165 printDisp(dispType,"** Bad command ** \n\r");
MaxScorda 29:bfb815540de7 166 }
MaxScorda 41:fb612a3936fb 167 if (errp==0) term.readypos(); //riposiziono solo solo se a 0
MaxScorda 29:bfb815540de7 168 }
MaxScorda 29:bfb815540de7 169
MaxScorda 29:bfb815540de7 170
MaxScorda 28:f7a59cee5f0d 171 void writeInput(char stringa[])
MaxScorda 28:f7a59cee5f0d 172 {
MaxScorda 36:9ecb98d7c2cd 173 string func; //funzione l=led
MaxScorda 36:9ecb98d7c2cd 174 string funcnum; //funzione ordinata 1,2,3 ecc
MaxScorda 36:9ecb98d7c2cd 175 string param; //parametro on, off
MaxScorda 28:f7a59cee5f0d 176 string strIn = string(stringa);
MaxScorda 36:9ecb98d7c2cd 177 bool errp=1;
MaxScorda 38:d88296cbb39c 178 strIn=fnzAdd.padstr(strIn,5,' '); //non dovrebbe servire
MaxScorda 28:f7a59cee5f0d 179 strIn=fnzAdd.addEOS(strIn);
MaxScorda 36:9ecb98d7c2cd 180 //split
MaxScorda 36:9ecb98d7c2cd 181 func=strIn.substr(0,1);
MaxScorda 36:9ecb98d7c2cd 182 funcnum=strIn.substr(1,1);
MaxScorda 36:9ecb98d7c2cd 183 param=strIn.substr(2,3);
MaxScorda 36:9ecb98d7c2cd 184
MaxScorda 39:0d7165083e7a 185
MaxScorda 38:d88296cbb39c 186 //Descrizione Menu in input
MaxScorda 38:d88296cbb39c 187 if (func=="m") {
MaxScorda 38:d88296cbb39c 188 errp=menuIn(func, stringa);
MaxScorda 36:9ecb98d7c2cd 189 }
MaxScorda 38:d88296cbb39c 190 //Descrizione funzione in input
MaxScorda 38:d88296cbb39c 191 else if (func=="f") {
MaxScorda 38:d88296cbb39c 192 errp=functionIn(func, stringa);
MaxScorda 36:9ecb98d7c2cd 193 }
MaxScorda 41:fb612a3936fb 194 //Parametri in ingresso
MaxScorda 41:fb612a3936fb 195 else if (func=="g") {
MaxScorda 41:fb612a3936fb 196 errp=getParamIn(func, stringa);
MaxScorda 41:fb612a3936fb 197 }
MaxScorda 36:9ecb98d7c2cd 198 //start
MaxScorda 36:9ecb98d7c2cd 199 else if (strIn.substr(0,4)=="start") {
MaxScorda 36:9ecb98d7c2cd 200 errp=StartfuncIn();
MaxScorda 36:9ecb98d7c2cd 201 }
MaxScorda 36:9ecb98d7c2cd 202 //stop
MaxScorda 36:9ecb98d7c2cd 203 else if (strIn.substr(0,3)=="stop") {
MaxScorda 36:9ecb98d7c2cd 204 errp=StopfuncIn();
MaxScorda 36:9ecb98d7c2cd 205 }
MaxScorda 40:48422add4537 206 //Valori funzione in input
MaxScorda 40:48422add4537 207 else if (func=="v") {
MaxScorda 41:fb612a3936fb 208 errp=valueIn(stringa);
MaxScorda 40:48422add4537 209 }
MaxScorda 36:9ecb98d7c2cd 210
MaxScorda 39:0d7165083e7a 211 //writeLogInput( strIn{
MaxScorda 36:9ecb98d7c2cd 212 term.formatPrintf(fnzAdd.string2char(">"+fnzAdd.subEOS(string(stringa))+"<"),18,21,99,1);
MaxScorda 40:48422add4537 213 if (errp==0) term.readypos();
MaxScorda 36:9ecb98d7c2cd 214 }
MaxScorda 36:9ecb98d7c2cd 215
MaxScorda 36:9ecb98d7c2cd 216 void preloadValue()
MaxScorda 36:9ecb98d7c2cd 217 {
MaxScorda 36:9ecb98d7c2cd 218 string func; //funzione l=led
MaxScorda 36:9ecb98d7c2cd 219 string funcnum; //funzione ordinata 1,2,3 ecc
MaxScorda 36:9ecb98d7c2cd 220 string param; //parametro on, off
MaxScorda 36:9ecb98d7c2cd 221 string strIn;
MaxScorda 36:9ecb98d7c2cd 222
MaxScorda 38:d88296cbb39c 223 //azzero vettori
MaxScorda 38:d88296cbb39c 224 for (int i = 0; i < 10; i++) {
MaxScorda 38:d88296cbb39c 225 menu_main[i]="";
MaxScorda 38:d88296cbb39c 226 menu_funcChoice[i]="";
MaxScorda 38:d88296cbb39c 227 }
MaxScorda 40:48422add4537 228 for (int i = 0; i < 50; i++) {
MaxScorda 38:d88296cbb39c 229 menu_function[i]="";
MaxScorda 38:d88296cbb39c 230 }
MaxScorda 39:0d7165083e7a 231 menu_main[0]="Z.Z"; //invero e' sbagliato. controllare cosa usa di stop
MaxScorda 39:0d7165083e7a 232 menu_funcChoice[0]="Z.Z";
MaxScorda 39:0d7165083e7a 233 menu_function[0]="Z.Z";
MaxScorda 38:d88296cbb39c 234
MaxScorda 39:0d7165083e7a 235 status=false; //accensione
MaxScorda 41:fb612a3936fb 236 randomActivate=false;
MaxScorda 39:0d7165083e7a 237 term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("Off")),11,p16,10,1);
MaxScorda 42:8ca8ff1ab387 238 term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("Off")),39,p17,10,1);
MaxScorda 39:0d7165083e7a 239
MaxScorda 29:bfb815540de7 240 term.readypos();
MaxScorda 29:bfb815540de7 241 }
MaxScorda 28:f7a59cee5f0d 242
MaxScorda 7:f57abb3f0d3f 243
MaxScorda 36:9ecb98d7c2cd 244
MaxScorda 7:f57abb3f0d3f 245 void pressed()
MaxScorda 7:f57abb3f0d3f 246 {
MaxScorda 39:0d7165083e7a 247 term.erasesquare(1, 4, 78, 14);
MaxScorda 36:9ecb98d7c2cd 248 ardser.printf("rl\r");
MaxScorda 38:d88296cbb39c 249 term.formatPrintf("rl\n",21,p51,8,1); //p51
MaxScorda 38:d88296cbb39c 250 term.formatPrintf("Ask for reload\n",61,p52,99,1); //p52
MaxScorda 36:9ecb98d7c2cd 251 led.flash(2);
MaxScorda 35:e9e9d518c354 252 }
MaxScorda 7:f57abb3f0d3f 253
MaxScorda 7:f57abb3f0d3f 254
MaxScorda 8:3f1d8c55b3a0 255
MaxScorda 9:9ad85b6bd9cf 256