Hola
Tengo un problema al usar estos tres elementos
He reducido el código al mínimo para identificar el problema
Un Arduino Pro-Mini esta configurado como esclavo, compilado con el IDE v1.8.12
Una función "MoveServo" desplaza un servo entre dos angulos
El desplazamiento se hace según un valor que se lee de mediante Wire.read()
Todo funciona correctamente, excepto el bucle de movimiento del servo, la función delay(30) para tener un desplazamiento lento no actua, el movimiento es rápido
Al inicio ha una definición CON_WIRE para compilar una función loop() u otra()
Cuando no se define en la función loop(), se ejecuta un movimiento (sweet) del servo, y funciona correctamente.
Es decir, cuando se leen datos desde I2C, el delay del bucle for() no actue
Agradecería ayuda, pues ya no sé que hacer
Saludos y gracias por anticipado
//#define CON_WIRE // comentar esta linea para test
#define NumEsclavo 3
#include <Servo.h>
#include <Wire.h>
Servo myservo;
void setup(){
Serial.begin(9600);
Serial.println("----------------");
Wire.begin(NumEsclavo); // Unimos este dispositivo al bus I2C con dirección definida en NumEsclavo
Wire.onReceive(receiveEvent); // Registramos el evento al recibir datos
myservo.attach(9); // asignamos pin
Serial.println("END SETUP -------------------------");
}
#if defined CON_WIRE
void loop(){
// Esta es la función loop a usar si recibimos mediante wire
}
#else
void loop(){
//Esta es la función de prueva sin leer mediante wire
MoveServo(60, 120);
delay(500);
MoveServo(120, 60);
delay(500);
}
#endif
void MoveServo(byte FROM, byte TO){ // Mover servo de FROM a TO
//myservo.attach(PinServo[Dest]); // asignamos pin
if(FROM < TO){
for(int pos = FROM; pos <= TO; pos += 1){
myservo.write(pos);
delay(30);
}
}
else{
for(int pos = FROM; pos >= TO; pos -= 1){
myservo.write(pos);
delay(30);
}
}
// myservo.detach();
}
void receiveEvent() {
int Mandato=Wire.read();
int Destino=Wire.read(); // no se usa está aquí para conservar la misma estructura que en el sketch original
#if defined DEBUG
Serial.print("LEYENDO Mandato "); Serial.print(Mandato);Serial.print(" Destino "); Serial.println(Destino);
#endif
switch (Mandato) {
case 0:
break;
case 1:
MoveServo(60, 120);
break;
case 2:
MoveServo(120, 60);
break;
}
}