Schalter mit Arduino Programmieren

Gast #4691501
Hallo,
ich bin eine Arduino-Anfängerin und habe folgendes Problem.
Ich möchte mit dem Arduino einen Aktor steuern der über einen 
Gestensensor in die eine Richtung fährt und über einen anderen Schalter 
in die andere Richtung fährt und jeweils einen Endschalter besitzt.

Das System sieht folgendermaßen aus:
-Gestensensor wird ausgelöst --> Aktor fährt in Richtung1 --> 
Endstoppschalter1 wird ausgelöst --> Aktor bleibt stehen --> Schalter 
wird ausgelöst --> Aktor fährt zurück in Richtung2 --> Endstoppschalter2 
wird ausgelöst --> Aktor bleibt stehen

ich habe mir folgenden Code gefunden und für meine Anwendung 
umgeschrieben. Aber leider Funktioniert er nicht.

1
int FWSPEED = 12;     // fährt in Richtung 1
2
int FWSTOPP = 11;     // bleibt in Richtung1 stehen
3
int BWSPEED = 10;     // fährt in Richtung 2
4
int BWSTOPP = 9;      // bleibt in Richtung2 stehen
5
int KIPP = 6;         // Kippschalter
6
int GESTE = 5;        // Gestensensor
7
int FWEX = 4;         // externer Endstopp FW
8
int BWEX = 3;         // externer Endstopp BW
9

10
int switchState = 0; // actual read value from GESTE
11
int oldSwitchState = 0; // last read value from GESTE
12
int lightsOn = 0; // is the switch on = 1 or off = 0
13

14
int switch2State = 0; // actual read value from KIPP
15
int oldSwitch2State = 0; // last read value from KIPP
16
int lights2On = 0; // is the switch on = 1 or off = 0
17

18
void setup() {
19
  pinMode (FWSPEED, OUTPUT);
20
  pinMode (FWSTOPP, OUTPUT);
21
  pinMode (BWSPEED, OUTPUT);
22
  pinMode (BWSTOPP, OUTPUT);
23
  pinMode (KIPP, INPUT);
24
  pinMode (GESTE, INPUT);
25
  pinMode (FWEX, INPUT);
26
  pinMode (BWEX, INPUT);
27
}
28

29
void loop() {
30
  switchState = digitalRead(GESTE); // read the pushButton State
31
  if (switchState != oldSwitchState) // catch change
32
  {
33
    oldSwitchState = switchState;
34
    if (switchState == HIGH)
35
    {
36
      // toggle
37
      lightsOn = !lightsOn;
38
    }
39
  }
40

41
  if(lightsOn)
42
  {
43
     digitalWrite(FWSPEED, HIGH);   // set the LED on
44
   } 
45
  else if(FWEX == HIGH) {
46
      digitalWrite(FWSPEED, LOW);
47
      digitalWrite(FWSTOPP, HIGH);   
48
    }
49

50
  switch2State = digitalRead(KIPP); // read the pushButton State
51
  if (switch2State != oldSwitch2State) // catch change
52
  {
53
    oldSwitch2State = switch2State;
54
    if (switch2State == HIGH)
55
    {
56
      // toggle
57
      lights2On = !lights2On;
58
    }
59
  }
60

61
  if(lights2On)
62
  {
63
     digitalWrite(BWSPEED, HIGH);// set the LED on
64
   } 
65
  else if(BWEX == HIGH) {
66
      digitalWrite(BWSPEED, LOW);
67
      digitalWrite(BWSTOPP, HIGH);
68
   }    
69
}


Ich bin mir ziehmlich sicher, dass die beiden else if- Funktionen 
wahrscheinlich der Fehler sind. aber ich weiß nicht wie ich es anders 
schreiben könnte. Das Programmieren ist auch echt Neuland für mich! Ich 
wäre sehr dankbar, wenn mir jemand helfen könnte.

Viele Grüße
Caro
Gast
Hallo,

ohne genau das Programm zu verstehen, fallen mir die beiden 
if-Bedingungen
1
  else if(FWEX == HIGH) {
2
      digitalWrite(FWSPEED, LOW);
3
      digitalWrite(FWSTOPP, HIGH);
4
    }
und
1
  else if(BWEX == HIGH) {
2
      digitalWrite(BWSPEED, LOW);
3
      digitalWrite(BWSTOPP, HIGH);
4
   }
auf.

FWEX und BWEX sind die Nummern von Eingangspins. Um ihren Zustand 
abzufragen, must Du eine Abfrage der Pins durchführen:

statt
1
FWEX == HIGH
verwende
1
digitalRead(FWEX)==HIGH

Gruß

Markus
Moderator (Firma: Titel) Persönliche Seite
Caro schrieb:
> Aber leider Funktioniert er nicht.
Wie stellst du das fest?
Was erwartest du und was erhältst du statt dessen?

Zu dem hier:
> if (FWEX == HIGH)
FWEX wurde definiert als Variable mit dem Wert 4:
> int FWEX = 4;
Als was ist HIGH definiert?
Und dann: kann HIGH jemals den gleichen Wert wie FWEX (also 4) bekommen?

Formatierer schrieb im Beitrag #4691518:
> Wie sonst soll das ein Schwein entziffern können ....
Da war wohl ein Buchstabendreher bei den Tags. Der Slash muss vor das 
"c". Mit dem "Vorschau"-Button kann man das vor dem Absenden nochmal 
kontrollieren...
Gast
Ja danke Markus, das digitalRead habe ich auf jeden Fall vergessen 
gehabt.

Ich habe an meinem Arduino die jeweiligen Schalter und die Ausgaben mit 
LEDs gesteckt. Und dann sehe ich ja wenn ich die Schalter drücke ob es 
so funktioniert wie ich dass gedacht habe.

Okay, sorry das wusste ich nicht. Ist auch das erste mal, dass ich auf 
einem Forum unterwegs bin.
Gast
Ich glaube ich feile liebe noch ein bisschen an dem Code und melde mich 
dann wieder.
Tut mir leid wenn ich eure Zeit gestohlen habe, das wollte ich wirklich 
nicht.
Gast
Caro schrieb:
> int FWSPEED = 12;     // fährt in Richtung 1
> int FWSTOPP = 11;     // bleibt in Richtung1 stehen
> int BWSPEED = 10;     // fährt in Richtung 2
> int BWSTOPP = 9;      // bleibt in Richtung2 stehen
> int KIPP = 6;         // Kippschalter
> int GESTE = 5;        // Gestensensor
> int FWEX = 4;         // externer Endstopp FW
> int BWEX = 3;         // externer Endstopp BW

[Meckermodus}
Es ist nicht Pflicht aber sehr guter Style wenn man die
Grossschreibung nur für Konstanten und
1
#defines
verwendet. Variablen schreibt man in C klein oder
zumindest gross/klein.
[/Meckermodus]

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.