ich versuche über einen Counter der bis 20 zählt (gesteuert durch eine externe Quarzuhr =switchpin) einen Servo alle 10 Zähleinheiten zu steuern.
Ich habe im Moment für Kontrollzwecke an Pin5 noch eine LED um die Funktion besser zu überprüfen. Die LED zeigt die zeitliche Steuerung korrekt, nur bewegt sich der Servo nicht so wie sollte. Hat jemand eine Idee wo der Hund begraben sein könnte?
Wäre dankbar um Hilfe.
Hier mein Sketch:
#include <Servo.h>
Servo servo1;
int switchPin = 4; // switch is connected to pin 4
int val; // variable for reading the pin status
int buttonState; // variable to hold the button state
int buttonPresses = 0; // how many times the button has been pressed
void setup() {
pinMode(switchPin, INPUT); // Set the switch pin as input
Serial.begin(9600); // Set up serial communication at 9600bps
buttonState = digitalRead(switchPin); // read the initial state
servo1.attach(7);
digitalWrite(5, HIGH); //enable pullups to make pin high
}
void loop(){
val = digitalRead(switchPin); // read input value and store it in val
if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if the button is pressed
buttonPresses++; // increment the buttonPresses variable
Serial.print("Button has been pressed ");
Serial.print(buttonPresses);
Serial.println(" times");
delay(500);
if(buttonPresses <= 20)
{
digitalWrite(5, HIGH);
servo1.write(60);
}
if(buttonPresses >= 20)
{
digitalWrite(5, HIGH);
buttonPresses = 0;
}
if(buttonPresses >= 10)
{
digitalWrite(5, LOW);
servo1.write(170);
}
}
}
buttonState = val; // save the new state in our variable
}
Anstatt einzelne Fragen in schnell aufeinander folgenden Postings zu beantworten, solltest Du mehrere Antworten in einem Posting zusammenfassen. Zitiere am besten, worauf Du Dich beziehst oder schreibe „@userx:“ davor. Dann bleibt der Thread besser lesbar.
Also ich sag mal was die ganze Anlage am Schluss machen Soll. Dies ist nur ein Test Sketch.
Der Arduino soll über den externen Quarztimer den Servo so steuern, dass er alle 5 Minuten eine Bewegung von 90 Grad ausführt.
Die verschiedenen Zeitstufe von 0-10 und 10-20 ist nur, um dem Servo Zeit zu lassen an die Stellung zu kommen.
#include <Servo.h>
int button1 = 4; //button pin, connect to ground to move servo
bool press1 ;
bool oldpress1 = false;
bool sweep1state = false;
Servo servo1;
int switchPin = 4; // switch is connected to pin 4
int val; // variable for reading the pin status
int buttonState; // variable to hold the button state
int buttonPresses = 0; // how many times the button has been pressed
void setup() {
pinMode(button1, INPUT_PULLUP);
pinMode(switchPin, INPUT); // Set the switch pin as input
Serial.begin(9600); // Set up serial communication at 9600bps
buttonState = digitalRead(switchPin); // read the initial state
servo1.attach(7);
digitalWrite(5, HIGH); //enable pullups to make pin high
}
loop()
{
servo1.write(10);
delay((10000);
servo1.write(170);
delay((10000);
}
da bekomme ich eine Fehlermeldung: exit status 1
expected constructor, destructor, or type conversion before ';' token
Ich hab den if-Part nochmal etwas umgestellt und eine weitere Servostellung dazu gefügt. So läuft der Loop 1 mal richtig vertummt danach aber:
#include <Servo.h>
int button1 = 4; //button pin, connect to ground to move servo
bool press1 ;
bool oldpress1 = false;
bool sweep1state = false;
Servo servo1;
int switchPin = 4; // switch is connected to pin 4
int val; // variable for reading the pin status
int buttonState; // variable to hold the button state
int buttonPresses = 0; // how many times the button has been pressed
void setup() {
pinMode(button1, INPUT_PULLUP);
pinMode(switchPin, INPUT); // Set the switch pin as input
Serial.begin(9600); // Set up serial communication at 9600bps
buttonState = digitalRead(switchPin); // read the initial state
servo1.attach(7);
digitalWrite(5, HIGH); //enable pullups to make pin high
}
void loop() {
val = digitalRead(switchPin); // read input value and store it in val
if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if the button is pressed
buttonPresses++; // increment the buttonPresses variable
Serial.print("Button has been pressed ");
Serial.print(buttonPresses);
Serial.println(" times");
if (buttonPresses <= 10)
{
digitalWrite(5, HIGH);
servo1.write(10);
}
if (buttonPresses >= 10)
{
digitalWrite(5, LOW);
servo1.write(120);
if (buttonPresses >= 20)
{
digitalWrite(5, HIGH);
servo1.write(10);
buttonPresses = 0;
}
}
}
}
buttonState = val; // save the new state in our variable
}
Jetzt hab ich mal zum Test, folgende Werte eingegeben.......und siehe da jetzt bewegt der Servo sich richtig, wie er sollte. Jetzt ist nur die Frage was ist das für eine Grösse servo.Write(?) sind das nicht Grad?
if (buttonPresses <= 10)
{
digitalWrite(5, HIGH);
servo1.write(150);
}
if (buttonPresses >= 10)
{
digitalWrite(5, LOW);
servo1.write(1000);
Also das Momentane Sketch sieht nun so aus. Mit den abstrusen Servo.write Angaben (100) und (950)! :o
Ich verstehs zwar überhaupt nicht, aber so macht der Servo bei Sekunde 10 eine gegen Uhrzeiger Bewegung auf Position 9h und nach 20 Sekunden auf Position 12h.
#include <Servo.h>
int button1 = 4; //button pin, connect to ground to move servo
bool press1 ;
bool oldpress1 = false;
bool sweep1state = false;
Servo servo1;
int switchPin = 4; // switch is connected to pin 4
int val; // variable for reading the pin status
int buttonState; // variable to hold the button state
int buttonPresses = 0; // how many times the button has been pressed
void setup() {
pinMode(button1, INPUT_PULLUP);
pinMode(switchPin, INPUT); // Set the switch pin as input
Serial.begin(9600); // Set up serial communication at 9600bps
buttonState = digitalRead(switchPin); // read the initial state
servo1.attach(7);
}
void loop() {
val = digitalRead(switchPin); // read input value and store it in val
if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if the button is pressed
buttonPresses++; // increment the buttonPresses variable
Serial.print("Button has been pressed ");
Serial.print(buttonPresses);
Serial.println(" times");
if (buttonPresses <= 10)
{
servo1.write(100);
}
if (buttonPresses >= 10)
{
servo1.write(950);
if (buttonPresses >= 20)
{
buttonPresses = 0;
}
}
}
}
buttonState = val; // save the new state in our variable
}