Buongiorno Ragazzi, sono alle prime armi con Arduino (Io nel caso specifico utilizzo Arduino Uno - Ide 1.0.5). Vi spiego il mio problema. Sto realizzando un programmino che implementi un accesso automatico ad un parcheggio attraverso un comune telecomando TV (che tenga conto dei posti disponibili- I posti disponibili sono 9- Se vi sono posti disponibili si accende un led verde e una sbarra comandata da un servomotore permetterà l'ingresso; se non vi sono posti disponibili si accende un led rosso) In pratica decodifica i segnali provenienti da un telecomando. Nel caso specifica decodifico due stati (ingresso e uscita) corrispondenti a due pulsanti del telecomando. Ho verificato che fino a che non includo il servo e la relativa libreria (Servo.h) il programma funziona correttamente. Non appena introduco la libreria Servo.h il servomotore vedo non fa quello che dico io. La sbarra si alza una prima volta ma poi non scende più e il resto del circuito vedo che non gira proprio come dovrebbe. Ad esempio ho notato che la ricezione del comando del telecomando viene recepito con un certo ritardo...
Io ipotizzo un conflitto tra librerie Servo.h e IrRemote.h (tra parentesi ho alimentato a parte il servo, non utilizzo la stessa alimentazione usb di Arduino). Come posso risolvere il problema? Grazie in anticipo. Ecco qui sotto lo sketch che vorrei implementare:
#include <IRremote.h> // use the library
int receiver = 8; // pin 1 of IR receiver to Arduino digital pin 8
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
int Available= 9; // Number of places available.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
#define ServoM 12 //Connected to the servo motor.
#define BarLow 177 //Low position of the barrier.
#define BarUp 95 //Up position of the barrier.
void setup()
{
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
pinMode(7, OUTPUT); // Pin verde - Segnalazione Posti disponibili
pinMode(2, OUTPUT); // Pin rosso - Segnalazione Posti esauriti
}
void loop()
{
myservo.attach(ServoM); // attaches the servo.
// myservo.write(BarLow); //Barrier in the low position
if (irrecv.decode(&results)) // have we received an IR signal?
{
irrecv.resume();// receive the next value
}
if ( results.value == 551520375 || results.value == 0x10406 ){ //tasto 1 sul telecomando - ingresso autoveicolo
if(Available != 10){
if(Available != -177){
Available--;
Serial.println(Available); // display it on serial monitor in hexadecimal
}
}
}
// In baso al valore Available scelgo cosa fare
switch (Available)
{
//
case 9: //posti dispnibili 9
digitalWrite(7, HIGH); // accendo il LED verde
digitalWrite(2, LOW); // spengo il LED rosso
myservo.write(BarLow);
break;
//
case -18: //posti dispnibili 8
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
//
case -40: //posti dispnibili 7
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
// Led si spegne
case -62: //posti dispnibili 6
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
case -84: //posti dispnibili 5
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
case -105://posti dispnibili 4
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
case -123: //posti dispnibili 3
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
case -141: //posti dispnibili 2
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
case -159: //posti dispnibili 1
digitalWrite(7, HIGH); //
digitalWrite(2, LOW); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
case -177: //posti dispnibili 0
digitalWrite(7, LOW); //
digitalWrite(2, HIGH); //
myservo.write(BarUp);
delay(5000);
myservo.write(BarLow);
break;
}
if ( results.value == 551504055 || results.value == 0x10404 ){ //tasto 2 sul telecomando
if(Available != 9){
Available++;
Serial.println(Available); // display it on serial monitor in hexadecimal
}
}
}