Hey Leute ich habe mir einen LED würfel gebaut und wollte wissen, ob man vllt einen Text den man per Serial Monitor
(Text : " ABCDE")
in ein Array bringt
(bla[]={1,2,3,4,5};
und eine Variable mit der Länge desTextes erstellt?
byte r = 5;
Wenn ihr Fragen habt, dann fragt ruhig. Wäre cool wenn ihr mir helfen könntet.
Der Code in C wäre nett.
Ach und es wäre schön wenn es entweder total einfach zu begreifen ist oder es so geschrieben, dass ich das in meinem Porjekt adaptieren kann.
LG Magic Smoke
Wie wäre es mit dem Code den Du schon hast? Du schreibst ja, das Dein Code nicht macht was er soll. Also hast Du ja schon Code. Es ist immer besser, den nicht funktionierenden Code zu bereinigen und zu verbessern, als einfach nur Code zu liefern, ohne zu wissen ob er in Dein Projekt passt.
Hey, Danke für die schnelle Rückmeldung.
Also ich habe einen 7x7x7 led würfel den ich schon gelötet habe, die platine zum ansteuern ist auch schon fertig und angeschlossen und die ersten animationen laufen auch schon. Als letztes wollte ich die funktion einbauen, dass man den text den ich im serial monitore zum arduino uno schicke auf dem led würfel erscheint. Dazu muss ich den text in zahlen wandeln(leerzeichen =0 A=1 B=2 und so weiter) und in ein array schreiben. (die werte des ascii codes fummel ich mir selbst raus, falls ihr darauf kein bock habt) . Und es ist wichtig, dass ich eine Varable mit der anzahl der Buchstaben habe.
BSP
Ich sende im serial monitor "AB CDE"
Dann brauche ich
Bla[]={1,2,0,3,4,5}
Int wert = 6;
Meine bisherigen versuche sind aufgrund des KATASTROPHALEN scheiterns in der ablage P gelandet. Ich habe auch mal in nem anderen Forum was von dem Befehl serial.readbyteuntil aber da gibt mir mein compiler fehler aus. Den gibts wohl nicht(oder ich bin zu doof es zu benutzen)
Lg
char Data[8]; // Array für Text; Länge auf längsten übertragenen Text angleichen
int laenge=0; // Länge Text
int maxlaenge=8; // max Länge des Textes
unsigned long Tempo; // variable für Wartezeit zum Textempfang
void setup()
{
Serial.begin(9600);
}
void loop(){
do { // Zeichen von serieller Schnittstelle empfangen
if (Serial.available()) {
Data[laenge] = Serial.read();
if (Data[laenge] >64 && Data[laenge]<91) Data[laenge]-64; // Großbuchstaben umformen
if (Data[laenge] == 32) Data[laenge]=0; // Leerzeichen umformen
// eventuell weitere Umrechnung für Zahlen, Kleinbuchstaben ecc einfügen
laenge++;
}
if(laenge<1)Tempo = millis();
} while (laenge<maxlaenge && (millis()-Tempo) < 500);
}
So erhälst Du die seriellen Daten im array Data mit den Zahlen die Du willst und die Länge des Textes in laenge.
Um die richtigen Zahlen für die Zeichen außer Leerzeichen und Großbuchstaben mußt Du dich kümmern
Grüße Uwe
Hey Leute es tut mir unendlich leid, aber ich hatte ne Klausurphase . (meine letzte Geschi und deutschklausur in meinem LEben hab ich hinter mir) . Ich werde mich heute abend noch mal n den Würfel setzten und die Codes ausprrobieren. Vielen vielen dank. Ich werde euch über den verlauf informieren. Danke ncohmal
Falls es irgendjemanden interessiert der Code funktioniert bis zu 1000 Zeichen perfekt und sicher.
Allerdings kann man einen neuen Text erst durch den neustart des Arduinos speichern. Wenn einem dazu die Lösung einfällt wäre das schön, zur not komm ich auch so klar. Also jetzt hier der Code
char Data[1000]; // Array für Text; Länge auf längsten übertragenen Text angleichen
int laenge=0; // Länge Text
int maxlaenge=1000; // max Länge des Textes
unsigned long Tempo; // variable für Wartezeit zum Textempfang
int neu=0;
void setup()
{
Serial.begin(9600);
}
void loop(){
Serial.flush();
do { // Zeichen von serieller Schnittstelle empfangen
if (Serial.available()) {
Data[laenge] = Serial.read();
if (Data[laenge] >64 && Data[laenge]<91) {
Data[laenge] = Data[laenge]-64;
}
if (Data[laenge] >96 && Data[laenge]<123) {
Data[laenge] = Data[laenge]-96;
}
if (Data[laenge] == 32) Data[laenge]=0;
laenge++;
neu=1;
}
if(laenge<1)Tempo = millis();
}
while (laenge<maxlaenge && (millis()-Tempo) < 1500);
if(neu==1){
for(int i=0;i<maxlaenge;i++){
if (Data[i]>0)
{
Serial.print(Data[i],DEC);
}
}
Serial.println(" ");
Serial.println(laenge,DEC);
neu=0;
}
delay(20);
}