Pages: [1]   Go Down
Author Topic: probleme mit der seriellen schnittstelle des mega  (Read 500 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany
Offline Offline
Jr. Member
**
Karma: 0
Posts: 64
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

twitter: @darktom

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: