Egyszerű megoldások, egyszerű problémákra.

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Digitalfish
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2013. január 15. kedd, 23:22

Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Digitalfish »

Köszöntök mindenkit a fórumon és köszönet a felületért ahol jelen lehetek és tanulhatok !
Ezt a topicot azért nyitottam, mert a 60 napos tananyagból nekem sok minden nem derült ki és kérdéseim lennének amiket itt nyilvánosan tennék fel vagy tehetnénk fel. Alapvetően a tananyag üteméhez , szerkezetéhez kapcsolódóak a kérdések.
Azért is vágtam bele az "AVR-ezésbe" mert diszkrét elektronikai környezettel sok feladat csak bonyolultan oldható meg.
Remélem nem hiába nyitottam ezt a topicot, sokaknak fog segíteni rajtam kívül is.

Full kezdőként legnagyobb problémám, az utasításkészlet ismeretének a hiánya. Tényleg ez hol lelhető fel?

Az első gyakorlati leckénél a villogónál felmerült, hogyan lehetne megoldani azt, hogy a villogó lefult 1, 2, 3, -x, meghatározott ciklust és utánna megáll logikai magas, vagy logikai alacsony szinten?
Hogy néz ez ki programilag?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: kapu48 »

Kiinduló oldal.

Language Reference:
http://arduino.cc/en/Reference/HomePage
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Robert »

Hányadik leckénél jársz a 60 naposon?
A ciklus valahol 6-8 körül benne van....

Zanzakód:
setup()
{for 1...5
{villog}
digitalwrite H
}
loop()
{ures}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Robert »

Utasítások:
Arduino -> Felső menü -> Súgó -> Referencia
Digitalfish
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2013. január 15. kedd, 23:22

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Digitalfish »

Effektíve az első gyakorlati leckénél tartok :) Még csak most lett meg a hardwerem. Nah jó töltögettem fel LCD hez progikat meg átírtam a programban lévő szöveget, meg elértem, hogy adott szót betűnként írjon ki egymás után. De pl a második sort nem bírtam működésre.
Szóval ennyi a hatalmas gyakorlatom :(

void setup() {
pinMode(5, OUTPUT);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);

digitalWrite(5, LOW);
}

void loop() { }

Valami effélét sikerült összehoznom
Digitalfish
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2013. január 15. kedd, 23:22

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Digitalfish »

Továbblépve ez három kimenetet állít egymás után magas szintre ( mondjuk egy HW-t lépcsőzetesen éleszt fel ) Ehhez kapcsolódna majd a következő kérdésem

void setup() {
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);

digitalWrite(5, HIGH);
delay(1000);
digitalWrite(6, HIGH);
delay(1000);
digitalWrite(7, HIGH);

}
void loop() { }


Hogyan néz ki a program szerkezet ha egy nyomógombot vagy inkább kontaktot is bele akarunk vonni a folyamatba? Például az első(5, ) pin magas szintre kerül, de a második és harmadik kimenet (6, 7, ) pin csak akkor kerül magas állapotba ha ez a kontakt zárt és célszerüen alacsony szinten van egy bemenetnek megjelölt pin (a bemenet PULLUP ellenállása be van kapcsolva, ezt húzza alacsony szintre egy kontaktus )

Másik ehhez kapcsolódó kérdésem, a leckékben a nyomógombos példánál a "digitalRead" utasítás hatására egy kimenet másolja (követi) egy megadott bemenet állapotát. Kérdésem, hogyan lehet azt elérni, hogy kövesse a bemenet állapotát egy kijelölt kimenet de invertálva? Azaz fordított logikai állapotot vegyen fel?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: kapu48 »

Már megbocsáss!
De te vagy a tanuló!

Ne azt kérd, hogy mi oldjuk meg a feladatodat!
Hanem próbáld magad megoldani!

Van itt rengeteg oldal, olvasnivaló.
Rengeteg téma előkerült és megoldódót.

Tessék tanulni, olvasni.
:roll:
Digitalfish
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2013. január 15. kedd, 23:22

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Digitalfish »

