nyomógomb RPI-re

Fórumok

Sziaszok.

Egy RPI B-re próbálok felrakni egy buttont, tekintettel arra, hogy az adafruit tft-re szereltek közül egyiket sem sikerült egy év alatt beüzemelni.

a gpio17-re és az egyik GND-re kötöttem rá a gombot, majd lefuttattam ezt:


import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
input_state = GPIO.input(17)
if input_state == False:
print('Button Pressed')
time.sleep(0.2)

sajnálatos módon
sudo python gomb.py
indításával sem megy semmi, pedig kéne egy leírás szerint. (Raspberry Pi Cookbook)

Szerintetek mi lehet a baj?

Hozzászólások

1. Ellenállásokat kötöttél-e be? (szükséges)
2. Kérlek a gombkezekő kódot pastebin-re felrakni (azt, am futtatsz, ne innen másold ki), mert az indentálás hiánya miatt elveszik a lényeg.

1. Ellenállásokat kötöttél-e be? (szükséges)
+1, hatarozottan. az is lehet hogy utana rogton mukodni fog ;]

szerk: lehet hogy megsem kell. ha hardveresen van kapcsolhato es beepitett felhuzo-lehuzo, akkor az is hasznalhato. ha jol latom a kodban, az a PUD_UP az pont felhuzo lenne, ami jo is lehet ide, ha a gnd-vel kotjuk ossze.

A leirasban nem szerepelt ellenallas.

http://cdn.oreillystatic.com/oreilly/booksamplers/9781449365226_sampler…

266.oldal.
Persze lemegyek hidba, ha felreertettem, de szerintem egyertelmu.

"
You will need to run the program as superuser:
pi@raspberrypi ~ $ sudo python switch.py
Button Pressed
Button Pressed
Button Pressed
Button Pressed
"

---
--- A gond akkor van, ha látszólag minden működik. ---
---

A letoltott pdf megjelenitett oldalan a bal also sarkaban levo oldalszam a 266.

Hmm. Erdekes. A pdf fajl viszont 282. oldalon mutatja a 266. oldalt.
Szoval fizikailag 282. oldal a pdf fajlban...

Mashol is megvan ugyanaz:
http://razzpisampler.oreilly.com/ch07.html

---
--- A gond akkor van, ha látszólag minden működik. ---
---

FYI: piface és a hozzáadott library működött nekem out of the box.
Mivel ez nagyrészt az alaplapi busz kivezetése külső csatlakozókra, érdemes megnézni. A nyákterv is letölthető emlékeim szerint.
(vagy az a gertboard?)

gpio18-on a GPS antenna PPS-e van.
Ha a python programot nem a gpio17-en veszem, akkor folyamatos keypressedet nyom ki terminalban, azaz a program fut.
gpio 17-en meg ezek szerint nem...?

---
--- A gond akkor van, ha látszólag minden működik. ---
---

Valtozas.

Talaltam egy oldalt:
https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/buttons_a…

atirtam kicsit az eredeti kodot, meg mindig a gpio 17-en van a gomb.

Ime a modositas:

import RPi.GPIO as GPIO
import time
import os

buttonPin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(buttonPin,GPIO.IN)

while True:
if (GPIO.input(buttonPin)):
print("Button Pressed")
time sleep(0.2)

-------
Szerintetek jol probalkoztam?
Ezzel a sorral nem vagyok tisztaban:
GPIO.setup(buttonPin,GPIO.IN)

Nem tudom miert megy, de fut.
Benyomom a gombot, elengedem, ketszer irja ki a keypressedet, ami nem baj, time sleep(1) atirassal mar szebb.

--------
azt hiszem ez fogja kikapcsolni az adafruit screent, ezzel standby-szeru aramfogyasztasa lesz a ketyeremnek.
A print sor utan kiadom a
os.system(sh kijelzo.sh)
parancsot, ott a kulso script kikapcsolja a kijelzot.

---
--- A gond akkor van, ha látszólag minden működik. ---
---

Szerintem ez nem lesz jó, ha a gomb földeli a gpio-t, akkor a pullup mindenképp kelleni fog, és a False lesz a lenyomott állapot. Ez meg pont fordítva: pulldown ellenállással és vcc-re kötött gombbal menne. Ha külső pullup/pulldown nélkül is ment, az csak szerencse, ez így totálisan kiszámíthatatlan lesz.
Nem lehet, hogy csak annyi a baj, hogy a GPIO.input() nem boolean-t ad vissza?

most mar csak azt nem ertem, hogy a python script az /etc/rc.local fajlba beirva miert nem fut.
Igy irtam be teljes eleresi utvonallal:

python /usr/local/bin/gomb.py

...es nem fut. Vagy fut, de hasztalan.
Terminalbol inditva mar megy, de igy meg nincs ertelme.

---
--- A gond akkor van, ha látszólag minden működik. ---
---

