Cancello automatico problema fotoresistenza

Buongiorno , volevo chiedere un aiuto , ho realizzato un circuito per cancello automatico , funziona tutto ,pulsante di apertura, motore in apertura, fine corsa di apertura , motore fermo , temporizza , riparte in chiusura , motore fermo con finecorsa chiusura . Adesso  volevo aggiungere una fotoresistenza che in fase di oscuramente (passaggio pedeno o automobile) in modalità motore in 
 chiusura cancello tornesse indietro e quindi in apertura di nuovo per eseguire di nuovo il ciclo finecorsa apertura temporizzo richiude . 

/******definizione hardware********/
#define MOTA		A0//ingresso A del ponte H
#define MOTB		A1//ingrasso B del ponte H
#define LED			13//uscita del lampeggiante
#define PUL			12//ingresso del pulsante per l'apertura
#define FCA			8//fine corsa di apertura
#define FCC			7//fine corsa di chiusura
/****DEFINIZIONE STATI SISTEMA*****/
#define CHIUSO		0
#define APERTURA	1
#define ATTESA		2
#define CHIUSURA	3
/*****DEFINIZIONI COSTANTI*****/
#define	DELAY		200//ritardo lampeggiante
#define PAUSE		2000//wait dopo apertura
/*****DICHIARAZIONE DELLE VARIABILI GLOBALI*****/
int state = 0;//variabile stato sistema
bool fcA = 0;//variabile fine corsa apertua
bool fcC = 0;//variabile fine corsa chiusura
bool pul = 0;//variabile pulsante apertura
bool pulState = 0;//stato pulsante
bool flagTimer = false;//flag temporizzazione pausa cancello
bool stateLed = false;//stato lampeggiante
long previusTime = 0;//variabile tempo per temporizzatore
long lastTime = 0;//variabile tempo per lampeggiante
/*****DICHIARAZIONE DEI PROTOTIPI DELLE FUNZIONI (FIRME)*****/
bool pauseOpenClose(int wait);//funzione di temporizzazione
void powerOnMotor(int a, int b);//funzione comando motore (vedi tab. di verità)
void flashing(bool enable);//funzione lampeggiante

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(MOTA, OUTPUT);
  pinMode(MOTB, OUTPUT);
  pinMode(FCA, INPUT);
  pinMode(FCC, INPUT);
  pinMode(PUL, INPUT);
}

void loop()
{
  pul = 0;
  fcA = digitalRead(FCA);
  fcC = digitalRead(FCC);
  if(digitalRead(PUL))
    pulState = 1;
  if(pulState == 1 && !digitalRead(PUL))
  {
    pulState = 0;
    pul = 1;
  }
    
  switch(state)
  {
    case CHIUSO:
    	flashing(false);
    	powerOnMotor(0,0);    	
    	if(pul == 1)
          state = APERTURA;    
    break;
    case APERTURA:
    	flashing(true);
    	powerOnMotor(1,0);    	
    	if(fcA == 1 && fcC == 0)
          state = ATTESA;    	    
    break;
    case ATTESA:
    	flashing(false);
    	powerOnMotor(0,0);    	
    	if(pauseOpenClose(PAUSE))
          state = CHIUSURA;    	    
    break;
    case CHIUSURA:
    	flashing(true);
    	powerOnMotor(0,1);    	
    	if(fcC == 1 && fcA == 0)
          state = CHIUSO;         
    break;    
  }
}

void powerOnMotor(int a, int b)
{
  digitalWrite(MOTA, a);
  digitalWrite(MOTB, b);
}

bool pauseOpenClose(int wait)
{
  if(flagTimer == false)
  {
    previusTime = millis();
    flagTimer = true;
  }
  if((millis() - previusTime) >= wait)
  {
    flagTimer = false;
    return true;
  }
  else    
    return false;  
}

