Go Down

Topic: Serial Communication ffunktioneirt nicht so wie ich will (Read 759 times) previous topic - next topic

Nov 23, 2012, 07:57 pm Last Edit: Nov 23, 2012, 08:01 pm by MagicSmoke Reason: 1
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

mkl0815

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.

uwefed

MagicSmoke Bitte Tief durchatmen und Ruhe.

Ich habe nicht verstanden was Du genau tun willst noch wie weit Du bist.
Viele Grüße Uwe


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

uwefed

Die seriellen Daten erhälst Du mit:   
Code: [Select]

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
Code: [Select]
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);
}

Go Up