Go Down

Topic: probleme mit der seriellen schnittstelle des mega (Read 531 times) previous topic - next topic

neptunier

hallo,
ich habe daten von einem neurofeedback programm über die serielle schnittstelle erhalten und verarbeitet. das funktionierte einwandfrei mit einem Duemilanove. jetzt hab ich einen mega 2560 bekommen und jetzt hab ich probleme. das erste problem hab ich gelöst, der automatische reset sobald daten über die serielle kommen. habe die brücke auf dem board bei reset en durchbrochen und einen schalter dazwischengelötet. jetzt läuft alles, aber nach 10-15 sekunden stoppt die neurofeedback software. weiss jemand rat?
kann es sein das der speicher des mega irgendwie vollgeschrieben wird?
hier teile des codes, die abfrage der seriellen schnittstelle:


char ser;
void setup() {
   
    Serial.begin(9600);
}

void loop() {
   if (Serial.available() > 0){
          // Serial.println("seriellen daten verfügbar");
         
         ser = Serial.read();
         if (ser == 'A'){ digitalWrite(2, HIGH);}
          if (ser == 'a'){ digitalWrite(2, LOW);}
          if (ser == 'B'){ digitalWrite(3, HIGH);}
          if (ser == 'b'){ digitalWrite(3, LOW);}
         if (ser == 'C'){ digitalWrite(4, HIGH);}
          if (ser == 'c'){ digitalWrite(4, LOW);}
          if (ser == 'D'){ digitalWrite(8, HIGH);}
          if (ser == 'd'){ digitalWrite(8, LOW);}
          if (ser == 'E'){ digitalWrite(9, HIGH);}
          if (ser == 'e'){ digitalWrite(9, LOW);}
          if (ser == 'F'){ digitalWrite(10, HIGH);}
          if (ser == 'f'){ digitalWrite(10, LOW);}
          if (ser == 'G'){ digitalWrite(34, HIGH);}
          if (ser == 'g'){ digitalWrite(34, LOW);}
          if (ser == 'H'){ digitalWrite(35, HIGH);}
          if (ser == 'h'){ digitalWrite(35, LOW);}
          if (ser == 'I'){ digitalWrite(36, HIGH);}
          if (ser == 'i'){ digitalWrite(36, LOW);}
          if (ser == 'J'){ digitalWrite(37, HIGH);}
          if (ser == 'j'){ digitalWrite(37, LOW);}
          if (ser == 'K'){ digitalWrite(38, HIGH);}
          if (ser == 'k'){ digitalWrite(38, LOW);}
           if (ser == 'L'){ digitalWrite(39, HIGH);}
          if (ser == 'l'){ digitalWrite(39, LOW);}
         
       }
   
  }

danke für eure hilfe,
michael

nachtaktiv68

Sehr viele if-Anweisungen, die bei jedem Schleifendurchlauf allesamt abgearbeitet werden. Ich würde eine switch-case-Konstruktion mit break benutzen, das ist effizienter. Außerdem würde ich mal versuchen, ein delay(100) einzufügen, wobei die 100 (Zehntelsekunde) jetzt nur ein Beispiel ist.

http://arduino.cc/en/Reference/SwitchCase

Wie verhält Dein Sketch sich dann?
twitter: @darktom

neptunier

hallo nachtaktiv,
danke für die anregung mit switch case, werd ich in zukunft mal probieren. aber der code lief ja so wie er ist auf dem 2009, aber nicht auf dem mega. ich dachte es hängt vielleicht damit zusammen weil er ja eine serielle schnittstelle mit einem anderen prozessor hat.
michael

Go Up