PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny 85 String Error



Lord Integer
24.04.2020, 09:25
Hey,
ich kann die class String nicht im Attiny Sketch benutzen.
Wie kann ich den gezeigten Code ohne String am Besten umsetzen?


int counter= 33;
String messageCount1 = "Anzahl:";
String messageCount2= "Einheiten";
String message1 = messageCount1 + counter+ messageCount2;
lcd.setCursor ( 0, 2 );
lcd.print(message1);

float value = 25.48;
String messageValue1 = "Temperatur:";
String messageValue2 = "°C";
String message2 = messageValue1 + value+ messageValue2;
lcd.setCursor ( 0, 3 );
lcd.print(message2);

HaWe
24.04.2020, 09:43
hallo,
du "addierst" z.B. Integer-Werte an Strings, das wird nicht gehen. Wandle mal die Zahlen in Strings um und guck was passiert:
z.B.
nicht
String message1 = messageCount1 + counter+ messageCount2;
sondern
String message1 = messageCount1 + (String)counter+ messageCount2;

kann sein, dass noch andere Bugs drin sind (die ich jetzt spontan nicht sehe), aber das wäre mal der 1. Schritt.
Falls es dann immer noch nicht geht:
poste bitte einen MINIMALEN, aber KOMPLETTEN Code samt aller Fehlermeldungen der IDE.

Lord Integer
24.04.2020, 21:13
Danke für den Tipp mit dem Casting.
Das klappt aber nur bei int.
Mit float komme ich leider nicht weiter.
Habe schon viele ausprobiert.
Immer kommt der Fehler
conversion from 'float' to 'const String' is ambiguous

Folgende Zeilen haben den Erfolg gebracht.


String messageValue1 = "Temperatur:";
String messageValue2 = "°C";
char charBuf[10];
dtostrf(value,7, 2, charBuf);
String message2 = messageValue1 + charBuf + messageValue2;
lcd.setCursor ( 0, 3 );
lcd.print(message2);


Nur ist aber der Programmspeicherplatz von 6012 Bytes überschritten.
Ich habe gelesen , dass String viel Speicher frisst und man char nehmen soll.
Jedoch weiss ich nicht genau wie ich das umsetzen soll.

Gruß

HaWe
24.04.2020, 22:29
cstrings (char* oder char[ ] ) lassen sich mit strcat() aneinanderhängen, ist aber schon ein wenig komplizierter.
http://www.cplusplus.com/reference/cstring/strcat/
da musst du jetzt durch - entweder ANSI C lernen oder einen größeren Prozessor kaufen und dabei String benutzen.
(Ich selber würde mit den mickrigen AVRs ja gar nicht erst anfangen, wozu gibt es M0/Zero, M4 oder ESPs...)

Eine Option fällt mir noch ein:
einfach alle char* Teilstrings nacheinander einzeln mit lcd.print() ausgeben

Sisor
25.04.2020, 19:07
Am einfachsten so:


int counter= 33;
lcd.setCursor ( 0, 2 );
lcd.print("Anzahl: ");
lcd.print(counter);
lcd.print(" Einheiten");

float value = 25.48;
lcd.setCursor ( 0, 3 );
lcd.print("Temperatur: ");
lcd.print(value);
lcd.print("°C");