60 nap alatt Arduino #07 - SOS villogó

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
smalla
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2011. december 21. szerda, 7:00

60 nap alatt Arduino #07 - SOS villogó

HozzászólásSzerző: smalla » 2012. július 19. csütörtök, 12:38

Sziasztok, én az első HF-et (SOS) így oldottam meg:

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



int led = 13;

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}
void ti(){
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(200);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(400);
}
void ta(){
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(600);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(400);
}
void sos(){
  ti();ti();ti();ta();ta();ta();ti();ti();ti();
  delay(500);
}
// the loop routine runs over and over again forever:
void loop() {
  sos();
}


Viszont érdekes módon a TX feliratú pin (0) highban marad. Valaki tudja miért? Ez lenne a default ? Ha kikapcsolom kialszik.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. július 19. csütörtök, 13:11

:oops:

Ui.: Töröltem! Mert sértésnek vették, pedig csak 1 véleménynek szántam!
8)
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2012. július 19. csütörtök, 19:43-kor.

Avatar
smalla
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2011. december 21. szerda, 7:00

HozzászólásSzerző: smalla » 2012. július 19. csütörtök, 17:06

Úgy emlékszem, hogy talán a bash az ami allergiás arra, ha előbb hívsz meg egy funkciót, mint, hogy deklarálva lenne, ezért aztán így csináltam, hibát nem mondott, még warningot se. :)

Ha nem rakom ki, s van valaki aki nem tudja megoldani (később biztos lesz ilyen), akkor van egy példa megoldása. Egyébként meg meg lehet köpködni az enyémet, mert 2 hónapja láttam először. Pláne ha építő jellegű a hozzászólás, külön örülök.

Egyébként én szívesen látnám mások megoldásait, mert biztos lehet belőlük tanulni.

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

HozzászólásSzerző: Robert » 2012. július 19. csütörtök, 17:24

eroth megoldása:

Sziasztok!
Egy lehetséges +oldás...

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

/*
 "SOS" jelzés a 13-as digitális porton
 
  This example code is in the public domain.
 */

void setup() {               
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);
 }

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(250);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(250);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(250);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(250);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(250);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
  digitalWrite(13, HIGH);   // set the LED on
  delay(250);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
}

Avatar
BraskoS
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2011. április 12. kedd, 6:00
Tartózkodási hely: Miskolc
Kapcsolat:

HozzászólásSzerző: BraskoS » 2012. július 19. csütörtök, 19:04

Sziasztok!

Az én SOS házifeladat megoldásom:

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

/*
 SOS jelzés a 13-as lábon
 A Morse időzítése:
 Rövid (ti):                                   1 egység
 Hosszú (tá):                                3 egység
 Betün belüli szünet a jelek között: 1 egység
 Betük közti szünet:                      3 egység
 Szavak közti szünet:                    7 egység
 10 WPM (Word Per Minute) sebesség esetén 1 egység = 120ms
*/

void setup() {               
  pinMode(13, OUTPUT);     // a 13 láb beállítása kimenetnek!
 }
void loop() {
 // az S betű kivilogtatása
 digitalWrite(13, HIGH);    // LED bekapcsol
 delay(120);                    // 1 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
                   
 delay(360);                  // betük közti 3 egységnyi várakozás
 
 // az O betű kivilogtatása
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(360);                   // 3 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(360);                   // 3 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(360);                   // 3 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
 
 delay(360);                  // betük közti 3 egységnyi várakozás
 
 // az S betű kivilogtatása
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, HIGH);   // LED bekapcsol
 delay(120);                   // 1 egységnyi várakozás
 digitalWrite(13, LOW);    // LED kikapcsol
           
 delay(840);                   // szó végi 7 egységnyi várakozás
}

Avatar
eroth
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2012. március 21. szerda, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: eroth » 2012. július 19. csütörtök, 19:13

Sziasztok!
Egy kis segítséget kérek!
Látva az előttem lévő két bejegyzést, azonnal észrevettem, hogy programozásból, nagyon háttal ültem a suliban! Ezért is kérem ne sértődjetek meg, ha netán butaságot kérdezek. Ki is próbáltátok a kódot, amit közzé tettetek, vagy csak megírtátok???? Esetleg, jómagam használok rossz keretrendszert??? Be másoltam a közzétett kódokat Arduino1,0 programba, hogy kipróbáljam, de le sem fordítja, mert eleve szintaktikai hibákat jelez! -én csinálok rosszul valamit...? A magam primitív megoldását is ki próbáltam, itt működik. Persze azt nem vitatom, hogy a kódom, legalább 20 sorral hosszabb!

üdv Endre

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

HozzászólásSzerző: Robert » 2012. július 19. csütörtök, 19:16

Tetszik, hogy eddig 3 emberke 2 féle megoldása futott be:)
Az első (smalla) esetén van előzetes programozási gyakorlat/szemlélet (az egyes rutinok szervezéséből tippelem).
eroth és Braskos a "kezdő" ágat képviselik, a lineáris programozással.

Egyik megoldás sem rosszabb, mint a másik.


