PROBLEMA Sensore a infrarossi Arduino

Pubblicità

Alen96

Nuovo Utente
Messaggi
3
Reazioni
0
Punteggio
21
Salve, ho un problema. Ho realizzato un parcheggio meccanizzato e ho due sensori a infrarossi di prossimità, uno per l'ingresso e uno per l'uscita. Ho impostato che possono entrare nel parcheggio attraverso il sensore di entrata solamente 10 macchine (<=10) ma in realtà così non accade perché il valore non riporta: alle volte si blocca con 5 e alle volte si blocca con 6. Da cosa può dipendere?

C:
#include <Servo.h>
Servo motore;
//Pin
const int infrarossoIngresso = 13;
const int infrarossoUscita = 12;
const int ledVerde = 3;
const int ledRosso = 4;
const int ledGiallo = 5;
const int fotoresistenza = A5;

//Variabili
int posizioneServo = 0;
int varIngresso = 0;
int varUscita = 0;
int contatorePosti = 0;
int varLuminosita = 0;
int stato = 0;

void setup()
{
 Serial.begin(9600);
  pinMode(infrarossoIngresso, INPUT);
  pinMode(infrarossoUscita, INPUT);
  pinMode(ledVerde, OUTPUT);
  pinMode(ledRosso, OUTPUT);
  pinMode(ledGiallo, OUTPUT);
  pinMode(fotoresistenza, INPUT);

  motore.attach(2);
}

void loop ()
{
   varIngresso = digitalRead(infrarossoIngresso);
   varUscita = digitalRead(infrarossoUscita);
   varLuminosita = analogRead(fotoresistenza);

   if(varIngresso == HIGH && varUscita == HIGH)
   {
    posizioneServo = 15;
    delay(15);
    motore.write(posizioneServo);
    delay(15);
    }
 
   if(varIngresso == LOW && varUscita == HIGH && contatorePosti <= 10)
   {
    stato = 1;
    Serial.println(contatorePosti);
    posizioneServo = 90;
    delay(1000);
    motore.write(posizioneServo);
    delay(15);
   }

   if(varIngresso == HIGH && varUscita == LOW)
   {
    stato = 2;
    posizioneServo = 90;
    delay(1000);
    motore.write(posizioneServo);
    delay(15);
   }

  if(stato == 1)
  {
    contatorePosti++;
    stato = 0;
  }
  if(stato == 2)
  {
    contatorePosti--;
    stato = 0;
  }
  
  if(posizioneServo < 85)
  {
    digitalWrite(ledVerde, LOW);
    digitalWrite(ledRosso, HIGH);
  }
  else
  {
    digitalWrite(ledRosso, LOW);
    digitalWrite(ledVerde, HIGH);
  }
    
  if(varLuminosita > 900)
  {
    digitalWrite(ledGiallo, HIGH);
  }
  else {
    digitalWrite(ledGiallo, LOW);
  }
 
}
 
Prova a farti stampare in output varIngresso e e varUscita, più che altro per verificare se le condizioni che hai creato vengono rispettate.
 
Pubblicità
Pubblicità
Indietro
Top