void flashing(bool enable)
{
  if(enable == true)
  {
    if((millis() - lastTime) >= DELAY)
    {
      stateLed = !stateLed;        
      lastTime = millis();
    }
    digitalWrite(LED, !stateLed);
  }
  else
    digitalWrite(LED, LOW);
}
---------------------------------------------------------------------------------di seguito inserimento dello fotoresistenza--------------------------------------------
*/
/******definizione hardware********/
#define MOTA		A0//ingresso A del ponte H
#define MOTB		A1//ingrasso B del ponte H
#define LED			13//uscita del lampeggiante
#define PUL			12//ingresso del pulsante per l'apertura
#define FCA			8//fine corsa di apertura
#define FCC			7//fine corsa di chiusura
#define FT          4//Fotoresistenza 
/****DEFINIZIONE STATI SISTEMA*****/
#define CHIUSO		0
#define APERTURA	1
#define ATTESA		2
#define CHIUSURA	3
/*****DEFINIZIONI COSTANTI*****/
#define	DELAY		200//ritardo lampeggiante
#define PAUSE		2000//wait dopo apertura
/*****DICHIARAZIONE DELLE VARIABILI GLOBALI*****/
int state = 0;//variabile stato sistema
bool fcA = 0;//variabile fine corsa apertua
bool fcC = 0;//variabile fine corsa chiusura
bool pul = 0;//variabile pulsante apertura
bool pulState = 0;//stato stato apertura
bool Fotoresistenza = 0;//Fotoresistenza
bool flagTimer = false;//flag temporizzazione pausa cancello
bool stateLed = false;//stato lampeggiante
long previusTime = 0;//variabile tempo per temporizzatore
long lastTime = 0;//variabile tempo per lampeggiante
/*****DICHIARAZIONE DEI PROTOTIPI DELLE FUNZIONI (FIRME)*****/
bool pauseOpenClose(int wait);//funzione di temporizzazione
void powerOnMotor(int a, int b);//funzione comando motore (vedi tab. di verità)
void flashing(bool enable);//funzione lampeggiante

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(MOTA, OUTPUT);
  pinMode(MOTB, OUTPUT);
  pinMode(FCA, INPUT);
  pinMode(FCC, INPUT);
  pinMode(PUL, INPUT);
  pinMode (FT, INPUT);
}

void loop()
{
  pul = 0;
  fcA = digitalRead(FCA);
  fcC = digitalRead(FCC);
  if(digitalRead(PUL))
    pulState = 1;
  if(pulState == 1 && !digitalRead(PUL))
  {
    pulState = 0;
    pul = 1;
  }
  { Fotoresistenza = 0;
  fcA = digitalRead(FCA);
  fcC = digitalRead(FCC);
  if(digitalRead(Fotoresistenza = 0)
    Fotoresistenza = 0;
  if(Fotoresistenza == 1 && !digitalRead(Fotoresistenza))
  {
    pulState = 0;
    ft= 1;
    
  
switch(state)
  {
    case CHIUSO:
    	flashing(false);
    	powerOnMotor(0,0);    	
    	if(pul == 1)
          state = APERTURA;    
    break;
    case APERTURA:
    	flashing(true);
    	powerOnMotor(1,0);    	
    	if(fcA == 1 && fcC == 0)
          state = ATTESA;    	    
    break;
    case ATTESA:
    	flashing(false);
    	powerOnMotor(0,0);    	
    	if(pauseOpenClose(PAUSE))
          state = CHIUSURA;    	    
    break;
    case CHIUSURA:
    	flashing(true);
    	powerOnMotor(0,1);    	
    	if(fcC == 1 && fcA == 0)
          state = CHIUSO;         
    break;    
  }
}

void powerOnMotor(int a, int b)
{
  digitalWrite(MOTA, a);
  digitalWrite(MOTB, b);
}

bool pauseOpenClose(int wait)
{
  if(flagTimer == false)
  {
    previusTime = millis();
    flagTimer = true;
  }
  if((millis() - previusTime) >= wait)
  {
    flagTimer = false;
    return true;
  }
  else    
    return false;  
}

void flashing(bool enable)
{
  if(enable == true)
  {
    if((millis() - lastTime) >= DELAY)
    {
      stateLed = !stateLed;        
      lastTime = millis();
    }
    digitalWrite(LED, !stateLed);
  }
  else
    digitalWrite(LED, LOW);
}


Grazie in anticipo .
Saluti. Testo preformattato

Buongiorno,

prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...

... essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ...

... infine, in conformità al suddetto regolamento , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.

Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nel rispetto del citato regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di fare il tutto al più presto.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.