Ciao a tutti, vi chiedo un aiuto se possibile. penso anche molto semplice. devo realizzare un programma che mi controlla un blynk. Ho un Led che mi lampeggia 4 volte al secondo poi quando entra una condizione il led si spegne per 5 secondi e poi riparte a lampeggiare. Nel momento che il led si spegne vorrei che si attivi un relè. Come posso fare ?
Ho pensato di fare una condizione che mi controlla il tempo tra i lampeggi è se il tempo cambia mi attiva il relè. Però non so come fare la condizione IF
Quindi dovremmo aiutarti a scrivere un If per verificare una condizione che non ci vuoi dire? :o
Scusa, non ho capito la tua domanda. Cosa dovrei dire. Ho solo chiesto se mi potete aiutare a creare una condizione che mi attivi un relè quando un led smette di lampeggiare. Sto cercando di capire qualcosa sugli impulsi. Ma non riesco. ![]()
Le informazioni che ci dai sono insufficienti per darti una risposta sensata.
Ciao Uwe
Si scusa adesso posso dare qualcosa in più.
ho realizzato questo :
const int ledPin = 2; // pin assegnato al contatto led
int rele = 9;
int Statoled = 0; // variabile per la lettura del led
int Statoled_old = 0; // variabile per evitare doppio conteggio
int Conteggio = 0;// variabile che contiene il conteggio delle pulsazioni
unsigned long int TempoStart = 0; // memorizza i millisecondi dalla
//prima pulsazione conteggiata
unsigned long int Tempo = 0; // per conteggiare il tempo trascorso dalla prma pulsazione
unsigned long int TempoMax = 2000;// numero di millisecondi (2 seondi)
void setup() {
Serial.begin(9600); //attiva la porta seriale
pinMode(ledPin, INPUT);// mette in ascolto il pin 2
pinMode(rele, OUTPUT);
}
//--------------------------------------------
// loop principale
//--------------------------------------------
void loop()
{
Statoled = digitalRead(ledPin); // legge il led
if (Statoled != Statoled_old) // si verifica se è cambiato
{
Statoled_old = Statoled; // se SI si aggiorna lo stato
if (Statoled == HIGH) // si controlla SE è alto
{
if (Conteggio == 0){ TempoStart = millis();}
Conteggio = Conteggio + 1; // si aggiorna il contatore
Tempo = ( millis() - TempoStart); // si conteggia il tempo trascorso dallo start conteggio
if (Tempo >= TempoMax) // se il tempo trascorso è maggiore o uguale al tempo impostato
// si eseguono i calcoli e la stampa della velocità
{
int deltaTempo = ( Tempo/1000.0); // si trasforma in secondi
//--------------------------------------
// stampa i valori sul monitor
//---------------------------------------
Serial.print("Conteggio = ");
Serial.println(deltaTempo);
Conteggio = 0; // azzeriamo il conteggio per nuova lettura
delay(100);// attesa per altra lettura
}
}
}
if (Statoled == LOW )
{
digitalWrite (rele, HIGH);
}
}
Perchè se Statoled è LOW non mi attiva il relè ?
Perchè probabilmente su quel pin non c'è mai un livello LOW.
Bhe, a livello elettronico si, perchè se tolgo il contatto al led mi va a low
Scusa, ma nel primo post mi era sfuggita la parte del relé, e non capivo cosa cavolo volessi fare :D.
Comunque non si è ancora capito come leggi il led: sei collegato in parallelo? Hai un fotoresistore?
Metti anche uno schema elettrico del progetto.
Lo schema è semplicissimo, ho un Arduino UNO che mi simula il blynk sul 13 .E una MEGA che mi attiva il relè. Allora ho preso il pin 13 di Arduino UNO e lo porto al pin 3 di Arduino Mega, I GND sono Comuni.
L'uscita 4 di Arduino Mega è il relè. Ora quello che voglio e che quando il blynk su Arduino UNO si ferma il relè sulla Mega si attivi.
ARDUINO UNO ARDUINO MEGA
PIN 13---------------------------------> PIN 3
GND ---------------------------------> GND ----------------------------------> GND RELE
PIN 4--------------------------------- > + RELE
Risolto diversamente
int rel = 4;
int pin = 3;
unsigned long duration;
void setup()
{
Serial.begin(9600);
pinMode(pin, INPUT);
pinMode(rel, OUTPUT);
}
void loop()
{
duration = pulseIn(pin, HIGH);
Serial.print(" durata : ");
Serial.println(duration);
millis();
if (duration == 0) {
digitalWrite (rel, HIGH);
}
else
if (duration > 0)
{
digitalWrite (rel, LOW);
}
}
Grazie a tutti.