Já dost věcí čerpám z těchto stránek, i když moc neumím anglicky.
lekce String/char
https://www.tweaking4all.com/hardware/a ... ng-part-7/
Ještě doplním ...
Problém je v tom, že operace String přidělují paměť dynamicky a způsobem, který je těžké předvídat, když jsou vstupy do programu proměnné, v kombinaci se skutečností, že Arduinos mají velmi omezené množství paměti RAM (2 kB na Arduino Uno). Dynamické přidělování paměti obvykle způsobuje fragmentaci paměti. To znamená, že váš program může pracovat správně pro některé vstupy nebo na krátkou dobu, ale dojde k selhání s jinými vstupy nebo po delší době v důsledku vyčerpání paměti.
Pokud tedy ukládáš do String různě dlouhé "data", ATMega si musí tyto nové pole uložit v paměti na jiné místo a paměť se mu začíná "fragmentovat".
Já o tom někde četl (a opustil jsem pro daný projekt klasické ATMega CPU)
https://critical.eschertech.com/2010/07 ... d-systems/
Já začal používat pole, ale stejně jsem dojel na množství paměti + nebezpečí "přetečení", které za tebe CPU ani kompilátor asi nehlídá.
Máš char[100] - pole 100 znaků a na pozici char[95] uložíš text "Nove data z mereni" - je jasné, že už "data z mereni" přetečou v paměti někam neznámo kam. Osobně to nemohu prokázat, nevím jestli mi ATMega dojela na nedostatek paměti nebo tím přetečením - vždy se kousla.