Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Arduino - char

Zdravím.
By byl dotaz.

char inString[32];
inString : "kokot";
if(inString == "kokot")digitalWrite(13, HIGH);

Nefunguje to, protože char inString ma 32 znaku.
Tudíž pokud jsem to pochopil, mam za kokotem ještě 27 prázdných znaku.
Jak to ořezat?
Děkují

Předmět Autor Datum
Prečo nepoužiješ String? String my_str = "This is my string."; my_str = "My new string."; if (my_…
pme 09.11.2016 20:03
pme
char inString[32]; int inCount; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); //digitalWri…
p11 09.11.2016 20:06
p11
Ten Serial.print(matrix[x],DEC); tam nepat59 :-D
p11 09.11.2016 20:09
p11
Takto to je char inString[32]; int inCount; void setup() { Serial.begin(9600); pinMode(13, OUTPUT);…
p11 09.11.2016 20:11
p11
Vidím o čo sa snažíš...ale robíš to zle... Takto: SerialEvent
pme 09.11.2016 21:09
pme
inString je predsa pointer na pole, ked tam das znamienko == tak porovnavas adresu pola a ne jeho ob… poslední
MM.. 10.11.2016 07:40
MM..
char inString[32];
int inCount;

void setup() {
       Serial.begin(9600);
       pinMode(13, OUTPUT);
       //digitalWrite(13, HIGH);
}
void loop()
 {
   inCount = 0;
 
 while (Serial.available() > 0)
 { 
   inString[inCount] = Serial.read();
   delay(10);  
   if (inString[inCount] == '\0') break;
   inCount++;
 }
 
 inString[inCount] = '\0'; 
  
 if (inCount > 0) { 
    Serial.println(inString); 
    Serial.print(matrix[x],DEC);
    inString : "kokot";
    
    if(inString == "kokot")digitalWrite(13, HIGH); 
}
}

Takto to je

char inString[32];
int inCount;

void setup() {
       Serial.begin(9600);
       pinMode(13, OUTPUT);
       //digitalWrite(13, HIGH);
}
void loop()
 {
   inCount = 0;
 
 while (Serial.available() > 0)
 { 
   inString[inCount] = Serial.read();
   delay(10);  
   if (inString[inCount] == '\0') break;
   inCount++;
 }
 
 inString[inCount] = '\0'; 
  
 if (inCount > 0) { 
    Serial.println(inString); 
    if(inString == "kokot")digitalWrite(13, HIGH); 
}
}

inString je predsa pointer na pole, ked tam das znamienko == tak porovnavas adresu pola a ne jeho obsah. Obsah pola sa porovnava funkciami trebars strcmp apod.
Stringy v char poli su ukoncene znakom \0, nie su tam ziadne "prazdne znaky" (neexistuje ziaden "prazdny znak", su tam za tym normalne nejake dalsie bajty ktore nikoho nezaujimaju). Velkost pola sa v C nikde nekontroluje ani nepredava/nepouziva. Je to len tvoj boj aby bolo dostatocne velke, preto je dany pristup nebezpecny, co ale laici nikdy nechapu. Nemas osetrene pretecenie pola cim utocnik moze poprepisovat dalsie premenne. Zo stejneho dovodu musia laici v MS furt posielat ludom nejake updaty do Winsracky.

Cele to mas dost blbo organizovane v tom loop (neni normalne pouzivat delay(10) len preto ze to clovek nevie naprogramovat normalne. Ked sa zmeni baudrate na polovicu, tak zrazu bude 10 malo? Navyse to zbytocne spomaluje a pri vyssom baudrate moze nastat overrun na com porte a budes stracat znaky. Delay je u serial komunikacie tabu!)

Zpět do poradny Odpovědět na původní otázku Nahoru