60 nap alatt Arduino #20

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #20

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

Ez 10 szer megismétli, és már van benne for ciklus:

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

 //impulzusok kozti ido a jelvaltasnal
    unsigned int var=2000;
      //mennyi ideig szoljon (usec)
    unsigned long tartam=200000;
      //segedvaltozo
    unsigned long temp1long;
      //melyik labon a csipogo
    #define Speaker 10
 
 
void setup() {
      //hangszoro kimeneti labon
    pinMode(Speaker, OUTPUT);
      //ennyi darab impulzust kell kiadni
    temp1long=tartam/(var*2);
  }
 
void loop() {
  temp1long=tartam/(var*2);
  for( unsigned int i=0; i < 10; i++)
  {
  temp1long=temp1long-1;
  if (temp1long==0) {
      //10 sec szunet
    delay(10000);
      //utana kezdjuk ujra
    temp1long=tartam/(var*2);
  }
    //hangszoro alacsonyra
  digitalWrite(Speaker,LOW);
    //varakozas valtas kozt
  delayMicroseconds(var);
    //hangszoro magasra
  digitalWrite(Speaker,HIGH);
    //varakozas valtas kozt
  delayMicroseconds(var);
  } 
} 
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #20

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

Vagy tegyünk a ciklus végére kevés várakozást, hogy halljuk (lássuk) mikor van vége a loop-onbelül:

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

//impulzusok kozti ido a jelvaltasnal
    unsigned int var=2000;
      //mennyi ideig szoljon (usec)
    unsigned long tartam=200000;
      //segedvaltozo
    unsigned long temp1long;
      //melyik labon a csipogo
    #define Speaker 10
 
 
void setup() {
      //hangszoro kimeneti labon
    pinMode(Speaker, OUTPUT);
      //ennyi darab impulzust kell kiadni
    temp1long=tartam/(var*2);
  }
 
void loop() {
  temp1long=tartam/(var*2);
  for( unsigned int i=0; i < 10; i++)
  {
  temp1long=temp1long-1;
  if (temp1long==0) {
      //10 sec szunet
    delay(10000);
      //utana kezdjuk ujra
    temp1long=tartam/(var*2);
  }
    //hangszoro alacsonyra
  digitalWrite(Speaker,LOW);
    //varakozas valtas kozt
  delayMicroseconds(var);
    //hangszoro magasra
  digitalWrite(Speaker,HIGH);
    //varakozas valtas kozt
  delayMicroseconds(var);
  } 
  delay(100);
} 
Ezek már müködnek nálad?
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #20

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

Igy természetesen megy.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #20

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

