Stránka 2 z 3

Re: Impulz po stisku tlačítka

Napsal: 30 bře 2022, 15:14
od ondraN
Jaká je hodnota rezistoru mezi 5V a kolektorem PC814?

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 00:35
od gilhad

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
}

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 12:23
od Ludek
Ondro, na tom odporu nijak nezáleží, je to jen místo Pullup, myslím, že tam je 8K2
Gilhad - díky, vypadá to profi... vyzkouším, dám vědět.
díky všem

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 12:40
od ondraN
No, kdybys připájel na ten optočlen 20M kondenzátor, plus na kolektor, mínus na emitor tranzistoru v OC, tak ti to vyfiltruje ty impulzy, na které jsi si stěžoval :mrgreen:
Pak tam budeš mít L při stisku tlačítka (po celou dobu stisku) bez zákmitů a jiných neplech. Kondenzátor můžeš naletovat přímo na vývody OC, bez nějakých změn na DPS.

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 12:42
od kiRRow
Na tom odporu velmi záleží, on ten optočlen má nějaký omezený proud, který jim může protékat ... a taky nějaký proud který jim musí protékat. Právě toto ten odpor dělá. Není to žádný pullup, ale omezovací odpor aby ti ten optočlen po připojení nevybouchnul do úsměvu.

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 13:20
od Ludek
pro gilhad
nějak jsem nenašel chybu v tom while :-(
Error.jpg

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 13:33
od kiRRow

Kód: Vybrat vše

  do {
  ...
  ...
  } while ...
lepší je tam mít ty složené závorky ... pro jeden příkaz to jde bez, ale pro více je třeba označit těma závorkama "blok" programu

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 13:38
od Ludek
:-)
dík

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 13:46
od kiRRow
doufám, že máš aspoň papíry na to hrabat se někomu v elektroinstalaci domu

Re: Impulz po stisku tlačítka

Napsal: 31 bře 2022, 13:52
od Ludek
No Ty máš ale starosti... můj obor je nn a neboj mám vyhl.50 :-)
gilhad - ŠLAPE TO !!!! díky