Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fehlermeldung bei Ampelsteuerung (Microcontroller)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.04.2014, 19:33 Uhr
~maggiforever
Gast


Guten Tag,
wir haben in der Schule (10te) gerade mit Microcontrolling mithilfe von C++ begonnen. Das Thema stellt für mich auch kein Problem dar und es gibt eigentlich keine Probleme. Allerdings sollten wir heute (erst 2. Stunde) eine Ampel programmieren mit Schalter und allem drum und dran, was auch kein Problem war. Nun wollte ich daheim das Programm noch etwas "schöner" machen, allerdings bekomme ich beim Compilen diese drei Fehlermeldungen:


Code:
ampelMitSchalter.ino:10:6: error: variable or field 'rotAn' declared void
ampelMitSchalter.ino:10:37: error: expected '}' before ';' token
ampelMitSchalter.ino:10:39: error: expected declaration before '}' token



Wir arbeiten mit dem Programm energia und den Launchpads "w/msp430g2553".

Hier der Code:

C++:
int gruen = 2;        //Port 2
int gelb = 3;         //Port 3
int rot = 4;          //Port 4
int schalterPin = 5;  //Port 5
int schalter = 0;     //Zustand des Schalters
int z1 = 2000;        //Zeit 1: 2 Sekunden (Gelbphase)
int z2 = 5000;        //Zeit 2: 5 Sekunden (Grünphase)

//Funktionen
void rotAn { digitalWrite(rot, HIGH); }
void rotAus { digitalWrite(rot, LOW); }
void gelbAn { digitalWrite(gelb, HIGH); }
void gelbAus { digitalWrite(gelb, LOW); }
void gruenAn { digitalWrite(gruen, HIGH); }
void gruenAus { digitalWrite(gruen, LOW); }

void setup()
{
  pinMode(gruen, OUTPUT);
  pinMode(gelb, OUTPUT);
  pinMode(rot, OUTPUT);
  pinMode(schalterPin, INPUT);
}

void loop()
{
  schalter = digitalRead(schalterPin);
  if(schalter == HIGH)
  {
    gelbAn; //Rot ist schon an
    delay(z1);
    gelbAus;
    rotAus;
    gruenAn;
    delay(z2);
    gelbAn;
    delay(z1);
    gruenAus;
    gelbAus;
    rotAn;
  }
  else
  {
    rotAn;
    gelbAus;
    gruenAus;
  }
}



Die Fehlermeldung sagt mir ja, dass da wohl etwas fehlt bei der void-Deklarierung von RotAn, tut es aber ja eigentlich nicht. Wenn man rotAn dann ausklammert, wird die Fehlermeldung für rotAus angezeigt, also für das darunter. Ich kann mir leider nicht erklären, wie dieser Fehler zustande kommt, da ja eigentlich keine Fehler im Code sind (Soweit ich es sehe).

Es wäre großartig, wenn jemand einen Fehler sehen würde oder ähnliches
Vielen Dank schonmal im Vorraus

---
Edit: code-Tags durch cpp-Tags ersetzt, Überschrift geändert.

Dieser Post wurde am 28.04.2014 um 22:56 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.04.2014, 19:39 Uhr
maggiforever



Und Entschuldigung wegen der Überschrift, ich habe gedacht, dass man dort seine E-Mail eingeben muss.
---
Edit: Ich hab das mal korrigiert, so dass man jetzt auch gleich sieht, worum es geht.

Dieser Post wurde am 28.04.2014 um 22:58 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.04.2014, 23:07 Uhr
Hans
Library Walker
(Operator)


Hi,

wenn das hier Funktionen sein sollen:

C++:
//Funktionen
void rotAn { digitalWrite(rot, HIGH); }
void rotAus { digitalWrite(rot, LOW); }
void gelbAn { digitalWrite(gelb, HIGH); }
void gelbAus { digitalWrite(gelb, LOW); }
void gruenAn { digitalWrite(gruen, HIGH); }
void gruenAus { digitalWrite(gruen, LOW); }


dann fehlt da jeweils ein wichtiges Element, das dem Compiler dies auch mitteilt: nämlich die Klammern hinter dem Funktionsnamen. Also

C++:
//Funktionen
void rotAn() { digitalWrite(rot, HIGH); }
...



Das selbe gilt in der loop-Funktion: da müssen auch bei Aufrufen immer die Klammern hinter dem Namen stehen, also

C++:
rotAn(); // <-- Klammern!


anstelle von

C++:
rotAn;


sonst kann der Compiler die nicht von Variablennamen unterscheiden.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.04.2014, 20:00 Uhr
maggiforever



Achso okay vielen Dank!
Ich bin das leider von anderen Programmiersprachen gewohnt, dass man keine Klammern braucht, wenn dort auch nichts hinein kommt.
Vielen Dank für die Antwort, das hat mir wirklich viel Sucherei erspart!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.04.2014, 22:25 Uhr
Hans
Library Walker
(Operator)


Hi,

bitte sehr.
Ich weis zwar nicht, welche anderen Programmiersprachen Du konkret meinst, aber vielleicht hilft Dir folgendes: Andere Programmiersprachen wie Basic oder Pascal unterscheiden bei Unterprogrammen zwischen Prozeduren und Funktionen. Eine Funktion ist dabei ein Unterprogramm, dass einen Wert bzw. ein Ergebnis zurück liefert, so wie eine Funktion in der Mathematik. Eine Prozedur tut dagegen nur irgendwas, liefert aber kein Ergebnis an den Aufrufer zurück. Und jetzt der wichtige Punkt: diese Unterscheidung gibt es in C/C++ nicht. In C/C++ sind Unterprogramme immer Funktionen; die können ein Ergebnis zurück liefern, müssen es aber nicht. Aber weil es eben immer Funktionen sind, müssen auch die Klammern immer dabei sein.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 29.04.2014 um 22:27 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: