Arduino: 1.6.6 (Windows 7), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\GR\Documents\Test_GR\Test_GR.ino: In function 'void loop()':
Test_GR:74: error: expected ')' before 'if'
if (f4 == 1 && f3 == 0) { (f3 = 1); }
Hallo!
Als Anfänger bin ich fast am verzweifeln. Mein erstes Programm hat nach vielen Mühen zuerst funktioniert und ich konnte es auf die Hardware laden, aber am nächsten Tag kommt immer die Fehlermeldung:
^
----------
Test_GR:84: error: expected statement at end of input
}
^
Test_GR:84: error: expected '}' at end of input
exit status 1
expected ')' before 'if'
ohne dass ich am Programm was geändert habe. Habe sowohl die neue Programmversion als auch WIN 7/32 und WIN10/32 versucht.
Wer kann mir helfen, den Fehler in dem Programm, siehe unten zu lösen?
//Steuerprogramm
int s = 0; //Sekunde
int m = 0; // Minute
int h = 1;
int f1 = 0;
int f2 = 0;
int f3;
int f4;
int f5;
int bd = 1;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT); //Sensorspannung
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
// Blinken
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(500); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(500); // wait for a second
if (s == 60) {
(m++);
(s = 0);
} else {
s++;
} if (m == 60) {
(m = 0);
(h++);
} if (h == 24) {
(h = 0);
}
if (h == 1) {
(f1 = 1);
} else {
(f1 = 0);
}
if (f1 == 1) {
Serial.print ("Stundenfenster aktiv");
Serial.print(" ");
}
if (m < bd) {
(f2 = 1);
digitalWrite(11, HIGH);
Serial.print("m Ein");
Serial.print(" ");
} else {
(f2 = 0);
digitalWrite(11, LOW);
}
// Digitaleingänge abfragen
int DE2 = digitalRead(2); f3 = DE2; int DE3 = digitalRead(3); f4 = DE3; int DE4 = digitalRead(4); f5 = DE4;
Serial.print(f1); Serial.print(f2); Serial.print(f3); Serial.print(f4); Serial.print(f5);
// Störmeldung
if (f4 = 1 //f5=1) {digitalWrite(10,HIGH);Serial.print("Störmeldung");Serial.println(" ");} else {digitalWrite(10, LOW);}
if (f4 == 1 && f3 == 0) { (f3 = 1); }
if (f1 == 1 && f2 == 1 && f3 == 1 && f5 == 0) {
digitalWrite(12, HIGH);
Serial.print(" Ein");
Serial.println(" ");
} else {
digitalWrite(12, LOW);
Serial.println(" Aus");
}
in dieser Zeile:
// Störmeldung
if (f4 = 1 //f5=1) {digitalWrite(10,HIGH);Serial.print("Störmeldung");Serial.println(" ");} else {digitalWrite(10, LOW);}
hast du an der falschen Stelle einen Kommentar eingefügt, oder es sollte "||" heißen.
Außerdem wie schon erwähnt die "}" am Ende der Loop
Nachtrag:
bei if sollte es eher (f4 == 1 || f5 == 1) heißen, sonst wird f4 und f5 jeweils 1 zugewiesen.
Dann ist mir noch aufgefallen, du verwendest die IDE Version 1.6.6.
Die ist sehr Buggi, da können schnell Fehler auftreten, die man nicht so leicht zuordnen kann.
Verwende lieber die Version 1.6.7
Das hat jetzt aber aktuell nichts mit deinen Problemen zu tun.
Danke für die schnellen Rückmeldungen, aber noch habe ich es nicht kapiert warum die obere Abfrage (f4==1//f5==1) funktioniert und die untere(f4 == 1 && f3 == 0) nicht.
Zudem ist es komisch, dass es am Vortag funktioniert hat:
-----------
if (f4==1//f5==1) {digitalWrite(10,HIGH);Serial.print("Störmeldung");Serial.println(" ");} else {digitalWrite(10, LOW);}
if (f4 == 1 && f3 == 0) { (f3 = 1); }// nur wenn f4=1 und f3=0 sind soll f3 auf 1 gesetzt werden, sonst soll der Wert von f3 nicht geändert werden.
if (f1 == 1 && f2 == 1 && f3 == 1 && f5 == 0) {
digitalWrite(12, HIGH);
Serial.print(" Ein");
Serial.println(" ");
} else {
digitalWrite(12, LOW);
Serial.println(" Aus");
--
Hallo!
Nachdem ich die // mit || ersetzt habe und bei einer Abfrage das = durch == ersetzt habe klappt es.
Nur wo finde ich auf der Tastatur das Zeichen | ?
Vielen Dank für Eure schnellen Rückmeldungen!!!
GR-Ill:
Nur wo finde ich auf der Tastatur das Zeichen | ?
Zwischen Shift und Y. Mit AltGr
|| ist ein boolsches Oder
Und beachten dass = eine Zuweisung und == ein Vergleich ist
Den Kommentar hättest du auch an der Farbe sehen können. Wobei man sagen muss dass das hell-grau in der Arduino IDE für Kommentare nicht schön unterscheidbar ist. Ein sattes dunkel-grün ist da schöner.
Und beachten dass = eine Zuweisung und == ein Vergleich ist
Den Kommentar hättest du auch an der Farbe sehen können. Wobei man sagen muss dass das hell-grau in der Arduino IDE für Kommentare nicht schön unterscheidbar ist. Ein sattes dunkel-grün ist da schöner.
Noch was. Diese einsilbigen Variablennamen sind nicht gut um den Sketch nach einem halben jahr noch zu verstehen. S für Sekunde und M für Minute. Warum schreibst du nicht gleich Sekunde oder Minute als Variablenname?