ATmega328 2 Taster 2 Servos schalten

#5768576
Lesenswert?

Hallo liebe gleichgesinnte ;)

kurzes Vorwort:

ich habe mir mal Gedanken gemacht wie ich bei meinem Futterboot anstelle 
des eingebauten Hoppers (der ja immer wieder fest rostet) eine 
alternative Lösung suchen könnte. Ich möchte zwei Servo´s in das Gehäuse 
einbauen und mit einem Ausleger die Montage abwerfen. Die zwei 
Steuerleitungen vom Empänger liegen über Reed-Kontakte an den zwei 
Eingängen des ATmega und wedern seperat angesteuert. Ich habe nur ein 
Problem mit meinem Sketch das die Servos immer gleichzeitg Schalten (ich 
verzweifel bald) ich muss dem Mega irgend wie sagen das er die Ein und 
Ausgänge getrennt voneinander schalten und ausgewerten werden muss. 
Leider habe ich nicht all zuviel Ahnung vom Programieren. Wie könnte ich 
das Prblem lösen?? MFG
1
#include <Servo.h> // zugriff auf Servo Bibliothek
2
const int BUTTON1 = 2; // Pushbutton Pin auf dem Board (2)
3
const int BUTTON2 = 4; // Pushbutton Pin auf dem Board (4)
4
int val = 0; // speichert den Zustand des Tasters
5
int old_val = 0; // speichert den vorherigen wert von val
6
int state = 0; // 0 = Servo Position eins 1 = Servo Position zwei
7
Servo servo1; // deklariert den Namen des ersten Servos
8
Servo servo2;
9
void setup() {
10
  pinMode(BUTTON1, INPUT_PULLUP); // Gibt an dass Buttom ein Input ist
11
  pinMode(BUTTON2, INPUT_PULLUP); // Gibt an dass Buttom ein Input ist
12
  servo1.attach(9); // gibt an auf welchem Pin der Servo mit dem steuerkabel anliegt
13
  servo1.write(0); // gibt die Grundstellung des Servo beim start an
14
  servo2.attach(10); // gibt an auf welchem Pin der Servo mit dem steuerkabel anliegt
15
  servo2.write(0); // gibt die Grundstellung des Servo beim start an
16
}
17

18
void loop()
19
{  val = digitalRead(BUTTON1); // liest den Input aus und cheked ob er gedrückt ist.
20
   if ((val == LOW) && (old_val == HIGH)) { 
21
     state = 1 - state;
22
     delay(1000);
23
   }
24
    val = digitalRead(BUTTON2); // liest den Input aus und cheked ob er gedrückt ist.
25
   if ((val == LOW) && (old_val == HIGH)) {  
26
     state = 1 - state;
27
     delay(1000);
28
   }
29
   old_val = val; // aktueller val wird zu val alt
30

31
  if (state == 1) {
32
    servo1.write(150); // Stelle servo auf 180 grad
33
  } 
34
  else {
35
    servo1.write(0); // stelle servo auf startposition
36
  }  
37
   if (state == 1) {
38
    servo2.write(150); // Stelle servo auf 180 grad
39
  }  
40
  else {
41
    servo2.write(0); // stelle servo auf startposition
42
  }
43

44
}
Gast #5768726
Lesenswert?

Markus R. schrieb:
1
 #include <Servo.h> // zugriff auf Servo Bibliothek
2
 const int BUTTON1 = 2; // Pushbutton Pin auf dem Board (2)
3
 const int BUTTON2 = 4; // Pushbutton Pin auf dem Board (4)
4
 int val = 0; // speichert den Zustand des Tasters
5
 int old_val = 0; // speichert den vorherigen wert von val
6
 int statea = 0; // 0 = Servo Position eins 1 = Servo Position zwei
7
 int stateb = 0;
8
 Servo servo1; // deklariert den Namen des ersten Servos
9
 Servo servo2;
10
 void setup() {
11
   pinMode(BUTTON1, INPUT_PULLUP); // Gibt an dass Buttom ein Input ist
12
   pinMode(BUTTON2, INPUT_PULLUP); // Gibt an dass Buttom ein Input ist
13
   servo1.attach(9); // gibt an auf welchem Pin der Servo mit dem 
14
 steuerkabel anliegt
15
   servo1.write(0); // gibt die Grundstellung des Servo beim start an
16
   servo2.attach(10); // gibt an auf welchem Pin der Servo mit dem 
17
 steuerkabel anliegt
18
   servo2.write(0); // gibt die Grundstellung des Servo beim start an
19
 }