Az utolso verzio is megy, gyorsabban szaggat mit a korábbi. Szerintem az eredeti [for] függvénnyel van valamilyen gond. Az ilyen meg hasonlo for funkciok mind müködtek, (még a bonyolultabbak is, csak az az egy nem.
Kösz
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #20

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

Most egy kicsit eljátszottam az utolso programverzioval (kapu48:16:12)

Ez pontosan egy olyan program, amit mindig igyekeztem kerülni, az egyes paraméterek sok minden jellemzöre kihatnak. Pl. a [var] változo nemcsak a hang magasságát változtatja, hanem ez ismétlési periodusokat is. Azaz ha magasabb a hang ( kisebb a [var] értéke akkor az ismétlödési frenkvencia is gyorsabb.
Ha a [for] funkcioban az i<10 értékét változtatom, akkor bizonyos állásnál konfliktusba [i<100] kerül valamelyik másik függvénnyel vagy funkcioval.
Az if (temp1long==0){ utáni delay-t ha ki is hagyom nem történik semmi, mintha az egész IF funkcionak semmi feladata nem lenne, ha kihagyom az egészet semmi nem változik.

Azaz ezt a progit nagyon át kellene dolgozni. Én mindig ugy igyekeztem a programokat irni, hogy pl meghatározom a hang magasságát (fixen egy jellemzövel). Egy másikkal az ismétlödési periodust meg a ki-, bekapcsolási idöket, s ha kell egy következö paraméterrel meg azt, hogy hány jel menjen ki. Pl ugyanennek a leckének az autimata SOS szakasz sokkal jobb ebböl a szempontbol. A program elején fel kellene vázolni mit is akarunk: pl. Kb 500 Hz-es beepjeleket. 1 sec bekapcsolva dupla annyi idöre kikapcsolva, és mindezt 10-szer ismételve.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #20

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

Igazad van! Itt az if-nek semmi hatása nincsen!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #20

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

Akkor itt van frekvencia emeléssel kb.: 1.5KHz-ig

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

//impulzusok kozti ido a jelvaltasnal
    unsigned int var=2000;
      //mennyi ideig szoljon (usec)
    unsigned long tartam=200000;
      //segedvaltozo
    unsigned long temp1long;
      //melyik labon a csipogo
    #define Speaker 10
 
 
void setup() {
      //hangszoro kimeneti labon
    pinMode(Speaker, OUTPUT);
      //ennyi darab impulzust kell kiadni
   // temp1long=tartam/(var*2);
  }
 
void loop() {
  for( unsigned int j=0; j < 100; j++)
  { 
    for( unsigned int i=0; i < 1000; i++)
    { 
      //hangszoro alacsonyra
      digitalWrite(Speaker,LOW);
      //varakozas valtas kozt
      delayMicroseconds(var);
      //hangszoro magasra
      digitalWrite(Speaker,HIGH);
      //varakozas valtas kozt
      delayMicroseconds(var);
    } 

    var -= 100;
    if(var < 100) var = 4000;
  }
} 
De még a frekvencia számolásig el sem jutottatok a leckékben!
Én is csak a Logic analizeren látom az értékeket.
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #20

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

Igy van, ahhoz sem jutottunk el a leckékben.. :-)
iIyen változo frekivel már irtam egy progit (Kojak sziréna a futofényhez).
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #20

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

Ha Te írtad, nyugodtan közzé teheted.

(Had boncoljuk szét.
És utána írjuk, hogy ezt már máshol jobban megoldották. :twisted:
Csak, hogy érezd milyen mikor fikázzák a munkádat!) :mrgreen:

És talán még tanulnál ís másoktól!
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #20

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

Elnézést én csak egy csoro kezdö vagyok itt az Arduino C nyelvezetében - ne tölem várjátok a remek programokat.
Ha majd vége lesz meglátom, mire jutottam. Egy kicsit más az érdeklödési köröm, igy azokkal foglalkozom, (motorvezérlések, folyamat vezérlések ( statemachines)) igy az itteni tanfolyam mellett azokat tanulgatom, mert arra van szükségem, és örülök, hogy azok müködnek.
Azonban eddig valamennyi leckét végigcsináltam söt a PC-vel is megoldottam a kommunikáciot és a displayre is sikerült azt kiirnom, amit akartam és oda ahova akartam - az lesz az egyik motorvezérlés kezelöpanelje.
( az igaz, hogy ezeket én már mind végigcsináltam az ASMben - pl ezen a panelen minden LEDhez egy motorállás tartozik és csak két vezeték megy a LEDekhez).
IMG_3145.JPG
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #20

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

Ezt már megcsinálták RGB LED-ekkel.
https://malnapc.hu/a1138-neopixel-rgb-l ... -60-led-1m
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #20

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

Csak az én megoldásomnak semmi köze az intelligens LEDekhez, mezei LEDek vannak a panelon, a hátulján meg egy speci meghajto (MM5451 ha érdekel) . És minden kod a sajátom.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
Verjoz
SzínkódFestő
Hozzászólások: 99
Csatlakozott: 2018. március 13. kedd, 7:18

Re: 60 nap alatt Arduino #20

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

Bocsánat a félrevezető információért, ezt sajna nagyon benéztem!
Sajnálom!
ha8lls
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2017. november 11. szombat, 16:07

Re: 60 nap alatt Arduino #20

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

etwg írta: 2019. október 20. vasárnap, 17:10 A 20. leckében a for bekezdést képtelen vagyon müködésre birni. A program nem jelez semmi hibát, de nem is csinál semmit.
Szia!

Habár -szerintem- már rég elengedted a "témát", én épp most "estem" túl rajta.

1. A for ciklusban valamiért nem elegendő a "i == temp1long". Helyette "i <= temp1long" kell.
2. A for ciklus vége előtti "temp1long = temp1long -1;" nem kell.
3. Nem hiba, csak panaszkodik a fordító, hogy a for-ban az i változó long, míg a temp1long pedig unsigned long. A békesség miatt az i változó is unsigned long lett.

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

#include <Arduino.h>

unsigned int var = 2000;
unsigned long tartam = 200000;
unsigned long temp1long;

#define speaker 10

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

void loop()
{
  temp1long = tartam / (var * 2);
  for (unsigned long i = 0; i <= temp1long; i++)
  {
    digitalWrite(speaker, LOW);
    delayMicroseconds(var);
    digitalWrite(speaker, HIGH);
    delayMicroseconds(var);
  }
  delay(10000);
}
(Igaz, én VSCode-ban írom ezért az elején az #include Arduino.h)

Üdv!
Imre
Selmeci Ferenc
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2021. november 29. hétfő, 9:35

Re: 60 nap alatt Arduino #20

Hozzászólás Szerző: Selmeci Ferenc »

Sziasztok !
Nálam sem működött először.
Azonban " i== temp1long " ,itt egyszeres = jel ,!= ,<= ., ezekkel működik.
Az ==, >= ezekkel nem.
Nemteljesen értem az okát ,de ez van.
Válasz küldése