Sanszos, hogy már hardware-esen zöldség, amit csinálsz. Ha lebeg a bemenet a gomb elengedett állapotában, úgy ott bármi lehet. Véletlen működés, nemműködés, gombnyomástól független trigger. De nem szólok bele két oknál fogva: nem ismerem az R-Pi-t, nem tudom, van-e eleve felhúzó ellenállás ott, vagy esetleg olyan, amit programból be lehet kapcsolni. Ha ez utóbbi, akkor ezt kell tenned. Viszont ez mérhető. A másik, hogy egy nyamvadt hardware fejlesztő vagyok, hogy jövök én ahhoz, hogy beleszóljak a komoly programozók életébe. :P

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Rpin csak hobbi dolgokat csináltam, de eddig minden gpio-n, amin kellett működött az eredetileg írt kód elve, szerintem minden gpio-n van a prociban kapcsolható pullup (és azt hiszem pulldown is), olyan 50k körüli ellenállással.
Hogy amit lejjebb írt hogy működhet megbízhatóan azt nem értem, de erre már leírtam a kételyeimet, én nem kötözködök tovább :)

szerintem minden gpio-n van a prociban kapcsolható pullup

Csak én érzem, hogy ennek nem hitbéli kérdésnek kellene lennie, hanem dokumentáción és mérésen alapuló meggyőződésnek?

Vagy ez is úgy van, hogy ha nagyon hiszünk benne, akkor igazzá válik?

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Mondjuk lehet én is csak méréssel ellenőriztem, hogy tényleg felhúzza-e. A raspihoz kicsit nehéz hiteles és tömör dokumentációt találni, nagyon laikusoknak készülnek, sokkal gyakrabban látni breadboard rajzot mint kapcsolásit.
Viszont az SDK-k elég jók, gyorsan ki lehet próbálni az ilyesmit.
De pont ezért én is nehezen értem meg ezt az egyik példa copy-paste-elve nem jó, akkor nézzük meg rögtön a másikat hozzáállást.

Ezt nem ertem.
Hozzaallast ugy ertelmezed, hogy ha valaki olyannal foglalkozik amihez sosem ertett, reszben megis megold valamit, az "rossz hozzaallas"?
Valaszok kozt bevallom volt olyan, amihez vegkepp nem ertek, megsem valaszolok ugy, hogy a tuloldalt hatrahokoljenek.

Sebaj, nem varom hogy vegletekig lealacsonyodva a szintemre barki elmondjon barmit, azonban ha ide valamit leirok hogy "mukodik vegre, de nem tudom miert", az valosagot takar. De mindegy...

---
--- A gond akkor van, ha látszólag minden működik. ---
---

ha ide valamit leirok hogy "mukodik vegre, de nem tudom miert", az valosagot takar.

Engem ez zavar. Annyi ilyen kódot láttam már beágy környezetben, ami az ilyen, "mindegy, működik" hozzáállás miatt áttekinthetetlen és optimalizálhatatlan lett, és egyszerűbb volt újraírni az egészet... Pedig nem vagyok rég a pályán. Nem űrtechnika ez, ha semmiképp nem akarsz doksit olvasni, kikísérletezni se nehéz, hogy mi az a különbség, ami miatt az egyik nem ment, a másik viszont jó.

Próbálok konstruktív lenni, ha a lelkedbe gázoltam ezzel, bocsánat.

Na igen, ha valaki nem érti, mitől működik a szerkezet, az bizony baj, mert lehet, hogy csak a működés látszatát kelti, azaz most éppen, véletlenül működött, de amúgy nem kéne. Mondok példát.

Legyen ez egy kétirányú port felhúzás nélkül. Emberünk azt tapasztalja, ha a kimenetet nagy impedanciás állapotba kapcsolja, akkor nem működik, de ha kifelé hajt, oda statikusan magas szintet küld, hogy, s hogy nem, működik a berendezés. Tehát a programot így hagyja, megoldva, hurrá!

Igen, csak ugye az a baj, hogy a kimeneti meghajtó a felhúzás, tehát a nyomógomb megnyomásakor az rövidzárral van terhelve, aminek következtében a kimeneti meghajtó tönkremehet, ráadásul a nyomógomb megnyomásakor néhány 10 mA-rel a fogyasztás is megnő.

Tehát abból, hogy valami látszólag működik, egy pillanatra sem következik, hogy az valóban működik. A fenti példámban természetesen egy felhúzó ellenállás és a kimenet nagy impedanciás állapotba kapcsolása a helyes megoldás.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Csak a moka kedveert:

(locsemege:)
"Na igen, ha valaki nem érti, mitől működik a szerkezet, az bizony baj, mert lehet, hogy csak a működés látszatát kelti, azaz most éppen, véletlenül működött, de amúgy nem kéne."

bzs alairasa:

"
---
--- A gond akkor van, ha látszólag minden működik. ---
---
"

