Se afișează postările cu eticheta millis(). Afișați toate postările
Se afișează postările cu eticheta millis(). Afișați toate postările

duminică, 19 aprilie 2020

Indicare durata apasare buton (apasare scurta sau lunga)

   Anul trecut am postat un articol similar, numit Masurare timpi apasare butoane folosind functia millis().
   In general, pot citi starea unui buton si stiu ca a fost apasat sau nu, dar pentru anumite aplicatii e bine ca sa nu se schimbe ceva daca am apasat din greseala butonul, ci doar daca apas un timp destul de lung, de exemplu 3 secunde.
   Am realizat repede un montaj care are un buton fara retinere (pe breadboard sunt 2 butoane, dar ma folosesc doar de unul) si 2 leduri, fiecare inseriate cu cate o rezistenta de 220ohmi fiecare, pentru limitare curent prin ele si prin pinii microcontrolerului de pe placa.
   Un led galben indica faptul ca butonul este apasat (aprindere stroboscopica, doar pentru efect placut), iar ledul rosu se aprinde doar daca butnul a fost apasat suficient de mult (3 secunde).
   Schema este foarte simpla:
   Din program (pushtime1button.ino) pinul alocat butonului este in starea HIGH, deoarece am activat rezistenta interna de pull-up (de cca 10kOhmi).
   Pentru a fi mai usor de inteles ce am scris mai sus, va recomand vizionarea unuia din cele 2 filmulete:
- cu comentarii in romana
- cu comentarii in engleza:

sâmbătă, 20 aprilie 2019

Intarziere comanda iesire digitala folosind functia millis()

my english article

   Desi am mai prezentat folosirea functiei millis(), de exemplu in articolul Masurare timpi apasare butoane folosind functia millis(), am zis sa scriu acest articolas pentru o aplicatie mai "papabila", accea de a a aprinde un led cand se apasa un buton si acesta sa se stinga doar dupa un anumit timp, prin compararea timpului de cand s-a apasat butonul cu timpul actual. Bineinteles ca nu e un lucru nou, fiind prezenta in mai multe articole e net, unul fiind Using millis() for timing in care s eface aprinderea unui led cu intermitenta (acesta se gaseste si in exemplele din programul Arduino IDE)
    Eu am pus un buton la pinul D3 catre masa (GND) si un led la D4 conectat la masa (printr-o rezistenta de 100-470 ohmi). Am activat rezistenta de pull-up interna (de 10k) pentru a avea intrarea la plus cand butonul nu e apasat.
  Starile sunt, conform schemei logice
urmatoarele:
- sistem in asteptare, led stins
- buton apasat, led stins
- eliberare buton, led-ul se aprinde imediat
- led aprins timpul cat a fost definit
- led stins, in asteptare.
    Programul rescris de mine este delay_button.ino, care face ce am descris mai sus, iar in ecranul de monirtorizare seriala (Serial Monitor) vom vedea starile:
   Am inlocuit butonul cu un sensor de infrarosu, 
care in repaus are iesirea in LOW si cand este activat in HIGH, programul modificat devenind delay_sensor.ino.
in ecranul de monirtorizare seriala (Serial Monitor) vom vedea starile:
   Starile sunt similare:
- repaus, led stins
- detectie miscare, ledulul se aprinde
- led aprins un timp definit 
- iar repaus, ledul fiind stins.
   Pentru senzorii cu logica negativa la iesire, adica in repaus este HIGH, respectiv LOW cand e activ, am modificat programul foarte putin
acesta devenind delay_sensor1.ino.
    Am facut 2 filmulte cu senzorul cu infrarosu;
Intarziere comanda iesire digitala folosind functia millis()
delay off using millis()