|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Čet Dec 21, 2023 6:24 pm Naslov sporočila: LDR modul && Arduino |
|
|
Hi
Imam LDR modul s katerim bi rad čital kolikokrat se prižge LED.
Foto upor bi vstavil v tulec nad LED, da ne bi bilo motenj.
Spodnja koda pa šteje toliko časa dokler je prižgana LED.
Jaz pa bi rad čital samo vsak vklop tako da stari vrednosti prišteje 1.
Kaj bi moral dodati v kodo, probal sem z zastavicami pa mi ni uspelo?
lp,
Koda: |
int Pulz;
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2), ISR_meritev, RISING);
}
void loop() {
Serial.print("Stevilo pulzov: ");
Serial.println(Pulz);
delay(1000);
}
void ISR_meritev() {
Pulz++;
}
|
|
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Čet Dec 21, 2023 8:43 pm Naslov sporočila: |
|
|
Zakaj meni v pol sekunde našteje okrog 200 pulzov?
Če gledamo ta RISING v prekinitveni rutini, bi moral zapisati samo eno spremembo in to takrat ko gre signal iz nizkega na visok.
Kje delam napako?
|
|
Nazaj na vrh |
|
|
dkone Član
Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2105 Aktiv.: 10.08 Kraj: Krško
|
Objavljeno: Čet Dec 21, 2023 9:04 pm Naslov sporočila: |
|
|
Koliko pogosto se ti ledica prižge?
Ena rešitev bi bila takšna spodaj, ki jo ponavadi uporabljam(Brez interrupta):
Koda: |
#define DI0 2 //kanal DI0
bool b_DI0_State = false;
unsigned long DI0_LastTimeChange = micros()/1000;
int int_NextChange = 300;
if (digitalRead(DI0) == HIGH && b_DI0_State == false && (micros()/1000 - DI0_LastTimeChange) > int_NextChange) {
Serial.println("IN0");
b_DI0_State = true;
DI0_LastTimeChange = micros()/1000;
}
else if (digitalRead(DI0) == LOW && b_DI0_State == true && (micros()/1000 - DI0_LastTimeChange) > int_NextChange) {
//Serial.println("IN0_OFF");
b_DI0_State = false;
DI0_LastTimeChange = micros()/1000;
}
|
Vedno gledam prejšnjo stanje, naredim še debouncing in nato ukrepam, ko res pritisnem tipko ali spustim. Torej prehod iz 0 v 1 ali iz 1 v 0. Zgornji primer prikazuje akcijo v obeh frontah. Serial.println uporabljam samo za debug. To se ne izvaja v prekinitveni rutini ampak v Loop-u.
PS: Zgornja koda je za Controllino, tako da imena vhodov je vzeta iz njihove knjižnice.
_________________ Denis |
|
Nazaj na vrh |
|
|
robert Član
Pridružen-a: Sob 29 Maj 2004 21:48 Prispevkov: 1872 Aktiv.: 8.39 Kraj: Tolmin
|
Objavljeno: Čet Dec 21, 2023 10:31 pm Naslov sporočila: |
|
|
marko11 je napisal/a: |
Zakaj meni v pol sekunde našteje okrog 200 pulzov?
|
Morda LED zelo hitro utripa ? Čeprav 50Hz tvoja motnja ni ampak se morda kaj inducira na dovodnemu kablu med LDR in Arduino vhodom.
Kaj bi sploh rad meril ? Predvidevam da elektro števec.
_________________ LP Robert |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Čet Dec 21, 2023 11:02 pm Naslov sporočila: |
|
|
robert je napisal/a: |
marko11 je napisal/a: |
Zakaj meni v pol sekunde našteje okrog 200 pulzov?
|
Morda LED zelo hitro utripa ? Čeprav 50Hz tvoja motnja ni ampak se morda kaj inducira na dovodnemu kablu med LDR in Arduino vhodom.
Kaj bi sploh rad meril ? Predvidevam da elektro števec. |
Dobro predvidevaš, el.števec.
Dioda naj ne bi utripala, ker jo prižigam z Nano Arduinom
|
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Pet Dec 22, 2023 6:34 pm Naslov sporočila: |
|
|
Našel napako.
Sam LDR modul dela neke motnje, tako da je na izhodu toliko nekih špic, zato Arduino našteje toliko pulzov 200 ali več kot jih zazna.
Mogoče bi moral na izhod dodati kak filter?
Spodaj je slika modula.
Opis: |
|
Velikost datoteke: |
24.95 KB |
Pogledana: |
1 krat |
|
|
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.51 Kraj: Ljubljana
|
Objavljeno: Pet Dec 22, 2023 6:46 pm Naslov sporočila: |
|
|
Marko,
na modulu imaš trimer z katerim moraš nastaviti nivo proženja.
Obračaj trimer da ledica na izhodu modula ugasne, potem daj pred LDR tvojo led in poskusi nastaviti da ti se LED na izhodu modula prižge samo ko tvoja LED sveti.
Še bolj bi bilo da so nodul in tvoja LED v kakšni cevi da nimaš vpliva zunanje svetlobe.
|
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Pet Dec 22, 2023 6:56 pm Naslov sporočila: |
|
|
Vlado je napisal/a: |
Marko,
na modulu imaš trimer z katerim moraš nastaviti nivo proženja.
Obračaj trimer da ledica na izhodu modula ugasne, potem daj pred LDR tvojo led in poskusi nastaviti da ti se LED na izhodu modula prižge samo ko tvoja LED sveti.
Še bolj bi bilo da so nodul in tvoja LED v kakšni cevi da nimaš vpliva zunanje svetlobe. |
Vse to sem napravil, pa ne deluje pravilno....
|
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.51 Kraj: Ljubljana
|
Objavljeno: Pet Dec 22, 2023 7:02 pm Naslov sporočila: |
|
|
Marko,
koliko so dolge povezave med modulom in Arduino-tom.
Če imaš daljše povezave, daj 10uF na napajanje modula.
Povej še ali ti LED na izhodu modula utripa, ali se normalno prižga v ritmu tvoje LED-ice.
|
|
Nazaj na vrh |
|
|
robert Član
Pridružen-a: Sob 29 Maj 2004 21:48 Prispevkov: 1872 Aktiv.: 8.39 Kraj: Tolmin
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 79 dni
Powered by phpBB © 2001, 2005 phpBB Group
|