TX LED világítva marad az 2 dolgot jelenthet:
- a PC felől valamiért adat jön a chip fele
- vagy a bootloader inicializálása megmaradt.
- a panelen a TX LED-et az a FTDI chip hajtja meg, nem az AVR. Így függetlennek tekintendő...

Avatar
eroth
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2012. március 21. szerda, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: eroth » 2012. július 19. csütörtök, 19:17

helyesbítek! időközben az általam említett bejegyzések egyike törölve lett!
Tehát, NEM BraskoS bejegyzésére tettem megállapítást!
sértődés ne essen! :)

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

HozzászólásSzerző: Robert » 2012. július 19. csütörtök, 19:18

Eroth: mi a hibaüzenet?

Az Arduino 1.0-ban kipróbáltam. Működnek.
Biztos jól másoltad ki a kódokat?


U.i.: nem ér módosítani a hozzászólást :( A hibákból lehet a legtöbbet tanulni! Így a módosítást lehet úgy kérni, hogy: ilyen volt, ilyen lett. A hiba pedig ez violt a rosszban...

Avatar
eroth
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2012. március 21. szerda, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: eroth » 2012. július 19. csütörtök, 19:25

Mindenkitől elnézést kérek, mert időközben rájöttem, hogy mint, ahogy az lenni szokott, ismét én tévedtem! Két rendszer üzemel a gépemen és az első particióban meghalt az Arduinó keretrendszer! Minden kódra hibát jelez.
Újra indultam és láss csodát, mindegyik megoldás működik!!!
:oops:

Avatar
eroth
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2012. március 21. szerda, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: eroth » 2012. július 19. csütörtök, 19:27

Robert!
A hibaüzenet a következő volt: "A windows7 telepítése befejeződött!" :wink:

Avatar
BraskoS
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2011. április 12. kedd, 6:00
Tartózkodási hely: Miskolc
Kapcsolat:

HozzászólásSzerző: BraskoS » 2012. július 19. csütörtök, 22:19

Először egy harmadik féle kódot írtam, szintén funkció hívásokkal. Ezzel nyilván áttekinthetőbb és persze sokkal rövidebb kódot érhetünk el. De közben eszembe jutott, hogy a tanfolyamon még csak a LED villogtatásig jutottunk, annyi képzettséggel meg nem lehet így megoldani a feladatot.
(az LCD-ből óra HF-nál legalábbis ezt olvastam. "Kitételek: csak az eddigi _tanfolyami_ tudás használható!")
Sajnálom, hogy lemaradtam kapu48 véleményéről...

Üdv:Sanyi


Robert írta:Tetszik, hogy eddig 3 emberke 2 féle megoldása futott be:)
Az első (smalla) esetén van előzetes programozási gyakorlat/szemlélet (az egyes rutinok szervezéséből tippelem).
eroth és Braskos a "kezdő" ágat képviselik, a lineáris programozással.

Egyik megoldás sem rosszabb, mint a másik.


TX LED világítva marad az 2 dolgot jelenthet:
- a PC felől valamiért adat jön a chip fele
- vagy a bootloader inicializálása megmaradt.
- a panelen a TX LED-et az a FTDI chip hajtja meg, nem az AVR. Így függetlennek tekintendő...

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

HozzászólásSzerző: Robert » 2012. július 20. péntek, 5:50

Az óránál azért van benn, mert majd _neked_ kell a számlálórészeket - óra/perc illetve perc/óra átfordulás - leprogramozni.

Később jön a date/datetime függvénykönyvtár :).

Avatar
fodor99
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2012. március 24. szombat, 6:00
Tartózkodási hely: Esztergom
Kapcsolat:

Re: elbohóckodtam én is...

HozzászólásSzerző: fodor99 » 2012. július 21. szombat, 14:41

fodor99 írta:kezdem élvezni :))

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

int led          = 13;
int long_signal  = 600;
int short_signal = 200;
int signal_pause = 400;
int word_pause   = 1000;

void setup() {                 
  pinMode(led, OUTPUT);     
}

void _give_signal(int len){
  digitalWrite(led, HIGH);   
  delay(len);               
  digitalWrite(led, LOW);   
  delay(signal_pause);
}

void _s(){
  int i;
  // S = three short signal
  for(i = 0 ; i < 3; i++)
  {
   _give_signal(short_signal);
  } 
}

void _o(){
  int i;
  // O = three long signal
  for(i = 0 ; i < 3; i++)
  {
   _give_signal(long_signal);
  } 
}

void s_and_o_and_s(){
 _s();
 _o();
 _s();
}

void loop() {
  s_and_o_and_s();
  delay(word_pause);
}


oops elnézést a kódformázás hiányáért az imént...

Avatar
fodor99
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2012. március 24. szombat, 6:00
Tartózkodási hely: Esztergom
Kapcsolat:

eeprom

HozzászólásSzerző: fodor99 » 2012. július 21. szombat, 14:43

Jól sejtem ha megtanuljuk az EEPROM-ot használni akkor az SOS szignál tud majd ott folytatódni ahol megszakadt mikor kikapcsoljuk az ARDUINO-t?


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

Ki van itt

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