Hi,
Ich bastel mir grad ne Steuerung für mein Eigenbau E-Bike.
die Steuerung besteht aus 2 Arduinos:
1: Steuert das gesammte Bike, überwacht den Akku, die Temperaturen usw.
2: Zeigt mir am Lenker die Aktuellen werte an
beide sind über eine Serielle Verbindung miteinander verbunden.
der "Display" arduino soll 2 Modis haben:
einmal ein Dashboard mit Graphen und einer übersichtlichen anzeige der werte und einmal einen Seriellen Monitor, wo er einfach das empfangene auf dem Display ausgibt.
jetzt habe ich aber ein Problem mit meinem Programm:
die Funkion getSerialData wird im Loop aufgerufen und wenn er ein zeichen empfängt soll er verschiedene variablen aktualisieren oder den Seriellen Monitor starten.
Sobald die Funktion gestartet wird, startet er sofort den Seriellen Monitor, wovon aus ich dann z.b. EU12 (SerMon beenden, und "Volt" aktualisieren) eingebe und er die variable aktualisiert, dann aber sofort wieder in den Seriellen Monitor zurückspringt.
Wo liegt der Fehler?
Er soll den Seriellen Monitor eigentlich nur starten, wenn ich ein "S" sende.
Ich bastel mir grad ne Steuerung für mein Eigenbau E-Bike.
die Steuerung besteht aus 2 Arduinos:
1: Steuert das gesammte Bike, überwacht den Akku, die Temperaturen usw.
2: Zeigt mir am Lenker die Aktuellen werte an
beide sind über eine Serielle Verbindung miteinander verbunden.
der "Display" arduino soll 2 Modis haben:
einmal ein Dashboard mit Graphen und einer übersichtlichen anzeige der werte und einmal einen Seriellen Monitor, wo er einfach das empfangene auf dem Display ausgibt.
jetzt habe ich aber ein Problem mit meinem Programm:
die Funkion getSerialData wird im Loop aufgerufen und wenn er ein zeichen empfängt soll er verschiedene variablen aktualisieren oder den Seriellen Monitor starten.
Sobald die Funktion gestartet wird, startet er sofort den Seriellen Monitor, wovon aus ich dann z.b. EU12 (SerMon beenden, und "Volt" aktualisieren) eingebe und er die variable aktualisiert, dann aber sofort wieder in den Seriellen Monitor zurückspringt.
Wo liegt der Fehler?
Er soll den Seriellen Monitor eigentlich nur starten, wenn ich ein "S" sende.
Code:
void loop(){
getSerialData();
if(i!=0){
RefreshScreen();
i=0;
}
}
void dashboard(){
DrawLayout();
loop();
}
void getSerialData(){
if (Serial.available()){
c = Serial.read();
switch(c){
case 'S':
SerMon();
break;
case 'U':
volt = "";
if (Serial.available()){
c = Serial.read();
volt += (String)c;
}
break;
case 'I':
cur = "";
if (Serial.available()){
c = Serial.read();
cur += (String)c;
}
break;
break;
}
}
}
void SerMon(){
GLCD.ClearScreen();
while(1){
if (Serial.available()){
c = Serial.read();
if(c == 'C'){
GLCD.ClearScreen();
}
else if(c == 'E'){
i = 1;
dashboard();
}
else{
GLCD.print(c);
}
}
}
}
Zuletzt bearbeitet: