Arduino kezdő

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 11. szombat, 10:35

Alvóba rakás: ha nem nyúlsz hozzá, timeout.
A kikapcsoláskor a prellt tudod védeni:

Kód: Egész kijelölése

if gomb==nyomva
    wait 50ms
    if gomb == még mindig nyomva
         sleep()


Más: INTre kel fel:

Kód: Egész kijelölése

...
if gomb==nyomva és ebredes <> 1
    wait 50ms
    if gomb == még mindig nyomva
         sleep()
.
.
.
if ebredes = 1
    wait50ms '(prell muljon el)
    ebredes=0
.
.
.

sleepfelkel_INT()
   ebredes=1
   

Elvetemult megoldas:
a felébresztő INT-be berakni az 50 ms várakozást :)

Hardware megoldás: HALL alapú gomb TTL kimenettel - igaz van áramfelvétele :)


Más: SLEEP előtt ha lehet minden bemenet : INPUT és Pullup-ok kikapcsolva.
Órajelet levenni ha kell/lehet normál működés alatt is.
http://www.tavir.hu - a gazda :)

borisz
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 11. szombat, 12:42

Az első vázlatot értem, de ott úgysem csak prell mentesítés lesz, hanem kb 3 mp.-ig nyomva tartott gomb mellett megy alvó módba. A másodikban nem értem a

Kód: Egész kijelölése

if gomb==nyomva és ebredes <> 1
sort.
A <> mit jelent? :D
A másik hogy ébredés előtt ugye nem tud végrehajtani parancsot. Akkor a második vázlatban arra utaltál hogy felébred vár 50ms-ot és ha nincs nyomva akkor megint lefut az sleep? Sajnos nem világos számomra.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 11. szombat, 14:27

<> -> nem egyenlő. Arduinoban: !=

Azaz nézed hogy a gombnyomás ébredés utáni állapot vagy simán nyomott gomb.
http://www.tavir.hu - a gazda :)

vargham
Chipgyilok
Hozzászólások: 274
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: vargham » 2020. január 12. vasárnap, 9:40

Robert írta:Mondjuk a beépítetteket:
https://www.arduino.cc/en/Reference/LowPowerDeepSleep

Mondjuk AVR-hez NINCS beépített low power lib az Arduino-ban.
Hibaüzenet:

Kód: Egész kijelölése

#error The library is not compatible with AVR boards

Forrás:
https://www.arduino.cc/en/Reference/ArduinoLowPower

Az <avr/sleep.h> sem az Arduino, hanem az AVR LibC része.

Tehát vagy a regisztereket piszkálja, ami NEM ajánlott. Vagy az avr sleep-et használja, amit nem kell telepíteni, mert az alap AVR lib (de nem az Arduino) része. Vagy telepít egy könyvtárat, ami az avr sleep C függvényet hívogatja egy C++ interfészen keresztül, bármi plusz szolgáltatás nélkül.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 12. vasárnap, 9:52

http://www.tavir.hu - a gazda :)

vargham
Chipgyilok
Hozzászólások: 274
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: vargham » 2020. január 12. vasárnap, 10:14

Ez jó, mert elsimítja a különféle AVR mikrokontrollerek közötti különbségeket. :-)

borisz
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 12. vasárnap, 11:27

Sziasztok. Megint lenne egy kérdésem. Mint meg tudtam regiszter= _BV(x) makróval lehet egy regiszter bizonyos bitjét módosítani. Van olyan is amivel egy regiszter valamelyik bitjét lehet kiolvasni?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 12. vasárnap, 13:03

regiszter and 0b00000001 -> utolsó jegy 0 v. 1 a többi 0 lesz.
Logikai AND utasítás.

Kód: Egész kijelölése

If (regiszter and 0b00000001) == 1 igaz else hamis
http://www.tavir.hu - a gazda :)


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég