60 nap alatt Arduino #10 - Prell
-
- Újonc
- Hozzászólások: 7
- Csatlakozott: 2014. március 18. kedd, 10:27
Re: 60 nap alatt Arduino #10 - Prell
Köszönöm a segítséget tovább dolgozok rajta:-)
Re: 60 nap alatt Arduino #10 - Prell
Sziasztok
Elakadtam a nyomógombos leckénél.
Szerettem volna átírni, hogy alaphelyzetben ne történjen semmi, de gombnyomásra kezdjen villogni a LED.
Viszont nem értem a program működését. Melyik rész a lassú, melyik a gyors villogás. Mikor kell a blokkokat elválasztani?
void setup(){
pinMode(6, INPUT);
// D6 bemenet - kapcsolo
pinMode(7, OUTPUT);
// D7 kimenet - LED
digitalWrite(6, HIGH);
//D6 belso felhuzo
}
void loop() {
if (digitalRead(6) == HIGH) {
//nyomogomb nem nyomott
delay(900);
//900 msec szunet
}
delay (100);
// 100 msec varakozas
digitalWrite(7, HIGH);
//LED bekapcsol
if (digitalRead(6) == HIGH) {
//nyomogomb nem nyomott
delay(900);
//900 msec varakozas
}
delay (100);
//100 msec varakozas
digitalWrite(7, LOW);
//LED kikapcsol
}
Ez az alapprogram, ami váltja a gyors - lassú villogást a gombnyomásra.
Elakadtam a nyomógombos leckénél.
Szerettem volna átírni, hogy alaphelyzetben ne történjen semmi, de gombnyomásra kezdjen villogni a LED.
Viszont nem értem a program működését. Melyik rész a lassú, melyik a gyors villogás. Mikor kell a blokkokat elválasztani?
void setup(){
pinMode(6, INPUT);
// D6 bemenet - kapcsolo
pinMode(7, OUTPUT);
// D7 kimenet - LED
digitalWrite(6, HIGH);
//D6 belso felhuzo
}
void loop() {
if (digitalRead(6) == HIGH) {
//nyomogomb nem nyomott
delay(900);
//900 msec szunet
}
delay (100);
// 100 msec varakozas
digitalWrite(7, HIGH);
//LED bekapcsol
if (digitalRead(6) == HIGH) {
//nyomogomb nem nyomott
delay(900);
//900 msec varakozas
}
delay (100);
//100 msec varakozas
digitalWrite(7, LOW);
//LED kikapcsol
}
Ez az alapprogram, ami váltja a gyors - lassú villogást a gombnyomásra.
Re: 60 nap alatt Arduino #10 - Prell
Rajzolj egy folyamatábrát...
Start
.
.
do
ha Gomb=nyomva {
led HIGH;
var;
LED LOW;
Var;
}
else
{
var;
}
loop
Valami ilyesmi lesz...
Start
.
.
do
ha Gomb=nyomva {
led HIGH;
var;
LED LOW;
Var;
}
else
{
var;
}
loop
Valami ilyesmi lesz...
Re: 60 nap alatt Arduino #10 - Prell
Köszönöm a választ. Nemsokára megyek zenélni, de holnap ha kihevertem magam, nekilátok újra.
Re: 60 nap alatt Arduino #10 - Prell
Csak egy javaslat: A nyomógomb prell kérdés pontosabb megértéséhez egy olyasfajta feladat kéne, hogy minden második vagy harmadik megnyomásra váltson a LED villogás sebességet. Ekkor tényleg érzékelni kell a prell-t, különben összevissza fog villogni a program. Ehhez viszont változókat kell kezelni, ami gondolom csak később jön. A prell tárgyalását ez utánra javasolnám tenni.
Re: 60 nap alatt Arduino #10 - Prell
Sziasztok!
A következő problémát kellene megoldanom: tárolom el a kilohertz nagyságrenddel mintavételezett analóg jelet SD-re, és közben egy nyomógombot kellene figyelni, amelynek megnyomásakor a fájlba egy speciális sor kerülne (tulajdonképpen eseményjelzés). A prell itt is gondot okoz ugye, de ha várok 5 ms-t, akkor ott kihagyás van a jelrögzítésben. Erre tudnátok valami szoftveres megoldást, vagy hardveresen a legegyszerűbb, egy kondenzátort a kapcsolóval párhuzamosan kötni, és az RC-tag időállandójára hagyjam a kérdés megoldását? (Az esemény jelzésének pontossága nem gond, elég, ha körülbelül abban a másodpercben bekerül a marker a fájlba)
A következő problémát kellene megoldanom: tárolom el a kilohertz nagyságrenddel mintavételezett analóg jelet SD-re, és közben egy nyomógombot kellene figyelni, amelynek megnyomásakor a fájlba egy speciális sor kerülne (tulajdonképpen eseményjelzés). A prell itt is gondot okoz ugye, de ha várok 5 ms-t, akkor ott kihagyás van a jelrögzítésben. Erre tudnátok valami szoftveres megoldást, vagy hardveresen a legegyszerűbb, egy kondenzátort a kapcsolóval párhuzamosan kötni, és az RC-tag időállandójára hagyjam a kérdés megoldását? (Az esemény jelzésének pontossága nem gond, elég, ha körülbelül abban a másodpercben bekerül a marker a fájlba)
-
- DrótVégénSzéndarab
- Hozzászólások: 25
- Csatlakozott: 2015. május 19. kedd, 0:37
Re: 60 nap alatt Arduino #10 - Prell
Tisztelt Urak!
Hasonló időzítési probléma miatt tenném ki az elakadásjelző háromszöget.
Teljesen kezdő vagyok.Ha rossz helyre írtam ilyesmi kérlek jelezzétek
Egy "gépkocsi index" vagy ha úgy tetszik "timelapse intervallum" időzítést szeretnék kódolni, de nikt gút még.
Amit próbáltam/szeretnék >> hogy "B" gombnyomására(kvázi On gomb) induljon egy ledvillogás/kamera INTERVALLUM exponálás (természetesen ismétlődve) majd megint "B megnyomására hagyja abba (kvázi off gomb)
Vagy be tudom kapcsolni, de akkor úgy marad (loopban ragad a függvény) és nem tudom off ba állítani.
Vagy csak a gomb nyomva tartásáig villog
Ilyesmi(ke)t próbáltam>> számos variációban... lehet hogy csak egy zárójelet teszek rossz helyre, de lehet az elv is rossz ?!?!
unsigned long onTime;
int onOff =0;
int intervalum = 5000;
void setup()
{
onTime = millis();
pinMode(13, OUTPUT); //ellenőrző led
pinMode(A0, INPUT); //LCD Keypad A0-ás bemenet
digitalWrite(A0, HIGH); //Bemenet belső felhúzó bekapcs
}
void loop() {
lcd.setCursor(8,0);
lcd.print(millis()/1000);
int x;
x = analogRead (0);
// reading = onOff;
if (x < 40 && onOff==0) { // Mondjuk ez a B gomb megnyomása és bekapcs
onOff=1;
delay(300);
}
else if (x < 40 && onOff==1) { // Mondjuk ez a B gomb megnyomása és kikapcs
onOff=0;
delay(300);
}
if (onOff==1) { //Ez meg volna az időzítés a villogasra, ami mukodik is szepen ha onmagaban van fenti ki/be nélkül
digitalWrite(13, HIGH); // LED bekapcs
onTime = millis();
}
if(millis() - onTime > intervalum)
{
digitalWrite(13, LOW); // LED kikapcs
}
}
Minden segítséget köszönök szépen!
Hasonló időzítési probléma miatt tenném ki az elakadásjelző háromszöget.
Teljesen kezdő vagyok.Ha rossz helyre írtam ilyesmi kérlek jelezzétek
Egy "gépkocsi index" vagy ha úgy tetszik "timelapse intervallum" időzítést szeretnék kódolni, de nikt gút még.
Amit próbáltam/szeretnék >> hogy "B" gombnyomására(kvázi On gomb) induljon egy ledvillogás/kamera INTERVALLUM exponálás (természetesen ismétlődve) majd megint "B megnyomására hagyja abba (kvázi off gomb)
Vagy be tudom kapcsolni, de akkor úgy marad (loopban ragad a függvény) és nem tudom off ba állítani.
Vagy csak a gomb nyomva tartásáig villog
Ilyesmi(ke)t próbáltam>> számos variációban... lehet hogy csak egy zárójelet teszek rossz helyre, de lehet az elv is rossz ?!?!
unsigned long onTime;
int onOff =0;
int intervalum = 5000;
void setup()
{
onTime = millis();
pinMode(13, OUTPUT); //ellenőrző led
pinMode(A0, INPUT); //LCD Keypad A0-ás bemenet
digitalWrite(A0, HIGH); //Bemenet belső felhúzó bekapcs
}
void loop() {
lcd.setCursor(8,0);
lcd.print(millis()/1000);
int x;
x = analogRead (0);
// reading = onOff;
if (x < 40 && onOff==0) { // Mondjuk ez a B gomb megnyomása és bekapcs
onOff=1;
delay(300);
}
else if (x < 40 && onOff==1) { // Mondjuk ez a B gomb megnyomása és kikapcs
onOff=0;
delay(300);
}
if (onOff==1) { //Ez meg volna az időzítés a villogasra, ami mukodik is szepen ha onmagaban van fenti ki/be nélkül
digitalWrite(13, HIGH); // LED bekapcs
onTime = millis();
}
if(millis() - onTime > intervalum)
{
digitalWrite(13, LOW); // LED kikapcs
}
}
Minden segítséget köszönök szépen!
Re: 60 nap alatt Arduino #10 - Prell
Problémák:
Gombállapot nem analogread(). Na jó, LCD Keypad esetén analóg háló van rajta....
De: A kikapcsolásnál ne csak a ledet kapscold ki, hanem a státuszát is!
Gombállapot nem analogread(). Na jó, LCD Keypad esetén analóg háló van rajta....
De: A kikapcsolásnál ne csak a ledet kapscold ki, hanem a státuszát is!
-
- DrótVégénSzéndarab
- Hozzászólások: 25
- Csatlakozott: 2015. május 19. kedd, 0:37
Re: 60 nap alatt Arduino #10 - Prell
no igen igen próbáltam azt is, hogy csak a sima loop-ba gombnyomás nélkül teszek egy feltételt az analogread-en kívül gombállapotot
pl:
void loop
if (onOff=1){
bekapcs
késletet
kikapcs
}
de így meg -mivel onnantól, hogy onOff=1 ez mindig igaz- nem lehet kikapcsolni (ha egyszer bekapcsoltam)
netről töltöttem le code-okat, de 300-400 soros, más ember által írt állományokat kezdő fejjel átlátni >>> túl veszélyes
pl:
void loop
if (onOff=1){
bekapcs
késletet
kikapcs
}
de így meg -mivel onnantól, hogy onOff=1 ez mindig igaz- nem lehet kikapcsolni (ha egyszer bekapcsoltam)
netről töltöttem le code-okat, de 300-400 soros, más ember által írt állományokat kezdő fejjel átlátni >>> túl veszélyes
Re: 60 nap alatt Arduino #10 - Prell
onOff=1 azt jelenti: onOff legyen egyenlő 1-el!
onOff==1 azt jelenti: onOff egyenlő e 1-el?
Nem mind 1!
onOff==1 azt jelenti: onOff egyenlő e 1-el?
Nem mind 1!
-
- DrótVégénSzéndarab
- Hozzászólások: 25
- Csatlakozott: 2015. május 19. kedd, 0:37
Re: 60 nap alatt Arduino #10 - Prell
igen párdon ezt -csak itt- pongyola mód írtam, a kódban helyesen van
de úgysem működik :-DD
Külföldi oldalakat nézegetek, de ott is vagy on/off vagy folyamatos villogásos pédák vannak ... mind a kettő tök egyszerű csak a kettő összehozása nem.
(legalábbis nekem) (még) >:-)
ha van hasznos tanács valahol azt megköszönöm!
B
de úgysem működik :-DD
Külföldi oldalakat nézegetek, de ott is vagy on/off vagy folyamatos villogásos pédák vannak ... mind a kettő tök egyszerű csak a kettő összehozása nem.
(legalábbis nekem) (még) >:-)
ha van hasznos tanács valahol azt megköszönöm!
B
-
- DrótVégénSzéndarab
- Hozzászólások: 25
- Csatlakozott: 2015. május 19. kedd, 0:37
Re: 60 nap alatt Arduino #10 - Prell
Probléma megoldva.
Részletesen leírva a megoldás egy új topicban #16 Időzítés néven!
Viva la rezisztansz!
B
Részletesen leírva a megoldás egy új topicban #16 Időzítés néven!
Viva la rezisztansz!
B
Re: 60 nap alatt Arduino #10 - Prell
Sziasztok!
Prellmentesítést szeretném megoldani szoftveresen.
Átnéznétek a következő kódot? Köszönöm.
int relay=2;
int buttonpin=8;
int state;
void setup()
{
pinMode(buttonpin,INPUT_PULLUP);
pinMode(relay,OUTPUT);
int state=LOW;
}
void loop()
{
long ido=millis();
if(digitalRead(buttonpin)==LOW)
{
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==LOW))
{
digitalWrite(relay,HIGH);
state=HIGH;
}
}
if(digitalRead(buttonpin)==LOW)
{
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==HIGH))
{
digitalWrite(relay,LOW);
state=LOW;
}
}
}
Prellmentesítést szeretném megoldani szoftveresen.
Átnéznétek a következő kódot? Köszönöm.
int relay=2;
int buttonpin=8;
int state;
void setup()
{
pinMode(buttonpin,INPUT_PULLUP);
pinMode(relay,OUTPUT);
int state=LOW;
}
void loop()
{
long ido=millis();
if(digitalRead(buttonpin)==LOW)
{
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==LOW))
{
digitalWrite(relay,HIGH);
state=HIGH;
}
}
if(digitalRead(buttonpin)==LOW)
{
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==HIGH))
{
digitalWrite(relay,LOW);
state=LOW;
}
}
}
Re: 60 nap alatt Arduino #10 - Prell
1. szerintem rossz helyen van a
long ido=millis();
ennek a gomblenyomás érzékelése után kéne lenni.
2. egyszer.
3. gombnyomás érzékelése után egy várakozó ciklus kéne 300ms ig és utána a vizsgálat.
4. if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==LOW))
ez az ido>300 az esetek tulnyomó részében igaz lesz, nem?
bekapcs után az első 300 ms, és a millis() tulcsordulása után 300 ms ig false
egyébként true
helyette a
if((digitalRead(buttonpin)==LOW) && (millis()>ido+300) && (state==LOW))
és ugyanígy a
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==HIGH))
helyett a
if((digitalRead(buttonpin)==LOW) && (millis()>ido+300) && (state==HIGH))
kellene szerintem
long ido=millis();
ennek a gomblenyomás érzékelése után kéne lenni.
2. egyszer.
3. gombnyomás érzékelése után egy várakozó ciklus kéne 300ms ig és utána a vizsgálat.
4. if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==LOW))
ez az ido>300 az esetek tulnyomó részében igaz lesz, nem?
bekapcs után az első 300 ms, és a millis() tulcsordulása után 300 ms ig false
egyébként true
helyette a
if((digitalRead(buttonpin)==LOW) && (millis()>ido+300) && (state==LOW))
és ugyanígy a
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==HIGH))
helyett a
if((digitalRead(buttonpin)==LOW) && (millis()>ido+300) && (state==HIGH))
kellene szerintem
Re: 60 nap alatt Arduino #10 - Prell
Köszönöm a választ.
De valami nyűgje volt.
Ezért ezzel a megoldással oldottam meg eddig:
void loop()
{
long ido;
if(digitalRead(buttonpin)==LOW)
{
ido=millis();
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==LOW))
{
digitalWrite(relay,HIGH);
state=HIGH;
}
}
if(digitalRead(buttonpin)==LOW)
{
ido=millis();
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==HIGH))
{
digitalWrite(relay,LOW);
state=LOW;
}
}
}
De valami nyűgje volt.
Ezért ezzel a megoldással oldottam meg eddig:
void loop()
{
long ido;
if(digitalRead(buttonpin)==LOW)
{
ido=millis();
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==LOW))
{
digitalWrite(relay,HIGH);
state=HIGH;
}
}
if(digitalRead(buttonpin)==LOW)
{
ido=millis();
if((digitalRead(buttonpin)==LOW) && (ido>300) && (state==HIGH))
{
digitalWrite(relay,LOW);
state=LOW;
}
}
}