60 nap alatt Arduino #08 - Házi feladatok - Knight Rider

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
kocsgab002
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2007. március 22. csütörtök, 6:00

HozzászólásSzerző: kocsgab002 » 2012. augusztus 12. vasárnap, 17:21

Sziasztok.
Most kezdtem el komolyabban tanulgatni az Arduino programozását, és ez az első saját kútfőből írt program a futófény alapján.
Kéretik nem leszólni, tényleg csak most kezdtem.. :)

/*
  Futofeny
  Gábor módra, gombbal kiegészítve
 */
 
void setup(){
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, INPUT);
  digitalWrite(8, HIGH);
}

void loop() {
  if (digitalRead(8) == HIGH){
   digitalWrite(0, HIGH);
    digitalWrite(7, HIGH);
   delay(100);
   digitalWrite(0, LOW);
   digitalWrite(7, LOW);

   digitalWrite(1, HIGH);
   digitalWrite(6, HIGH);
   delay(100);
   digitalWrite(1, LOW);
   digitalWrite(6, LOW);
   
   digitalWrite(2, HIGH);
   digitalWrite(5, HIGH);
   delay(100);
   digitalWrite(2, LOW);
   digitalWrite(5, LOW);

   digitalWrite(4, HIGH);
   digitalWrite(3, HIGH);
   delay(100);
   digitalWrite(4, LOW);
   digitalWrite(3, LOW);
   
   digitalWrite(5, HIGH);
   digitalWrite(2, HIGH);
   delay(100);
   digitalWrite(5, LOW);
   digitalWrite(2, LOW);

   digitalWrite(6, HIGH);
   digitalWrite(1, HIGH);
   delay(100);
   digitalWrite(6, LOW);
   digitalWrite(1, LOW);
  } 
  
  else{
  digitalWrite(0, HIGH);
   delay(100);
   digitalWrite(0, LOW);
  
   digitalWrite(1, HIGH);
   delay(100);
   digitalWrite(1, LOW);

   digitalWrite(2, HIGH);
   delay(100);
   digitalWrite(2, LOW);
  
   digitalWrite(3, HIGH);
   delay(100);
   digitalWrite(3, LOW);

   digitalWrite(4, HIGH);
   delay(100);
   digitalWrite(4, LOW);
   
   digitalWrite(5, HIGH);
   delay(100);
   digitalWrite(5, LOW);
   
   digitalWrite(6, HIGH);
   delay(100);
   digitalWrite(6, LOW);
  
   digitalWrite(7, HIGH);
   delay(100);
   digitalWrite(7, LOW);

   digitalWrite(6, HIGH);
   delay(100);
   digitalWrite(6, LOW);
   
   digitalWrite(5, HIGH);
   delay(100);
   digitalWrite(5, LOW);

   digitalWrite(4, HIGH);
   delay(100);
   digitalWrite(4, LOW);
  
   digitalWrite(3, HIGH);
   delay(100);
   digitalWrite(3, LOW);
   
   digitalWrite(2, HIGH);
   delay(100);
   digitalWrite(2, LOW);
    
   digitalWrite(1, HIGH);
   delay(100);
   digitalWrite(1, LOW);
   
  } 
   
}



Tudom egyenlőre kis gagyi, de nekem egyenlőre tetszik:) Nagyon örülök, hogy van ez a tanfolyam, szupi dolgokat lehet ezzel csinálni...

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

HozzászólásSzerző: macsek » 2012. augusztus 12. vasárnap, 22:37

kocsgab002 írta:ez az első saját kútfőből írt program a futófény alapján.


Tök jó, csak így tovább!
Külön tetszik az üzemmód váltó gomb. Kép

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

HozzászólásSzerző: Robert » 2012. augusztus 27. hétfő, 15:22

gyulus2md
Újonc
Elküldve: 2012. Augusztus 27. Hétfő, 15:06 Hozzászólás témája: Knight Rider

--------------------------------------------------------------------------------

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

/* Knight Rider villogását utánzó program. Először beállítom a 8 db
portot kimenetnek - nyolc port, mert nullával kezdődnek a port
számozások. Majd két ciklusba szervezem a ledek
bekapcsolását és eloltását. Utólag a pin beállítást is ciklusba szerveztem
de nem próbáltam ki. Kipróbálandó! */


