Hola, soy nuevo, tanto en el foro como en la programacion de arduino, les comento que trabajo en un laboratorio y me gustaria implementar un sistema para manejar varios servos con 3 tiempos distintos para cada uno independientemente, yo modifique un codigo que encontre, se los paso para que vean, el servo 2 no me funciona, el 1 anda perfecto
#include <Servo.h> // incluyo la librería servo.h
Servo miservo1; // Definimos “miservo” para controlar un servomotor
Servo miservo2; // Definimos “miservo” para controlar un servomotor
int ledverde1 = 22; // utilizo el pin 22 para led verde
int ledrojo1 = 23; // utilizo el pin 23 para led rojo
int ledazul1 = 24;// utilizo el pin 24 emitir un tono de audio
int ledverde2 = 25; // utilizo el pin 22 para led verde
int ledrojo2 = 26; // utilizo el pin 23 para led rojo
int ledazul2 = 27;// utilizo el pin 24 emitir un tono de audio
int pulsadorApplixServo1 = 28; // utilizo el pin 25 como botón de entrada Applix Smart
int pulsadorApplixServo2 = 29; // utilizo el pin 25 como botón de entrada Applix Smart
int pos1 = 74; // variable para almacenar la posición inicial del servo
int pos2 = 74; // variable para almacenar la posición inicial del servo
int ESTADOpulsadorApplixServo1 = 0; // variable para almacenar la lectura del estado del pulsador Applix Smart
int ESTADOpulsadorApplixServo2 = 0; // variable para almacenar la lectura del estado del pulsador Applix Smart
void setup()
{
miservo1.attach(9); // Convierte el pin 9 en el controlador (driver) del servo denominado “miservo”
miservo2.attach(10); // Convierte el pin 9 en el controlador (driver) del servo denominado “miservo”
// Inicializa los pin digitales como salida
pinMode(ledverde1, OUTPUT);
pinMode(ledrojo1, OUTPUT);
pinMode(ledazul1, OUTPUT);
pinMode(ledverde2, OUTPUT);
pinMode(ledrojo2, OUTPUT);
pinMode(ledazul2, OUTPUT);
// defino el pulsador como entrada:
pinMode(pulsadorApplixServo1, INPUT);
pinMode(pulsadorApplixServo2, INPUT);
miservo1.write(pos1); // Fija en el servo la posición 74 grados y hace que inicialmente la barrera esté baja
miservo2.write(pos2); // Fija en el servo la posición 74 grados y hace que inicialmente la barrera esté baja
}
void loop()
{
digitalWrite(ledverde1, LOW); // inicialmente led verde apagado
digitalWrite(ledazul1, HIGH); // inicialmente led rojo encendido
digitalWrite(ledrojo1, LOW); // inicialmente led rojo encendido
ESTADOpulsadorApplixServo1 = digitalRead(pulsadorApplixServo1); // leo el estado del botón del pulsador y lo guardo en la variable ESTADOpulsadorApplixServo1
ESTADOpulsadorApplixServo2 = digitalRead(pulsadorApplixServo2); // leo el estado del botón del pulsador y lo guardo en la variable ESTADOpulsadorApplixServo1
//APPLIX SMART
{
if (ESTADOpulsadorApplixServo1 == HIGH) { // Si ESTADOpulsador está activo (HIGH) comienza a levantar la barrera
digitalWrite(ledazul1, LOW);
digitalWrite(ledverde1, LOW);
digitalWrite(ledrojo1, HIGH);
delay(3000);
for (pos1 = 74; pos1 > 0; pos1 -= 1) // La variable “pos” se incrementa desde 0 a 90 grados
{ // en pasos de 1 grado
miservo1.write(pos1); // indica al servo que vaya la la posición almacenada en la variable “pos”
delay(2); // espera 20ms hasta que el servo alcance la posición
}
digitalWrite(ledrojo1, LOW); // con la barrera subida el led rojo se apaga
digitalWrite(ledazul1, LOW); // inicialmente led rojo encendido
digitalWrite(ledverde1, HIGH); // turn the LED on (HIGH is the voltage level)
//Emite sonido que cambia su frecuencia unos segundos antes de comenzar a bajar como aviso
// sintaxis de tone: tone(pin, frequency)
delay(10000);
// Se termina el sonido de aviso
digitalWrite(ledverde1, LOW); // se apaga el led verde
digitalWrite(ledazul1, HIGH); // inicialmente led rojo encendido
digitalWrite(ledrojo1, LOW); // se enciendo el led rojo
for (pos1 = 0; pos1 <= 74; pos1 += 1) // comienza a bajar la barrera desde la posición 90 hasta 0 grados
{
miservo1.write(pos1); // indica al servo que vaya a la posición almacenada en la variable
delay(2); // espera 20ms para que el servo alcance la posición
}
}
if (ESTADOpulsadorApplixServo2 == HIGH) { // Si ESTADOpulsador está activo (HIGH) comienza a levantar la barrera
digitalWrite(ledazul2, LOW);
digitalWrite(ledverde2, LOW);
digitalWrite(ledrojo2, HIGH);
delay(3000);
for (pos2 = 74; pos2 > 0; pos2 -= 1) // La variable “pos” se incrementa desde 0 a 90 grados
{ // en pasos de 1 grado
miservo2.write(pos2); // indica al servo que vaya la la posición almacenada en la variable “pos”
delay(2); // espera 20ms hasta que el servo alcance la posición
}
digitalWrite(ledrojo2, LOW); // con la barrera subida el led rojo se apaga
digitalWrite(ledazul2, LOW); // inicialmente led rojo encendido
digitalWrite(ledverde2, HIGH); // turn the LED on (HIGH is the voltage level)
//Emite sonido que cambia su frecuencia unos segundos antes de comenzar a bajar como aviso
// sintaxis de tone: tone(pin, frequency)
delay(10000);
// Se termina el sonido de aviso
digitalWrite(ledverde2, LOW); // se apaga el led verde
digitalWrite(ledazul2, HIGH); // inicialmente led rojo encendido
digitalWrite(ledrojo2, LOW); // se enciendo el led rojo
for (pos2 = 0; pos2 <= 74; pos2 += 1) // comienza a bajar la barrera desde la posición 90 hasta 0 grados
{
miservo2.write(pos2); // indica al servo que vaya a la posición almacenada en la variable
delay(2); // espera 20ms para que el servo alcance la posición
}
}
}
}