Arduino Fehlercode: expected ')' before ';'?

4 Antworten

Ein define endet normalerweise nicht in einem ; - schaue da nochmal in die Docs, ob das etwas Arduino-spezifisches ist.

D.h. in Deinem restlichen Source wird BUTTON_PIN durch 5; ersetzt.

Hier noch zur Demonstration, damit Du es nachvollziehen kannst:

# 0 "test.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "test.c"
const int RELAIS = 13;


void setup() {
pinMode(RELAIS, OUTPUT);
pinMode(5;, INPUT);
}

void loop() {

  if (digitalRead(5;) == HIGH){
    digitalWrite(RELAIS, LOW);
  }

  if (digitalRead(5;) == LOW){
    digitalWrite(RELAIS, HIGH);
    delay(500);
  }
delay(1000);
}

Das ist die Ausgabe des Präprozessors, wie der Compiler es dann als Source erhält. Daher die etwas verwirrende Fehlermeldung.

Der #define Command ist in diesem Zusamenhang unpassend, und so wie du ihn definiert hast ist der Compiler verwirrt.

#define Command = Setzt den wert der angegeben Wurde, also "BUTTON_PIN" durch "5;" aus, vor dem compilern. Das Problem scheint and dem ";" zu liegen, dies ist bei # Befehlen nie benötigt da # Befehle, Befhele des Comilers sind. Als Lösing verwende einfach:

const int RELAIS = 13; //Relais Pin
const in BUTTON_PIN 5; //Pin für Knopf

void setup() {
pinMode(RELAIS, OUTPUT); //Relais Pins --> Ausgang
pinMode(BUTTON_PIN, INPUT); //Pin für Knopf --> Eingang
}

void loop() {

  if (digitalRead(BUTTON_PIN) == HIGH){
    digitalWrite(RELAIS, LOW);
  }

  if (digitalRead(BUTTON_PIN) == LOW){
    digitalWrite(RELAIS, HIGH);
    delay(500);
  }
delay(1000);
}
Woher ich das weiß:eigene Erfahrung – Ich bin schon länger auf diesen Gebieten unterwegs.

Das mit dem #define ist ja nun geklärt, aber der Code ist wenig elegant, weil delay() keine gute Wahl ist. Wenn du den Knopf drückst, wären eines delay() bleibt der Druck unbeachtet.

Außerdem hast du das Prellen der Button nicht beachtet.

Ich schreibe in c++ für Mikrocontroller lieber

const int pin = 5;

Das int übersetzt mein Compiler int16_t.

Woher ich das weiß:eigene Erfahrung
KarlRanseierIII  11.02.2023, 21:22

Danke, daß Du gleich noch jenseits der Syntax andere Problembereiche aufgezeigt hast.

Wie würde man das Prellen am Arduino verhindern? Zustandsvariable, bei Erkennung vom Tastendruck flippen und erst beim nächsten Wechsel zurückflippen und diese in die boolschne Ausdrücke aufnehmen? Oder geht es eleganter?

0
KarlRanseierIII  11.02.2023, 21:28
@KaePie

Ah, das ist natürlich chich, wenn es zur Verfügugn steht. Ich hätte sonst ggf. noch nen asynchronen Timer als "Totmannschalter' in Erwägugn gezogen - Ist gelegentlich ja auch praktisch/erwünscht.

0
KaePie  11.02.2023, 21:35
@KarlRanseierIII

Etwas oversized. Wenn du einen Attiny15 oder 45 programmieren willst, kämpfst du um jedes Byte.

0

Der Fehler liegt bei der Zeile:

#define BUTTON_PIN 5;

Hier sollte es eigentlich ohne Semikolon aussehen:

#define BUTTON_PIN 5

Wenn Sie ein Semikolon hinzufügen, wird der Compiler es als eine Anweisung interpretieren und nicht als Definition einer Konstante. So kann es zu einem Fehler wie dem oben genannten kommen.

Ändern Sie also die Zeile wie folgt:

#define BUTTON_PIN 5

Nach dieser Änderung sollte Ihr Code kompilieren und fehlerfrei ausgeführt werden.