void setup()
{
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
/* for (int i=0; i<=7; i++ ) //Lábak beállítása kimenetként
{
pinMode(i, OUTPUT);
} */
}

void loop(){

for (int i=0; i<=7; i++) // i-láb előre fut
{
digitalWrite(i, HIGH);
delay(100);
digitalWrite(i, LOW);
delay(50);

}
for (int i=7; i>=0; i--) // i-láb vissza fut
{
digitalWrite(i, HIGH);
delay(100);
digitalWrite(i, LOW);
delay(50);

}
}

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

HozzászólásSzerző: macsek » 2012. augusztus 27. hétfő, 15:35

Jónak tűnik.
Érdekes, h a kikapcsolás után is vársz.

gyulus2md írta:

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

for (int i=7; i>=0; i--) // i-láb vissza fut
Ez első és az utolsó ledet fölöslegesen gyújtja ki megint. (Előtte is a hetes égett és utána is a nulladik fog a következő for-nál).

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

for (int i=6; i>0; i--) // i-láb vissza fut
szerencsésebb lenne.

Hajrá, csak így tovább! :)

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

HozzászólásSzerző: Robert » 2012. augusztus 27. hétfő, 16:55

Ugyanígy a 0-t minek gyújtogatod?

Egyik irány
0-1-2-3-4-5-6-7-6-5-4-3-2-1-...

Azaz 0-> 7 majd 6->1 És e kettőt ismételed!

Avatar
gyulus2md
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2008. október 29. szerda, 6:00

Knight Rider

HozzászólásSzerző: gyulus2md » 2012. augusztus 27. hétfő, 17:42

Szevasztok!

A eleinte én is úgy írtam meg a ciklust mint roberték javasolták. De úgy láttam, éreztem, hogy érdekesebb lenne ha egy kicsit megáll, tehát kikapcsol és utána vált irányt. Mivel kipróbálni még nem tudom ezért nem láttam a működését csak elképzeltem. Lehet, hogy igazatok van, de én maradok az általam elképzeltnél, így tartom érdekesebbnek.

Üdv
gyulus2md

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

Re: Knight Rider

HozzászólásSzerző: macsek » 2012. augusztus 27. hétfő, 18:30

gyulus2md írta:úgy láttam, éreztem, hogy érdekesebb lenne ha egy kicsit megáll, tehát kikapcsol és utána vált irányt.

Ha nem bug az, hanem feature akkor persze más a helyzet. 8)
Ez innentől az alkotói szabadság. Nomeg ez a csoda-terméket amúgy is a művészeknek szánták :lol:

Avatar
gyulus2md
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2008. október 29. szerda, 6:00

Knight Rider

HozzászólásSzerző: gyulus2md » 2012. augusztus 28. kedd, 6:57

Próbáljátok ki az alábbi programot.

* Áttanulmányozva az arduino.cc honlapján a for ciklust
a következőre egyszerűsödött a program. Amennyiben nem
működne a for ciklusba szervezett Kimenet beállítás akkor
vissza kell állítani az egyenkénti beállítást. */


void setup()
{
/* pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT); */
for (int i=0; i<=7; i++ ) //Lábak beállítása kimenetként
{
pinMode(i, OUTPUT);
}
}
int k =1;
void loop(){

for (int i=0; i<=7; i=i+k) // i-láb előre-vissza fut
{
if (i==7) k=-1;
if (i==0) k=1;
digitalWrite(i, HIGH);
delay(100);
digitalWrite(i, LOW);
delay(50);

}

}

Avatar
gyulus2md
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2008. október 29. szerda, 6:00

Knight Rider

HozzászólásSzerző: gyulus2md » 2012. augusztus 28. kedd, 7:08

Az előző programnál nem voltam figyelmes. Ezért a program pontosabban, /* Áttanulmányozva az arduino.cc honlapján a for ciklust
a következőre egyszerűsödött a program. Amennyiben nem
működne a for ciklusba szervezett Kimenet beállítás akkor
vissza kell állítani az egyenkénti beállítást. */


