60 nap alatt Arduino #10 - Prell
60 nap alatt Arduino #10 - Prell
Helló! Bocsi nem az előző hozzászóláshoz írnék választ, egy új kérdés merült fel bennem csak nem akartam új témát nyitni.
Nyomógomb kezeléssel kapcsolatosan az előző e-mailban az alábbi résszel kapcsolatosan vannak bizonytalanságaim:
Prell: Legegyszerűbb, ha megvizsgáljuk a gombnyomás megtörténtét, majd a prellegés végeztével ellenőrizzük, hogy a gomb megnyomott állapotban van-e. Ha mindkét - egymás utáni - feltétel igaz, akkor biztosak lehetünk a gomb megnyomott állapotában. Ezt programban egyszerűen megvalósíthatjuk:
if (digitalRead(pin) == HIGH) {
delay (5);
if (digitalRead(pin) == HIGH) {
utasítások;
}
}
http://tavir.hu/tavir/files/download/2/nyomogomb.jpg
na most előző ismeretekből, ha a gomb meg van nyomva akkor 0(LOW) jelzést ad, avr lábát lehúzza GND-re. Illetve találtam ennek a fordított állapotát(erre vonatkozhat a kód rész) is de akkor a Pull-up ellenállás gondolom mindenképp kikapcsolva van!
A kód rész szerint ha a gomb nincs megnyomva várakozik(5) majd belép a 2. if-be majd az utasításba.
valaki remélem letisztázza, hogy akkor melyik tematika szerint fogjuk használni a kapcsolót. (eddigi "fejlesztéseim" során a kapcsoló kapcsolt állapota 0(LOW) volt).
üdvözlettel: Richárd
Nyomógomb kezeléssel kapcsolatosan az előző e-mailban az alábbi résszel kapcsolatosan vannak bizonytalanságaim:
Prell: Legegyszerűbb, ha megvizsgáljuk a gombnyomás megtörténtét, majd a prellegés végeztével ellenőrizzük, hogy a gomb megnyomott állapotban van-e. Ha mindkét - egymás utáni - feltétel igaz, akkor biztosak lehetünk a gomb megnyomott állapotában. Ezt programban egyszerűen megvalósíthatjuk:
if (digitalRead(pin) == HIGH) {
delay (5);
if (digitalRead(pin) == HIGH) {
utasítások;
}
}
http://tavir.hu/tavir/files/download/2/nyomogomb.jpg
na most előző ismeretekből, ha a gomb meg van nyomva akkor 0(LOW) jelzést ad, avr lábát lehúzza GND-re. Illetve találtam ennek a fordított állapotát(erre vonatkozhat a kód rész) is de akkor a Pull-up ellenállás gondolom mindenképp kikapcsolva van!
A kód rész szerint ha a gomb nincs megnyomva várakozik(5) majd belép a 2. if-be majd az utasításba.
valaki remélem letisztázza, hogy akkor melyik tematika szerint fogjuk használni a kapcsolót. (eddigi "fejlesztéseim" során a kapcsoló kapcsolt állapota 0(LOW) volt).
üdvözlettel: Richárd
Ops. Itt némi pontatlanság van akkor.
A nyomógombot két féleképp köthetem be:
+5V -- gomb -- láb -- ellenállás -- GND
Itt a megnyomott állapotban a láb HIGH állapotban van.
GND -- gomb -- láb -- ellenállás -- +5V
Itt a megnyomott állapotban a láb LOW állapotban van.
Igy a megnyomott állapotot kell vizsgálni...
A nyomógombot két féleképp köthetem be:
+5V -- gomb -- láb -- ellenállás -- GND
Itt a megnyomott állapotban a láb HIGH állapotban van.
GND -- gomb -- láb -- ellenállás -- +5V
Itt a megnyomott állapotban a láb LOW állapotban van.
Igy a megnyomott állapotot kell vizsgálni...
talan ide passzol a kerdesem...
szoval megjott a #9 lecke, es a nyomogomb
ezzel kapcsolatban tobb kerdes is felmerult a total amator fejemben:
1) az addig ok, hogy kossem be a kapcsolo ket veget, de melyik kettot? :S a kezdocsomagban levo ket kapcsolonak osszesen annyi laba van mint egy poknak szoval a negy lab kozul melyiket hova kossem? vagy mindegy, ha megnyomom akkor 'minden mindennel' ossze lesz zarva?
2) a bemeneti labak milyen jelszintet tudnak kezelni? ha 0-5V, akkor nem csinalhatom meg azt, hogy siman rakotom a kapcsolot az 5V es az input lab koze, ellenallas es egyebek nelkul?
szoval megjott a #9 lecke, es a nyomogomb
ezzel kapcsolatban tobb kerdes is felmerult a total amator fejemben:
1) az addig ok, hogy kossem be a kapcsolo ket veget, de melyik kettot? :S a kezdocsomagban levo ket kapcsolonak osszesen annyi laba van mint egy poknak szoval a negy lab kozul melyiket hova kossem? vagy mindegy, ha megnyomom akkor 'minden mindennel' ossze lesz zarva?
2) a bemeneti labak milyen jelszintet tudnak kezelni? ha 0-5V, akkor nem csinalhatom meg azt, hogy siman rakotom a kapcsolot az 5V es az input lab koze, ellenallas es egyebek nelkul?
A kapcsoló 2-2 lába össze van kötve belül:)
"Ha nem látszana a kép, akkor: a kapcsoló egyik fele a GND-re, a másik fele az Arduino egyik lábára megy. És innen egy opcionális 4.7 kohm ellenállás megy az +5 V-ra. A LED pedig a standard soros ellenálláson át van bekötve.
Így a kapcsoló zárt állapotában a bemeneti lábon 0 V, míg nyitott állapot esetén - ellenállás nélkül - közel lebegő állapotban van. A valóság azonban, hogy nyitott állapotban antennaként a környezeti zajt összeszedi és meghatározhatatlan potenciálra kerül a kivezetés. Ezt kivédendő a chipen belüli belső ellenállást bekapcsoljuk, vagy külső felhúzó-ellenállást használunk."
Bemeneti láb meneti szintje (-0.7V...+5.7V).
Gondold végig a kérdés második felét _valós_ HW esetén.
Kérdés: a levegőben lógó dróton milyen feszültség mérhető?
"Ha nem látszana a kép, akkor: a kapcsoló egyik fele a GND-re, a másik fele az Arduino egyik lábára megy. És innen egy opcionális 4.7 kohm ellenállás megy az +5 V-ra. A LED pedig a standard soros ellenálláson át van bekötve.
Így a kapcsoló zárt állapotában a bemeneti lábon 0 V, míg nyitott állapot esetén - ellenállás nélkül - közel lebegő állapotban van. A valóság azonban, hogy nyitott állapotban antennaként a környezeti zajt összeszedi és meghatározhatatlan potenciálra kerül a kivezetés. Ezt kivédendő a chipen belüli belső ellenállást bekapcsoljuk, vagy külső felhúzó-ellenállást használunk."
Bemeneti láb meneti szintje (-0.7V...+5.7V).
Gondold végig a kérdés második felét _valós_ HW esetén.
Kérdés: a levegőben lógó dróton milyen feszültség mérhető?
es melyik ketto? azt akkor ertem hogy parban vannak, de melyik melyikkel?Robert írta:A kapcsoló 2-2 lába össze van kötve belül:)
van ugye egy hosszukasabb meg egy rovidebb oldala, nekem az tunne talan logikusnak, hogy a rovidebb oldalakon levo kapcsolok vannak egymassal osszekotve, bar aztan ki tudja
hat gondolom semmilyen, vagyis 0, nem?Gondold végig a kérdés második felét _valós_ HW esetén.
Kérdés: a levegőben lógó dróton milyen feszültség mérhető?
pont ezert gondoltam arra, hogy ha az 5V-ot rakotom a bemenetre a kapcsoloval, akkor ott 5V lesz, ha meg nyitva van a kapcsolo, akkor nincs is aramkor, igy feszultseg sem, tehat 0
tuti hogy valahol hiba van a gondolatmenetemben, de hol?
A 0 az a GND - az ideális rendszerben.
AZ NEM MÉRHETŐ.
Ha nyitva a kapcsoiló, akkor lebeg!
Ha van egy multimétered. Tedd mV mérésbe.
Egyik felét kössed GNDre.
Másikat fogd meg (antenna leszel). Kis feszültség van rajtad így már. Ez a CMOS nagy bemenő ellenállása során 2-3V is lehet!
A logikai 0 szint: 0-1.2V, Logikai 1: 3.0..5V.
A köztes az értelmezhetetlen!
Hangkártya bemenet megmarkolása 50Hz zúgás. A minek számít?
A 0 nemegyenlő a GND-vel!
A nálad a 0 - a bizonytalan bármit jelenti....
AZ NEM MÉRHETŐ.
Ha nyitva a kapcsoiló, akkor lebeg!
Ha van egy multimétered. Tedd mV mérésbe.
Egyik felét kössed GNDre.
Másikat fogd meg (antenna leszel). Kis feszültség van rajtad így már. Ez a CMOS nagy bemenő ellenállása során 2-3V is lehet!
A logikai 0 szint: 0-1.2V, Logikai 1: 3.0..5V.
A köztes az értelmezhetetlen!
Hangkártya bemenet megmarkolása 50Hz zúgás. A minek számít?
A 0 nemegyenlő a GND-vel!
A nálad a 0 - a bizonytalan bármit jelenti....
igy mar ertem, koszi, es egyben azt is megtudtam mi az a 'lebeges'Robert írta:A 0 az a GND - az ideális rendszerben.
AZ NEM MÉRHETŐ.
Ha nyitva a kapcsoiló, akkor lebeg!
Ha van egy multimétered. Tedd mV mérésbe.
Egyik felét kössed GNDre.
Másikat fogd meg (antenna leszel). Kis feszültség van rajtad így már. Ez a CMOS nagy bemenő ellenállása során 2-3V is lehet!
A logikai 0 szint: 0-1.2V, Logikai 1: 3.0..5V.
A köztes az értelmezhetetlen!
Hangkártya bemenet megmarkolása 50Hz zúgás. A minek számít?
A 0 nemegyenlő a GND-vel!
A nálad a 0 - a bizonytalan bármit jelenti....
prell
Szevasztok!
A 10. feladatban közölt program a LED-et kapcsolja ki-be minden gombnyomásra.
iÍrtam egy programrészt ami - szerintem - ugyanezt csinálja. Ki kellene próbálni. Előre is köszi.
A 10. feladatban közölt program a LED-et kapcsolja ki-be minden gombnyomásra.
iÍrtam egy programrészt ami - szerintem - ugyanezt csinálja. Ki kellene próbálni. Előre is köszi.
/* Nyomogomb - antiprell - IF
Demonstracios program
60 nap alatt arduino tanfolyam része
*/
void setup(){
pinMode(6, INPUT); // Input switch
pinMode(7, OUTPUT); // Output LED
digitalWrite(6, HIGH); //Pull-up
}
int k=1;
void loop() {
if (digitalRead(6) == LOW) {
delay (5);
if (digitalRead(6) == LOW) {
delay(900);
if ( k==1 )
{
digitalWrite(7,HIGH);
}
else
{
digitalWrite(7,LOW) ;
}
k != k;
}
}
}
Re: prell
Szia!gyulus2md írta:Szevasztok!
A 10. feladatban közölt program a LED-et kapcsolja ki-be minden gombnyomásra.
iÍrtam egy programrészt ami - szerintem - ugyanezt csinálja. Ki kellene próbálni. Előre is köszi.
/* Nyomogomb - antiprell - IF
Demonstracios program
60 nap alatt arduino tanfolyam része
*/
void setup(){
pinMode(6, INPUT); // Input switch
pinMode(7, OUTPUT); // Output LED
digitalWrite(6, HIGH); //Pull-up
}
int k=1;
void loop() {
if (digitalRead(6) == LOW) {
delay (5);
if (digitalRead(6) == LOW) {
delay(900);
if ( k==1 )
{
digitalWrite(7,HIGH);
}
else
{
digitalWrite(7,LOW) ;
}
k != k;
}
}
}
Ránézésre nem rossz a kód, viszont "k" változó negálásával van egy kis probléma:
Az általad írt:
Kód: Egész kijelölése
k != k;
Tehát " !=" egy logikai operátor, melyeknek feltételvizsgálatkor (feltételes elágazásban, vagy ciklus kilépés/bentmaradás vizsgálatkor) van értelme.
Negálásra C-ben a kövtkező módszerek/operátorok alkalmazhatók:
Kód: Egész kijelölése
k = !k; //k legyen egyenlő k negált értékével
k = -k; //k legyen egyenlő k negatív értékével
k *= -1; //k-t szorozzuk -1-gyel
k = 0-k; //0-ból kivonjuk k-t
NorMen
[/code]
[/b][/code]
Re: prell
Gyorsan javítom magam, mielőtt más tenné azt megnormen írta: Negálásra C-ben a kövtkező módszerek/operátorok alkalmazhatók:Kód: Egész kijelölése
k = !k; //k legyen egyenlő k negált értékével k = -k; //k legyen egyenlő k negatív értékével k *= -1; //k-t szorozzuk -1-gyel k = 0-k; //0-ból kivonjuk k-t
Szóval negálásra csak a
Kód: Egész kijelölése
k = !k;
De mivel a kódban szereplő if elágazás feltételében azt vizsgáljuk, hogy k értéke 1, ezért bármelyik fentebb írt ( nem negáló) művelet is alkalmazható.
Üdv.
NorMen[/b]
prell
Szevasztok! normen, glezmen!
Igen, teljesen igazatok van. Összehasonlító műveletet végeztem az értékadás helyett. Ezért köszönöm a figyelem felhívást. C- nyelvet nem ismerve, rosszul néztem ki az utasítást az -arduino-referenc- ből.
k = !k - negálást tartom jobbnak.
73!
gyulus2md
Igen, teljesen igazatok van. Összehasonlító műveletet végeztem az értékadás helyett. Ezért köszönöm a figyelem felhívást. C- nyelvet nem ismerve, rosszul néztem ki az utasítást az -arduino-referenc- ből.
k = !k - negálást tartom jobbnak.
73!
gyulus2md
prell
Szevasztok!
A programot javítottam.
Még így is több mint 30 byte a megtakarítás a külön ki-be kapcsoláshoz.
A programot javítottam.
Még így is több mint 30 byte a megtakarítás a külön ki-be kapcsoláshoz.
/* Nyomogomb - antiprell - IF
Demonstracios program
60 nap alatt arduino tanfolyam része
*/
void setup(){
pinMode(6, INPUT); // Input switch
pinMode(7, OUTPUT); // Output LED
digitalWrite(6, HIGH); //Pull-up
}
int k=1;
void loop() {
if (digitalRead(6) == LOW) {
delay (5);
if (digitalRead(6) == LOW) {
delay(900);
if ( k==1 )
{
digitalWrite(7,HIGH);
}
else
{
digitalWrite(7,LOW) ;
}
k = !k;
}
}
}
Re: prell
Ha a negálást választod, akkor szebben nézne ki az if feltétel így:gyulus2md írta:Szevasztok! normen, glezmen!
Igen, teljesen igazatok van. Összehasonlító műveletet végeztem az értékadás helyett. Ezért köszönöm a figyelem felhívást. C- nyelvet nem ismerve, rosszul néztem ki az utasítást az -arduino-referenc- ből.
k = !k - negálást tartom jobbnak.
73!
gyulus2md
Kód: Egész kijelölése
if (k) { //k értéke nem nulla
....
} else { //k értéke 0
....
}
De ez már tényleg csak szépségkérdés, amúgy teljesen jól működik a kód...