Detekce blikání
Napsal: 16 dub 2024, 22:20
Ahoj, začínám s Arduinem a potřeboval bych pomoct s kódem, resp. jeho korekcí. Zadání je celkem jednoduché: sepnout výstup "rele" pokud přijde na vstup "sensor" low signál každých cca. 10s. Pokud nepřijde na vstup sensor low signal více než 10s tak vypnout výstup "rele". Vstup sensor je optický snímač, který detekuje blikání LED diody. Můj pokus o kod je níže, celkem funguje, ale jen cca. 10minut. Pak se Arduino asi zasekne.
Dekuji předem za pomoc. P
Edit: Používej tag code (Tlačítko </>) pro vkládání kódu. Gilhad
Dekuji předem za pomoc. P
Kód: Vybrat vše
int rele = 5; //define rele pin 5
int sensor = 2; //define sensor pin 2
int led = 4; // define led signal ze snimace
unsigned long duration; //doba trvani bliknuti
int stav_led;
void setup() {
interrupts();
pinMode(rele, OUTPUT); //define rela as output
pinMode(led, OUTPUT); //define led as output
pinMode(sensor, INPUT_PULLUP); //define sensor as input s pullup
digitalWrite(rele, HIGH); //vychozi stav rele vypnuto
digitalWrite(led, LOW); //vychozi stav led vypnuto
attachInterrupt(0, blik, CHANGE);
}
void loop() {
duration = pulseIn(sensor, LOW, 10000000); //doba trvani je rovna low impulsu na vstupu sensor, pokud nenastane do 10s, tak vraci 0
if (duration == 0) { //test zda neprisel impuls
digitalWrite(rele, HIGH); //vypni rele
delay(50);
}
else { //jinak zapni rele
digitalWrite(rele, LOW);
delay(50);
}
}
void blik() {
stav_led =! stav_led;
digitalWrite(led, stav_led); //zapni led
}