void setup()
{
/* pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT); */
for (int i=0; i<=7; i++ ) //Lábak beállítása kimenetként
{
pinMode(i, OUTPUT);
}
}
int k =1;
void loop(){

for (int i=-1; i<=6; i=i+k) // i-láb előre-vissza fut
{
if (i==7) k=-1;
if (i==-1) k=1;
digitalWrite(i, HIGH);
delay(100);
digitalWrite(i, LOW);
delay(50);

}

}

helyesebben így alakul..

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

Re: Knight Rider

HozzászólásSzerző: macsek » 2012. augusztus 28. kedd, 8:04

A setup()-ban levő for ciklusod jó.

A következő próbálkozásod tetszik, de még nem azt csinálná, amit szeretnél:

gyulus2md írta:for (int i=-1; i<=6; i=i+k) // i-láb előre-vissza fut
{
  if (i==7) k=-1;
  if (i==-1) k=1;
  digitalWrite(i, HIGH);
  delay(100);
  digitalWrite(i, LOW);
  delay(50);

}


A for ciklus először végrehajtja azt, h 1. i=-1.
Ezután megnézi, h 2. igaz-e a feltétel. Ha nem, tovább megy a ciklusmag utáni következő utasításra. Ha igaz, megcsinálja a 3. ciklusmagot.
Ha befejezte a ciklusmagot, a 4. ciklusváltozó léptetése jön, majd folytatja a 2. ponttól.

Ezen a kis Móricka-programon látszik:
void setup()
{
  byte i;

  Serial.begin(9600);

  for(i=0;i<=7;i++)
    Serial.println(i);

  for(i=100;i<=7;i++)
    Serial.println(i);

  for(i=200;i==200;i++)
    Serial.println(i);

}

void loop()
{


}


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

0
1
2
3
4
5
6
7
200


No de vissza a te kódodra:
Jó lesz az, csak még reszelj rajta! :)

Még egy adalék a Hogyan küldj hozzászólást? topikból:
Hogyan tegyünk ki a fórumra mások által is könnyen olvasható programrészletet:

Tools / AutoFormat (ctrl+T)
jelöljük ki a fórumra másolandó részt, majd
Edit / Copy for Forum (Ctrl+Shift+C)
és ezt illesszük be a hozzászólásunkba (mondjuk Ctrl+V)

Avatar
gyulus2md
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2008. október 29. szerda, 6:00

Knight Rider

HozzászólásSzerző: gyulus2md » 2012. augusztus 28. kedd, 9:25

Szevasz macsek!
Teljesen egyetértek hozzászólásoddal, de nekem nincs Arduino-óm, hogy
kipróbáljam a programot.Emulátor program aktiválási visszaigazolását várom.
Köszi az útbaigazítást a program másolással kapcsolatban.Amikor a leírásod szerint csináltam, HTML-? kódot adott bemásoláskor és megijedtem, hogy valamit nem jól csináltam. Ezért van a CTRL-C, CTRL-V alapján másoltam.

Üdv Gyulus2md

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

Re: Knight Rider

HozzászólásSzerző: macsek » 2012. augusztus 28. kedd, 9:30

gyulus2md írta:Köszi az útbaigazítást a program másolással kapcsolatban.Amikor a leírásod szerint csináltam, HTML-? kódot adott bemásoláskor és megijedtem, hogy valamit nem jól csináltam.

Ha szögletes zárójelek közötti valamit írt oda akkor az jó, azok BB kódok, attól lesz szines meg olyan, mint a mi kódjaink :)
De meg tudod nézni elküldés előtt a hozzászólás író ablakocska alatti Előnézet gombbal.

Törd még egy kicsit a fejedet, h mi lehet az irányváltós futófényed megoldása, ha van újabb verziód szívesen kipróbálom.

Avatar
gyulus2md
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2008. október 29. szerda, 6:00

Knight Rider

HozzászólásSzerző: gyulus2md » 2012. augusztus 28. kedd, 10:00

Köszi macsek, hogy kipróbálod.
Remélem, most helyesen működik.


void setup()
{
  for (int i=0; i<=7; i++ ) //Lábak beállítása kimenetként
  { 
    pinMode(i, OUTPUT);
  } 
}
int k =1;
void loop(){

  for (int i=0; i<=7; i=i+k) // i-láb előre-vissza fut
  {
    if (i==7) k=-1;
    if (i==0) k=1;
    digitalWrite(i, HIGH);
    delay(100);
    digitalWrite(i, LOW);
    delay(50);

  }

}



Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