20
 
21
 void loop()
22
 {  val = digitalRead(BUTTON1); // liest den Input aus und cheked ob er 
23
 gedrückt ist.
24
    if ((val == LOW) && (old_val == HIGH)) {
25
      statea = 1 - statea;
26
      delay(1000);
27
    }
28
     val = digitalRead(BUTTON2); // liest den Input aus und cheked ob er 
29
 gedrückt ist.
30
    if ((val == LOW) && (old_val == HIGH)) {
31
      stateb = 1 - stateb;
32
      delay(1000);
33
    }
34
    old_val = val; // aktueller val wird zu val alt
35
 
36
   if (statea == 1) {
37
     servo1.write(150); // Stelle servo auf 180 grad
38
   }
39
   else {
40
     servo1.write(0); // stelle servo auf startposition
41
   }
42
    if (stateb == 1) {
43
     servo2.write(150); // Stelle servo auf 180 grad
44
   }
45
   else {
46
     servo2.write(0); // stelle servo auf startposition
47
   }
48
 
49
 }

Möglicherweise so?

LG
old.
#5770730
Lesenswert?

So, vielen Dank an alle die mir bei der Lösung des Problems geholfen 
haben. An / bei der fertige Sketch. Läuft stand alone auf einem 
ATmega328P.






1
//Stellt mittels zwei Taster (Taster 1 und Taster 2) jeweils einen Servo (Servo1 oder Servo 2) an.
2
//Somit können zwei Servos unabhängig voneinander geschaltet werden. Parogramm läuft auf ATmega328 //(stand alone).
3
// Markus Radtke 14.03.2019 servo_328.ino
4

5

6

7
#include <Servo.h> // zugriff auf Servo Bibliothek
8
 const int BUTTON1 = 2; // Pushbutton Pin auf dem Board (2)
9
 const int BUTTON2 = 4; // Pushbutton Pin auf dem Board (4)
10
 int vala = 0; // speichert den Zustand des Tasters 1
11
 int old_vala = 0; // speichert den vorherigen wert von vala taster 1
12
 int valb = 0; // speichert den Zustand des Tasters 2
13
 int old_valb = 0; // speichert den vorherigen wert von valb von taster 2
14
 int statea = 0; // 0 = Servo Position eins 1 = Servo Position zwei
15
 int stateb = 0; // 0 = Servo Position eins 1 = Servo Position zwei
16
 Servo servo1; // deklariert den Namen des ersten Servos
17
 Servo servo2; // deklariert den Namen des zweiten Servos
18
 void setup() {
19
   pinMode(BUTTON1, INPUT_PULLUP); // Gibt an dass Buttom ein Input ist
20
   pinMode(BUTTON2, INPUT_PULLUP); // Gibt an dass Buttom ein Input ist
21
   servo1.attach(9); // gibt an auf welchem Pin der Servo mit dem steuerkabel anliegt
22
   servo1.write(0); // gibt die Grundstellung des Servo beim start an
23
   servo2.attach(10); // gibt an auf welchem Pin der Servo mit dem steuerkabel anliegt
24
   servo2.write(0); // gibt die Grundstellung des Servo beim start an
25
 }
26
 
27
 void loop()
28
 {  vala = digitalRead(BUTTON1); // liest den Input aus und cheked ob er  gedrückt ist.
29
    if ((vala == LOW) && (old_vala == HIGH)) {
30
      statea = 1 - statea;
31
      delay(50);
32
    }
33
    valb = digitalRead(BUTTON2); // liest den Input aus und cheked ob er  gedrückt ist.
34
    if ((valb == LOW) && (old_valb == HIGH)) {
35
      stateb = 1 - stateb;
36
      delay(50);
37
    }
38
    old_vala = vala; // aktueller val wird zu val alt
39
 
40
   if (statea == 1) {
41
     servo1.write(150); // Stelle servo auf 150 grad
42
   }
43
   else {
44
     servo1.write(30); // stelle servo auf startposition
45
   }
46
    old_valb = valb; // aktueller val wird zu val alt
47
    
48
    if (stateb == 1) {
49
     servo2.write(150); // Stelle servo auf 150 grad
50
   }
51
   else {
52
     servo2.write(30); // stelle servo auf startposition
53
   }
54
 
55
 }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren