
C++ (Arduino), přiřazování hodnot ve strukturované proměnné
V proměnné chci vložit znaky do řetězce, ale nemohu přijít na jednoducý způsob. Jediné co mi funguje, je zápis znak po znaku nebo formátovaný tisk. Oba způsoby mi přijdou trochu overkill a neelegantní. Ty co nefungují jsou v komentáři s chybovou hláškou.
Bohužel moje znalost C++ je slabá, dostal jsem se k němu až přes Arduino. Takže je skoro jisté, že jenom neznám ten správný příkaz nebo jsem něco špatně (ne)pochopil.
Byl by prosím někdo od té dobroty a naznačil mi správný směr. Případně vysvětlil, proč u proměnné Barva1 jde vložit řetězec který je kratší než definice a strukturované proměnné Light1.Colour to hlásí chybu?
Děkuji za trpělivost.
struct mix { //definice strukturovaneho zaznamu
int BluePin; //cele cislo
boolean BlueValue; //logicka hodnota
float Lumi; //cislo s desetinnou carkou
char Colour[9]; //retezec
};
mix Light1; //deklarace promenne Light1 s datovym typem mix
char Barva1[7]; //deklerace retezce
void setup() {
Serial.begin(9600);
Light1.BluePin = 4; //int do polozky BluePin v zaznamu Light1
Light1.BlueValue = false; //boolean do polozky BlueValue v zaznamu Light1
Light1.Lumi = 15.8521; //float do polozky Lumi v zaznamu Light1
char Barva1[] = "ASDF"; //znaky do retezce
Light1.Colour[3] = 'A'; //jeden znak na urcenou pozici retezce, to funguje
sprintf(Light1.Colour,"",Barva1); //formatovane kopirovani, to funguje
//tohle uz nefunguje
//Light1.Colour = "QW"; //incompatible types in assignment of 'const char [3]' to 'char [9]'
//Light1.Colour = "QWERTYUI"; //invalid array assignment
//Light1.Colour = Barva1; //incompatible types in assignment of 'char [5]' to 'char [9]'
//Light1.Colour[0] = Barva1; //invalid conversion from 'char*' to 'char' [-fpermissive]
}
void loop() {
Serial.println(Light1.BluePin);
Serial.println(Light1.BlueValue);
Serial.println(Light1.Lumi, 2);
Serial.println(Light1.Colour);
delay (1000);
}
?
Eventuelně
Ale to hádám.
Díky, první příklad funguje, jak se znaky tak s jiným řetězcem. Neznal jsem funkce z knihovny string.h, potíže nesystematického začátečníka. Dokonce knihovnu v Arduino IDE není potřeba ani dávat #include, lze s funkcemi pracovat rovnou.
Druhý příklad se opět chová jinak když ho použiju pro samostaný řetězec - OK. Pokud ho použiju pro řetězec který je součástí strukturované proměnné dá chybu: „ cannot convert '<brace-enclosed initializer list>' to 'char' in assignment “.
Našel jsem tady podobnou věc. Je funkční, ale nerozumím pointerům a tak by se mi to těžko modifikovalo.
Použiji první příklad.