Re: Knight Rider

HozzászólásSzerző: macsek » 2012. augusztus 28. kedd, 10:12

gyulus2md írta:Köszi macsek, hogy kipróbálod.
Remélem, most helyesen működik.


Kipróbáltam, tettem bele kiírásokat, h lássuk mit csinál.

void setup()

  Serial.begin(9600);
  Serial.println("**-- gyulus2md futofeny v0.1.2012.08.28.10.25 --**");
  for (int i=0; i<=7; i++ ) //Lábak beállítása kimenetként
  {  
    pinMode(i, OUTPUT);
  }  

int k =1;
void loop(){

  for (int i=0; i<=7; i=i+k) // i-láb előre-vissza fut
  { 
    Serial.print("i=");
    Serial.print(i);
    Serial.print(" k=");
    Serial.println(k);
    
    if (i==7) k=-1;
    if (i==0) k=1;
    digitalWrite(i, HIGH);
    delay(100);
    digitalWrite(i, LOW);
    delay(50);
  } 
  Serial.println("*-*-*");
    




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

**-- gyulus2md futofeny v0.1.2012.08.28.10.25 --**
i=0 k=1
i=1 k=1
i=2 k=1
i=3 k=1
i=4 k=1
i=5 k=1
i=6 k=1
i=7 k=1
i=6 k=-1
i=5 k=-1
i=4 k=-1
i=3 k=-1
i=2 k=-1
i=1 k=-1
i=0 k=-1
i=1 k=1
i=2 k=1
i=3 k=1
i=4 k=1
i=5 k=1
i=6 k=1
i=7 k=1
i=6 k=-1
i=5 k=-1
i=4 k=-1
i=3 k=-1
i=2 k=-1
i=1 k=-1
i=0 k=-1
i=1 k=1
i=2 k=1
i=3 k=1
i=4 k=1
i=5 k=1
i=6 k=1
i=7 k=1
i=6 k=-1
i=5 k=-1
i=4 k=-1
i=3 k=-1
i=2 k=-1
i=1 k=-1
i=0 k=-1


Működik!!!
Be kell valljam, tanítottál nekem valamit ezzel a kóddal. Első ránézésre nem hittem, h jó lesz. :oops:

Avatar
glezmen
Bitmanipulátor
Hozzászólások: 139
Csatlakozott: 2012. augusztus 9. csütörtök, 6:00
Tartózkodási hely: Noszlop
Kapcsolat:

HozzászólásSzerző: glezmen » 2012. szeptember 1. szombat, 11:09

egy kis hardveres kerdesem lenne...

az tiszta, hogy a LEDet nem kotjuk siman az 5V es GND koze
igy ha van mondjuk 5 LEDem, akkor mindegyik ele vagy moge teszek egy ellenallast, es igy kotom a foldre

tehat:

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

5V---|>|---R--+
5V---|>|---R--+
5V---|>|---R--+---GND
5V---|>|---R--+
5V---|>|---R--+

(a |>| lenne a led, az R az ellenallas, bocs a korlatozott muveszi kepessegeimert :D)

ha mondjuk 10mA-rel szamolok es a LEDeken 2.5 V feszultseg esik,, akkor az R=250 ohm

van valami akadalya annak, hogy az 5 kicsi ellenallas helyett egy 'nagyot' hasznaljak?

pl


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

5V---|>|---+
5V---|>|---+
5V---|>|---+---R---GND
5V---|>|---+
5V---|>|---+


ha szinten 10 mA-rel szamolok, akkor mivel a parhuzamos agak aramerossege osszeadodik, igy az R-en keresztul 50 mA folyna?
ezek szerint R=2.5V/0.05A = 50 ohm? :?

van egy olyan erzesem hogy valami felett elsiklottam... valaki legyszi tereljen iranyba :)

illetve ha ez tenyleg 50mA, akkor az nem tul sok az Arduinonak? (plane ha mondjuk 8-10 leddel szamolok)


Vissza: “60 nap alatt Arduino - Házi feladatok”

Ki van itt

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