Koda: |
if (Serial.available()>0) {
delay(50); uart1(); } void uart1() { String sprejem=Serial.readString(); Serial.print("Sprejel sem: "); Serial.println(sprejem); if (sprejem.indexOf("imax")>-1){ // če vsebuje niz imax sprejem=sprejem.substring(sprejem.indexOf("imax")+4,sprejem.indexOf("imax")+7); // izloči imax Imax=sprejem.toInt(); //preostanek spremeni v int Serial.println (" Imax: " + String(Imax)); // izpiši novo vrednost }else if (sprejem.indexOf("umax")>-1){ // če vsebuje niz Umax sprejem=sprejem.substring(sprejem.indexOf("umax")+4,sprejem.indexOf("umax")+8); Umax=sprejem.toInt(); Serial.println (" Umax: " + String(Umax)); }else if (sprejem.indexOf("utot")>-1){ // če vsebuje niz Utot sprejem=sprejem.substring(sprejem.indexOf("utot")+4,sprejem.indexOf("utot")+8); Utot=sprejem.toInt(); Serial.println (" Utot: " + String(Utot)); }else if (sprejem.indexOf("ufull")>-1){ // če vsebuje niz Ufull sprejem=sprejem.substring(sprejem.indexOf("ufull")+5,sprejem.indexOf("ufull")+9); Ufull=sprejem.toInt(); Serial.println (" Ufull: " + String(Ufull)); }else if (sprejem.indexOf("itot1")>-1){ // če vsebuje niz Itot1 sprejem=sprejem.substring(sprejem.indexOf("itot1")+5,sprejem.indexOf("itot1")+8); Itot1=sprejem.toInt(); Serial.println (" Itot1: " + String(Itot1)); }else if (sprejem.indexOf("itot2")>-1){ // če vsebuje niz Itot2 sprejem=sprejem.substring(sprejem.indexOf("itot2")+5,sprejem.indexOf("itot2")+8); Itot2=sprejem.toInt(); Serial.println (" Itot2: " + String(Itot2)); }else if (sprejem.indexOf("itot0")>-1){ // če vsebuje niz Itot0 sprejem=sprejem.substring(sprejem.indexOf("itot")+4,sprejem.indexOf("itot")+8); Itot=sprejem.toInt(); Serial.println (" Itot: " + String(Itot)); }else if (sprejem.indexOf("izpis1")>-1){ // če vsebuje niz izpis1 izpis1=!izpis1; // izpis1 je lahko true/false Serial.println (" izpis1=" + String(mer)); }else if (sprejem.indexOf("izpis2")>-1){ // če vsebuje niz izpis2 izpis2=!izpis2; Serial.println (" izpis2=" + String(mer)); }else if (sprejem.indexOf("mer")>-1){ // če vsebuje niz mer mer=!mer; Serial.println (" meritve=" + String(mer)); }else if (sprejem.indexOf("act")>-1){ // če vsebuje niz act active=!active; Serial.println (" active: " + String(active)); }else if (sprejem.indexOf("x")>-1){ // če vsebuje niz x (x13250 > nastavi napetost na DAC1 ..) sprejem=sprejem.substring(sprejem.indexOf("x")+1,sprejem.indexOf("x")+6); Vout1=sprejem.toInt(); Serial.print (" Vout1: " + String(Vout1)); }else if (sprejem.indexOf("y")>-1){ // če vsebuje niz y (y13250 > nastavi napetost na DAC2 ..) sprejem=sprejem.substring(sprejem.indexOf("y")+1,sprejem.indexOf("y")+6); Vout2=sprejem.toInt(); Serial.print (" Vout2: " + String(Vout2)); }else if (sprejem.indexOf("cal")>-1){ // če vsebuje niz cal (kalibracija) Itotref=adc1; Itot1ref=adc2; Itot2ref=adc3; Serial.println("kalibracija......."); }else if (sprejem.indexOf("izp")>-1){ // če vsebuje niz izp izp1(); }else if (sprejem.indexOf("t1")>-1){ // če vsebuje niz t1 sprejem=sprejem.substring(sprejem.indexOf("t1")+2,sprejem.indexOf("t1")+5); T1=sprejem.toInt(); Serial.println (" T1: " + String(T1)); }else if (sprejem.indexOf("t2")>-1){ // če vsebuje niz t2 sprejem=sprejem.substring(sprejem.indexOf("t2")+2,sprejem.indexOf("t2")+5); T2=sprejem.toInt(); Serial.println (" T2: " + String(T2)); }else if (sprejem.indexOf("captrim")>-1){ // če vsebuje niz captrim sprejem=sprejem.substring(sprejem.indexOf("captrim")+7,sprejem.indexOf("captrim")+10); CapTrim=sprejem.toInt(); Serial.println (" CapTrim: " + String(CapTrim)); }else if (sprejem.indexOf("cap")>-1){ // če vsebuje niz cap sprejem=sprejem.substring(sprejem.indexOf("cap")+3,sprejem.indexOf("cap")+7); Capacity=sprejem.toInt(); Serial.println (" Capacity: " + String(Capacity)); }else if (sprejem.indexOf("eeprom")>-1){ // če vsebuje niz eeprom eeprom(); } } |
Koda: |
switch sprejem.substring(1, n) {
case string1: //kar nekaj break; case string2: //kar nekaj break; . . . default: //kar nekaj break; } |
Jaka57 je napisal/a: |
Če bi bili tvoji stringi enake dolžine, bi lahko uporabil switch...case: |
Koda: |
switch sprejem.substring(1, n) {
case 11: // 1 byte //kar nekaj break; case 12: //kar nekaj break; . . . case 21: // 2 byta unsigned int ... case 22: ... case 31: // 2 byta signed int ... case 32: ... case 41: // 4 byti unsigned long ... case 42: ... case 81: // 4 byti signed long ... case 91: // float ... case 101: // ukaz1, naj nekaj naredi ... case 111: // ukaz, naj pošlje nazaj obdelano Veličino 11 ... default: //kar nekaj break; } |
đzuro je napisal/a: |
Vrednost spremenljivke naj bo istega tipa in pa enake dolzine |
Koda: |
void uart1() { String sprejem=Serial.readString(); char spr=sprejem.charAt(0); } switch (spr) { case 98: //"a" Serial.println("A B C test"); break; case 97: //"b" Serial.println("TEST XYZ"); break; default: //kar nekaj break; } if (sprejem.indexOf("imax")>-1){ // če vsebuje niz imax sprejem=sprejem.substring(sprejem.indexOf("imax")+4,sprejem.indexOf("imax")+7); Imax=sprejem.toInt(); |
Koda: |
switch sprejem.substring(1, n) {
case Imax: //kar nekaj break; case Izpis1: //kar nekaj break; . . . case Umax: //kar nekaj break; ... default: //kar nekaj break; } |
Citiram: |
Če pa pošljem npr. "A200" je pa isto, samo da moram imeti dodatno tabelo na papirju, kjer imam legendo ( da A pomeni Imax) |
Koda: |
do{
int len=sprejem.length(); if (len<3) break; byte ind=sprejem.indexOf(';',0); String str1= sprejem.substring(0, ind); sprejem=sprejem.substring(ind+1,len); // sprejem se zmanjša za niz do prvega podpičja spr=str1.charAt(0); // iz str1 pridobi prvi znak str1=str1.substring(1,str1.length()); // str1 je preostanek ( običajno vrednost) switch (spr) { case 97: //a Imax=str1.toInt(); Serial.println (" Imax: " + String(Imax)); break; case 98: //b Umax=str1.toInt(); Serial.println (" Umax: " + String(Umax)); break; case 99: //c Utot=str1.toInt(); Serial.println (" Utot: " + String(Utot)); break; case 100: //d Ufull=str1.toInt(); Serial.println (" Ufull: " + String(Ufull)); break; case 101: //e Itot1=str1.toInt(); Serial.println (" Itot1: " + String(Itot1)); break; case 102: //f Itot2=str1.toInt(); Serial.println (" Itot2: " + String(Itot2)); break; case 103: //g Itot=str1.toInt(); Serial.println (" Itot: " + String(Itot)); break; case 104: //h //izpis 1 izp1(); break; case 105: //i //izpis 2 izp2(); break; case 106: //j mer=!mer; Serial.println("Meritve" + String(mer)); break; case 107: //k .... .... .... |
Koda: |
void loop(){ if (Serial.available()>0) { // če je na voljo niz, potem pojdi na void uart1 delay(50); uart1(); } . . . } void uart1() { char spr; String sprejem=Serial.readString(); // sprejem ima poljubno dolžino oblike a250;b6900,c145..... Serial.print("Sprejel sem: "); Serial.println(sprejem); ///// parsing ///// int ii=0; // to bi se verjetno dalo tudi izpustiti??? do{ int len=sprejem.length(); if (len<3) break; //Serial.println("dolzina=" + String(len)); byte ind=sprejem.indexOf(';',0); String str1= sprejem.substring(0, ind); sprejem=sprejem.substring(ind+1,len); // sprejem se zmanjša za niz do prvega podpičja spr=str1.charAt(0); // iz str1 pridobi prvi znak str1=str1.substring(1,str1.length()); // str1 je preostanek ( običajno vrednost) switch (spr) { case 97: //a Imax=str1.toInt(); Serial.println (" Imax: " + String(Imax)); break; case 98: //b Umax=str1.toInt(); Serial.println (" Umax: " + String(Umax)); break; case 99: //c Utot=str1.toInt(); Serial.println (" Utot: " + String(Utot)); break; case 100: //d Ufull=str1.toInt(); Serial.println (" Ufull: " + String(Ufull)); break; case 101: //e ... ... ... case 41: //A T2ref2=str1.toInt(); Serial.println ("T2ref2: " + String(T2ref2)); break; default: //kar nekaj break; } } while (ii=1); // II nima nikoli vrednost 1 - vedno se zaključi v z break } |
Koda: |
case 97: // a |
Koda: |
case 'a': // Imax |
Koda: |
const char Imax = 'a';
const char Izpis1 = 'b'; case Imax: break; |
tilz0R je napisal/a: |
Super predlogi, vendar predlagam, da se prepričate kaj predlagate. Spremenljivka ne more biti del case stavka v C++, ker ni konstantna vrednost. Razen, če bo const ali constexpr. |