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
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