Pl.: http://hup.hu/node/138290#comment-1830422

bzs, szerintem a kollegak erre utaltak, csak ugy tunik, Te ezt nem akarod elfogadni...

/sza2

nem tudom honnan vetted hogy nem akarok doksit olvasni, hiszen fentebb pont egy doksit ideztem egy pdf-bol meg annak online verziojabol., Kesobb egy masik oldalon kozelebb kerultem a megoldasomhoz.
Ezenkivul mar egy ideje csak errol olvasok, csak tudod nem vagyok mernok, mar nem is lehetek az.

Ez szerintem részletkérdés. Lényeg, hogy ha nem érted, hogy egy kód miért működik/miért nem működik, akkor az elég valószínű, hogy rossz minőségű kód lesz belőle.
A fenti kódváltásodon azért hűltem el, mert nagyon úgy fest, hogy nem egyforma hw-hez készültek, ezt írtam le fenn részletesebben.

Nekem az volt a problémám, hogy mindenképp software-es megoldást kerestél, miközben nem nagyon törődtél azokkal, akik megemlítették a hardware-es feltételeket. Inkább megmagyaráztad azzal, mit olvastál egy leírásban. Aztán felvetődött, rendben van-e a nyomógomb, kiderült, mérted, meg az is, hogy rosszul. Ezt én jeleztem, de nem igazán érintett meg.

Amúgy azért mértél rosszul, mert abból kiderül ugyan, hogy maga a kapcsoló jó-e, épp csak az nem, hogy mi van akkor, ha szakadással zárod le azt a bemenetet. Vajon lebeg, vagy nem? Feszültséget kellett volna mérni, bár az sem feltétlenül lesz jó. Mondjuk jó akkor, ha a műszered belső ellenállása 10 MΩ, de nem lesz jó a mérés, ha ez végtelen.

Megoldás lenne még az, hogy a kapcsoló helyére árammérőt teszel, s megnézed, mekkora áram folyik rajta. Ha néhány 10, néhány 100 μA, akkor jó, ha nem, akkor hiába működik látszólag, az valószínűleg véletlen volt.

Most nem olvasom vissza, de mintha hivatkoztál volna olyasmire, hogy több trigger esemény volt egy gombnyomásra. Ez természetes, hiszen a kapcsoló pereg, a kontaktusok pattognak egymáson az érintkezést követően. Úgy szokás megoldani, hogy IT-ben fut pl. 50 - 100 Hz mintavételezéssel a billentyűzet olvasása. Ha zárt ciklusban gyakran mintavételezel, bizony hibás eredményre jutsz.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Jajj már, mit bonyolítod itt szegénynek, miért lenne végtelen ellenállású voltmétere?

Az esetek 99%-ában jó mérés, ha a gpio-n méred a feszültséget GND-hez képest, futó program mellett. Ha a gomb nincs megnyomva, vcc-t kell mérj, ha megnyomod, 0V-ot. (vagy fordítva, ha a gomb vcc-vel van összekötve és a pulldown resistor van bekapcsolva)

Ha jól látom, nem a pergés a baj, hanem az, hogy lenyomott állapot esetén írogatod, hogy lenyomták. Most is, csak ritkábban. Tárolnod kellene a korábbi állapotot, s ha ahhoz képest a változás olyan irányú, hogy a gombot lenyomták, akkor pressed. Szóval élt, változást nézz, ne szintet, tehát ne statikus állapotot.

Szóval az időzítéssel nem oldottál meg semmit, csak nem veszed észre a hibát, mert mire előjönne, elengeded a gombot.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ezt nem ertem.
Hozzaallast ugy ertelmezed, hogy ha valaki olyannal foglalkozik amihez sosem ertett, reszben megis megold valamit, az "rossz hozzaallas"?
Valaszok kozt bevallom volt olyan, amihez vegkepp nem ertek, megsem valaszolok ugy, hogy a tuloldalt hatrahokoljenek.

Sebaj, nem varom hogy vegletekig lealacsonyodva a szintemre barki elmondjon barmit, azonban ha ide valamit leirok hogy "mukodik vegre, de nem tudom miert", az valosagot takar. De mindegy...

---
--- A gond akkor van, ha látszólag minden működik. ---
---

Helló.

Próbáld ki a WiringPI-t. Én ezzel figyelem a gpio-ra kötött gomb állapotát (script-ből) és tökéletesen teszi a dolgát. Lehet, hogy nálad vmi python gond van ;).

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Mar gondolkodtam rajta, nezegettem korabban is.
Python gondom mar nincs, mint ahogy fentebb irtam, legfeljebb annyi, hogy a nyolc soros prg egyetlen sorat sem ertem, hogyan is fut, de sebaj, kiatkoztak mar emiatt.
Odovel majd rajovok mindenre, a gomb pl. csak fel ev volt.

---
--- A gond akkor van, ha látszólag minden működik. ---
---