Ciao a tutti.Da poco ho iniziato a leggere riguardo Arduino e la settimana scorsa mi sono preso un kit Arduino uno perchè vorrei utilizzarlo nel mio plastico ferroviario.
Il mio progetto sarebbe quello di comandare 4 o 6 servocomandi tramite relativi pulsanti.
I servocomandi,indipendenti tra loro nel funzionamento,dovranno muoversi alcuni gradi sia in un senso che nell’altro.
Ho trovato alcuni sketch e alcuni esempi ma non mi aggradano molto.
Io vorrei che premendo una sola volta il pulsante il servo vada da una posizione,ipotesi 0 gradi fino all’altra,ipotesi 40 gradi ma senza dover star li a tenere premuto il pulsante.
Come posso procedere?
Avrei trovato questo schema ma non saprei ne come poter aggiungere altri servi (a quali pin collegarli) ne come modificare lo sketch originale…
[code]
/* controllo servo con un pulsante e indicatore led */
/* sal727 */
#include <Servo.h>
const int servoPin = 8; // Servo pin
const int led1 = 11; // led1 pin
const int led2 = 12; // led2 pin
const int buttonPin = 9; // Pushbutton pin
int buttonState = 0; // imposta variabile pulsante
int directionState = 0; // imposta variabile direzione
Servo servo; // dichiara il servo
int pos = 45; // imposta i gradi del servo
void setup() {
servo.write(pos); // stato iniziale del servo
servo.attach(8);
pinMode(buttonPin, INPUT); // imposta il pulsante come INPUT
pinMode(led1, OUTPUT); // imposta il led1 come INPUT
pinMode(led2, OUTPUT); // imposta il led2 come INPUT
digitalWrite(led1, HIGH); // stato iniziale del led uguale a quello del servo
}
void loop() {
buttonState = digitalRead(buttonPin); // leggi lo stato del pulsante
if (directionState == 0) { // se direzione è 0 ed il pulsante premuto
if (buttonState == HIGH) {
directionState = 1; // la direzione va a 1
for (pos = 45; pos < 135; pos += 1) // parte da 45° fino a 135° i9ncremen tata di 1
{
digitalWrite(led1, LOW); // led1 spento
digitalWrite(led2, HIGH); // led2 acceso
servo.write(pos);
delay(15); // aspetta 15ms per raggiungere la posizione
}
}
} else if (directionState == 1) { // se invece la direzione è a 1 ed ilpulsante premuto
if (buttonState == HIGH) {
directionState = 0; // la direrzione ritorna a 0
for (pos = 135; pos >= 45; pos -= 1) // riparte da 135° e torna a 45° scalata di 1
{
digitalWrite(led1, HIGH); // led1 acceso
digitalWrite(led2, LOW); // led2 spento
servo.write(pos);
delay(15); // aspetta 15ms per raggiungere la posizione
}
}
}
}
[/code]