Re: PC - ARDUINO ovládání vstupů a výstupů
Napsal: 18 úno 2020, 10:45
Jasně, neuvedl jsem to... Předpokládejme, že budou chodit hodnoty K1 - K9 (celý řetězec K1|P1|12|35|1|53|2|1), ten už umím rozkouskovat a odstranit "|", použil jsem dataKulozeni[0][1], vytisknu na sériovém monitoru, vše OK.
Vypadá to v pořádku, jenže se mi nedaří ten znak uložený do dataKulozeni[0][1] převést na číslo (viz. součet, sčítám dvě první jedničky). Přikládám kód, je zatím neučesaný, jak zkouším různé věci pro zpracování... Prostě bych potřeboval, abych ty přijaté znaky, které se mi po průchodu sériovou linkou změnily na znaky, vrátili zase zpátky na čísla. A ještě jeden dotaz. Proč nemůžu použít proměnnou např. dataKulozeni[0] ve switch (mám to zakomentované)? Já bych to vlastně ani nepotřeboval (to K1 nebo P1) převádět na číslo, je to v podstatě jen ukazatel, nebudu s ním provádět matematické operace (ale naučit se to chci), ale nedaří se mi ani ho využít v tom switch. Při pokusu o kompilaci IDE píše:
"switch quantity not an integer".
To můžu vstupní proměnnou použít jen celočíselnou u switch? Když ji změním na celočíselnou, tak zase řve case:
"conversion from pointer type 'const char (*)[3]' to arithmetic type 'int' in a constant expression".
Kód: Vybrat vše
10:30:21.442 -> Přijatý řetězec: K1|P1|12|35|1|53|2|1
10:30:21.489 -> Kanal: K
10:30:21.489 -> číslo: 1
10:30:21.542 -> Program: P
10:30:21.542 -> číslo: 1
10:30:21.542 -> Hodina: 12
10:30:21.542 -> Minuta: 35
10:30:21.542 -> FadeDIM: 1
10:30:21.542 -> DIM: 53
10:30:21.589 -> Režim kanálu: 2
10:30:21.589 -> Typ kanálu: 1
10:30:21.642 -> Součet: 0
10:30:21.642 -> --------------------------
"switch quantity not an integer".
To můžu vstupní proměnnou použít jen celočíselnou u switch? Když ji změním na celočíselnou, tak zase řve case:
"conversion from pointer type 'const char (*)[3]' to arithmetic type 'int' in a constant expression".
Kód: Vybrat vše
// testovací řetězec
//P1|K1|12|35|1|53|2|1
char prijatyRetezec[23]; //P1|K1|hh|mm|FD|DI|RE|TY
int citac;
char* item;
String dataKulozeni[8];
void setup() {
Serial.begin(9600);
}
void loop() {
citac = 0;
while (Serial.available() > 0)
{
prijatyRetezec[citac] = Serial.read();
delay(10);
if (prijatyRetezec[citac] == '\0') break;
citac++;
}
prijatyRetezec[citac] = '\0';
// ------------------------
if (citac > 0) {
Serial.print("Přijatý řetězec: ");
Serial.println(prijatyRetezec);
int x = 0;
item = strtok(prijatyRetezec,"|");
while(item != NULL)
{
dataKulozeni[x] = item;
item = strtok(NULL, "|");
x++;
}
//int test0 = dataKulozeni[0].toInt();
int test1 = dataKulozeni[0][1];
test1 = atoi(test1);
int test2 = dataKulozeni[1][1];
test2 = atoi(test2);
// int test = test0 + test1 + test2;
Serial.print("Kanal: ");
Serial.println(dataKulozeni[0][0]);
Serial.print("číslo: ");
Serial.println(dataKulozeni[0][1]);
Serial.print("Program: ");
Serial.println(dataKulozeni[1][0]);
Serial.print("číslo: ");
Serial.println(dataKulozeni[1][1]);
Serial.print("Hodina: ");
Serial.println(dataKulozeni[2]);
Serial.print("Minuta: ");
Serial.println(dataKulozeni[3]);
Serial.print("FadeDIM: ");
Serial.println(dataKulozeni[4]);
Serial.print("DIM: ");
Serial.println(dataKulozeni[5]);
Serial.print("Režim kanálu: ");
Serial.println(dataKulozeni[6]);
Serial.print("Typ kanálu: ");
Serial.println(dataKulozeni[7]);
Serial.print("Součet: ");
Serial.println(test1 + test2);
Serial.println("--------------------------");
if (dataKulozeni[0] == "K1") (Serial.println("test0 má K1"));
/* switch (dataKulozeni[0]) {
case "K1":
Serial.println("Kanál K1");
switch (dataKulozeni[1] == "P1") {
case(1):
Serial.println("Program P1");
break;
}
break;
}*/
}
}