Re: Impulz po stisku tlačítka
Napsal: 30 bře 2022, 15:14
Jaká je hodnota rezistoru mezi 5V a kolektorem PC814?
České fórum pro všechny nadšence do Arduina a dalších technologií.
https://forum.hwkitchen.cz/
Kód: Vybrat vše
// uvodni nastaveni
unsigned long Interval_LED = 500; // ms (unsigned long je typ pro cas (millis), pokud je u tebe jiny, pouzij ten spravny)
unsigned long Interval_pulz = 20; // ms - maximalni cas mezi pulzy, nez zacnes brat, ze skoncily
int pin_LED = 13 ; // nebo kde to mas (HIGH=sviti)
int pin_TL = 5 ;// nebo kde je tlacitko/optoclen (LOW=stisknuto)
// promenne (klidne by mohly byt v loop, ale tady je to IMHO prehlednejsi)
int Tlacitko_Pred; // minuly stav - HIGH je rozepnuto, LOW je sepnuto
int Tlacitko_Ted; // aktualni stav
unsigned long currentMillis; // aktualni millis
unsigned long beginMillis; // millis, kdyz zacal bezet cyklus
// setup
void setup() {
pinMode(pin_LED, OUTPUT);
digitalWrite(pin_LED, LOW); // explicitni zhasnuti, asi neni nutne
pinMode(button_B, INPUT_PULLUP); // nebo jen INPUT kdyz tam mas externi pullup
}
// smycka
void loop(){
// - čekej na začátek pulzu
do
Tlacitko_Ted = digitalRead(pin_TL);
while (Tlacitko_TED == HIGH ); // dokud neni tlacitko stisknute tak to cti znovu
// rozsviť LEDku
digitalWrite(pin_LED, HIGH);
// spusť časovač na 500ms,
beginMillis=millis(); // zacneme TED
do
currentMillis=millis();
while ((currentMillis-beginMillis) <= Interval_LED);
// až doběhne zhasni LEDku
digitalWrite(pin_LED, LOW);
// nacteme si stav tlacitka
Tlacitko_TED = digitalRead(pin_TL);
// spusť časovač na 10ms (nebo víc),
beginMillis = millis(); // zacneme TED
do
currentMillis = millis();
// zajima nas zacatek pulzu
Tlacitko_PRED = Tlacitko_TED;
Tlacitko_TED = digitalRead(pin_TL);
if ( Tlacitko_TED == LOW ) { // pulz trva
beginMillis = currentMillis; // resetujeme zacatek casovace na TED
};
if ( (Tlacitko_TED == HIGH) && (Tlacitko_PRED == LOW ) ) { // pulz prave skoncil
beginMillis = currentMillis; // resetujeme zacatek casovace na TED
};
while ((currentMillis-beginMillis) <= Interval_pulz); // Test, zda uz od KONCE posledniho pulzu neubehl prislusny interval
// To celé nech běžet v nekonečné smyčce - třeba loop() - coz jsme prave udelali
}
Kód: Vybrat vše
do {
...
...
} while ...