Okés! :) Igyekszem én. Azért valami zanzásított utalás (mint Robert is tette) sokat tud segíteni ám vagy egy konkrét sor.
Itt van ni, erre jutottam a korábbi kérdésem megoldását illetően:

void setup() {
pinMode(8, INPUT);
digitalWrite(8, HIGH);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);

digitalWrite(5, HIGH); // beáll magas szintre
delay(1000); // várakozik valami miatt, mondjuk a HW megköveteli
digitalRead(8); // megnézi a 8, bemenet állapotát
delay(1000); // várakozik , prell stb miatt
digitalWrite(6, digitalRead(8)); // 6, kimenet megnézi és felveszi a 8, pin logikai állapotát

delay(1000); // várakozik szintén mindegy mi miatt
digitalRead(6); // megnézi 6, kimenet állapotát
delay(1000); // várakozik prell és más miatt
digitalWrite(7, digitalRead(6)); // 7, kimenet beáll a 6, kimenet logikai állapotába

} // végetér a ciklus és maradnak a kimenetek a felvett állapotban
void loop() { }


Nade egyszerűen nem jövök rá hogyan tudnám invertálni a digitalRead parancsnál a gomb állapotához rendelt kimenet állapotát , hogy pl fordítva is működtethessem :cry:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: kapu48 »

C-ben ami nincsen készen azt meg kel írni.

vannak utasítások:
if / else
bitRead()
bitWrite()
bitSet()
bitClear()
Digitalfish
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2013. január 15. kedd, 23:22

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Digitalfish »

:D És szerinted a magamféle, aki 3 ledet megvillogtat aztán kész annak ez menni fog?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Robert »

A szorzótáblát hány nap alatt tanultad meg? :P

A későbbi leckékben ott van a ciklus, az if-then-eslse és a select-case szerkezet is. De ha megnézed a referenciákat, abban is sok minta van.

Javaslat:
- mit szeretnél csinálni,
- írj folyamatábrát!
- írd meg az alapján a programoz
- ha nem megy, akkor mit kéne hogy csináljon és mit nem megy.


Fontos!
Ha elakadsz, a programban nincs hiba. TE mondod meg neki rosszul :)
Digitalfish
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2013. január 15. kedd, 23:22

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Digitalfish »

"- írd meg az alapján a programoz"

Nah ezzel van a baj!
Nem jövök rá , hogyan fordítsam át egy bemenethez rendelt kimenet logikai állapotát.
Nahszóval van a digitalWrite(5, digitalRead(8)); ami utasítás alapján az 5 ös kimenet felveszi a 8 as bemenet logikai állapotát. Én azt szeretném elérni , hogy az ellentétes állapotot vegye fel.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: kapu48 »

Bontsd fel részekre a feladatot.

Ha digitalRead(8)==0 ; digitalWrite(5,1);
Else digitalWrite(5,0);

Ennyi az egész folyamat!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Robert »

Nono. nem vonunk össze utasításokat. ezt a bemutató/bevezetőben kénytelen voltam, mert nem ismersz olyat még:
- változó
- feltétel.

A korrekt megoldas:

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

a: bit;
a= digitalread(láb)
a= not a 'invertálod
vagy
if a=1 then a=0 else a=1
digitalwrite (láb, a)
Próbáld ki:
digitalWrite(5, not(digitalRead(8)));
digitalWrite(5, !digitalRead(8));

A not vagy a ! azt hiszem ellenkező előjelűvé teszi.
Hülye tipp:digitalread _külső hardware-t_ invertálod? (azaz a kapcsoló nem GND hanem táp fele megy?)
digitális kimenette invertálod, azaz a LED nem a GND hanem a +5V fele van?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Egyszerű megoldások, egyszerű problémákra.

Hozzászólás Szerző: Robert »

Vigyázz!
Első leckében még nem tudhatja mi az a IF, mi az a változó!
Így persze, hogy a _még_ korlátozott tudás/mozgástérben nem tud rá megoldást!

Így hardware alapú megoldásod van még csak:
- nyomógombot invertálod
- kimenteet invertálod
Válasz küldése