usare uscita digitale a singolo impulso

Salve ragazzi sto facendo po' di prove per programmare uscita arduino che dia in mase ad un ingresso digitale alto un singolo impulso di 500ms su un uscita digitale

le impostazioni di base che ho dato sono queste

int ANA = 2; // Anabbagliante Acceso
int ABB = 3; // Abbagliante Acceso
int RANA = 4; // Comando Relè Anabbalgiante
int RABB = 5; // Comando Relè Abbagliante

void setup() {
// put your setup code here, to run once:
pinMode(ANA, INPUT);
pinMode(ABB, INPUT);
pinMode(RANA, OUTPUT);
pinMode(RABB, OUTPUT);

}

ho provato facendo prove con funzione if ma non va bene... continuo ad avere uscita impulsiva continua

void loop() {
// put your main code here, to run repeatedly:
if (ANA == HIGH) {
digitalWrite(RANA, HIGH);
delay(500);
digitalWrite(RANA, LOW);
}
if (ABB == HIGH) {
digitalWrite(RABB, HIGH);
delay(500);
digitalWrite(RABB, LOW);
}
}

con la funzione for invece proprio non fa nulla

void loop() {
// put your main code here, to run repeatedly:
for (ANA = 0; ANA == 1; ANA++) {
digitalWrite(RANA, HIGH);
delay(500);
digitalWrite(RANA, LOW);
}
for (ABB = 0; ABB == 1; ABB++) {
digitalWrite(RABB, HIGH);
delay(500);
digitalWrite(RABB, LOW);
}
}

se uso la funzione While anche se non ho capito bene come va impostata... potrebbe essere soluzione giusta?

Sezione errata, il primo topic spiega cosa può stare in Megatopic.

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

ok grazie e scusate provvedo subito a correggere

Salve ragazzi sto facendo po' di prove per programmare uscita arduino che dia in mase ad un ingresso digitale alto un singolo impulso di 500ms su un uscita digitale

le impostazioni di base che ho dato sono queste

int ANA = 2;   // Anabbagliante Acceso
int ABB = 3;   // Abbagliante Acceso
int RANA = 4;  // Comando Relè Anabbalgiante
int RABB = 5;  // Comando Relè Abbagliante

void setup() {
  // put your setup code here, to run once:
pinMode(ANA, INPUT);
pinMode(ABB, INPUT);
pinMode(RANA, OUTPUT);
pinMode(RABB, OUTPUT);

}

ho provato facendo prove con funzione if ma non va bene... continuo ad avere uscita impulsiva continua

void loop() {
  // put your main code here, to run repeatedly:
if (ANA == HIGH) {
digitalWrite(RANA, HIGH);
delay(500);
digitalWrite(RANA, LOW);
}
if (ABB == HIGH) {
digitalWrite(RABB, HIGH);
delay(500);
digitalWrite(RABB, LOW);
}
}

con la funzione for invece proprio non fa nulla

void loop() {
  // put your main code here, to run repeatedly:
for (ANA = 0; ANA == 1; ANA++) {
digitalWrite(RANA, HIGH);
delay(500);
digitalWrite(RANA, LOW);
}
for (ABB = 0; ABB == 1; ABB++) {
digitalWrite(RABB, HIGH);
delay(500);
digitalWrite(RABB, LOW);
}
}

ora dovrei aver fatto giusto... spero

devi leggere il valore del pin ANA per poter capire se è HIGH o LOW :wink:

scrivere ANA==HIGH è sbagliato

if (digitalRead(ANA) == HIGH) {
digitalWrite(RANA, HIGH);
delay(500);
digitalWrite(RANA, LOW);
}

stessa cosa sotto per ABB

modificandola così uscita segue ingresso però non cade dopo 500ms

modificandola così uscita segue ingresso però non cade dopo 500ms

spiegati meglio.. indenti dire che il relè rimane sempre attivo?

cosa usi per mandare in HIGH gli ingressi?

Per ora uso un ponte con 5V diretto sull'ingresso, anche perché in condizioni di lavoro i due segnali sugli ingressi andranno prima uno poi altro...

che funzione usare per far si che ad ingresso fisso HIGH mi dia comando uscita di 500ms per poi riportarla in LOW e che non venga rieseguita finché non cambia lo stato sul ingresso

Per ora uso un ponte con 5V diretto sull'ingresso

ah ok, allora sì, rimane "quasi" sempre attivo il relè

per fare quello che dici tu io farei così, introducendo una variabile statoingresso

nel setup puoi mettere statoingresso=LOW

if (digitalRead(ANA) !=  statoingresso) { // se la lettura è diversa da statoingresso entra nell'if

statoingresso=digitalRead(ANA); // cambio il valore di statoingresso
digitalWrite(RANA, HIGH);
delay(500);
digitalWrite(RANA, LOW);
}

in questo modo entri nell' if solo se cambi stato all'ingresso