#21 Hangok

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Válasz küldése
Zsolesz73
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2020. január 29. szerda, 9:02

#21 Hangok

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

Sziasztok!
Az SOS+ csipogó programmal elakadtam. A probléma az hogy a pont, pont, pont, után a program nem lép tovább a vonás, vonás, vonásra, és tovább. Mit rontottam el?

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

[code]
unsigned int var = 2000;
//varakozas jelvaltasnal
unsigned long tartam = 100000;
//ennyi ideig szoljon
unsigned long temp1long;
//segedvaltozo
#define Speaker 10
// melyik labon szol a csipogo
void setup() {
  pinMode(13, OUTPUT);
  // 13 lab  led
  pinMode(Speaker, OUTPUT);
  // 10 lab csipogo kimenet
  delayMicroseconds(var);
  // ennyit kel varni ket valtas kozott
}

void loop() {
  //...---...
  pont();
  delay(50);
  pont();
  delay(50);
  pont();
  delay(50);
  vonas();
  delay(50);
  vonas();
  delay(50);
  vonas();
  delay(50);
  pont();
  delay(50);
  pont();
  delay(50);
  pont();
  delay(2500);
}
void pont() {
  digitalWrite(13, HIGH);
  // led be
  delay(250);
  // var
  digitalWrite(13, LOW);
  // led ki
  temp1long = tartam/ (var * 2);
  // ennyi impulzust kell kiadni
  while (temp1long != 0) {
    //ismeteld, amig a feltetel igaz
    digitalWrite(Speaker, LOW);
    // hangszoro alacsony
    delayMicroseconds(var);
    // varakozas valtas kozott
    digitalWrite(Speaker, HIGH);
    // hangszoro magas
    delayMicroseconds(var);
    // varakozas valtas kozott
    temp1long = temp1long - 1;
  }
  digitalWrite(13, LOW);
  
}
void vonas() {
  digitalWrite(13, HIGH);
  // led be
  delay(1000);
  // varakozas
  digitalWrite(13, LOW);
  // led ki
  temp1long = tartam/ (var * 2);
  // ennyi darab imoulzust kell kiadni
  temp1long = temp1long * 4;
  // a vonas 4 x hosszabb mint a pont
  while (temp1long != 0);
  // ismeteld amig a feltetel igaz
  digitalWrite(Speaker, LOW);
  // hangszoro alacsony
  delayMicroseconds(var);
  // varakozas valtas kozott
  temp1long = temp1long - 1;


  digitalWrite(13, LOW);
}

[/code]
Arduino Mega 2560
atilla
Biztosítékgyilkos
Hozzászólások: 65
Csatlakozott: 2016. május 10. kedd, 18:35

Re: #21 Hangok

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

A while ciklus feltétele után van egy pontosvessző, de viszont nincsen ott a kapcsos zárójel, amibe a teendők helye lenne.
Zsolesz73
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2020. január 29. szerda, 9:02

Re: #21 Hangok

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

Köszönöm a segítséget, javítottam a hibát. Az eredmény érdekesre sikerült. A pont- pont- pont rendben van, de utána a vonás- vonás- vonás röviden szól és a hangszín is megemelkedett.

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

[code]
unsigned int var=2000;
//varakozas jelvaltasnal
unsigned long tartam=100000;
//ennyi ideig szoljon
unsigned long temp1long;
//segedvaltozo
#define Speaker 10
// melyik labon szol a csipogo

void setup() {
  pinMode(13, OUTPUT);
  // 13 lab  led
  pinMode(Speaker, OUTPUT);
  // 10 lab csipogo kimenet

  // ennyit kel varni ket valtas kozott
}

void loop() {
  //...---...
  pont();
  delay(50);
  pont();
  delay(50);
  pont();
  delay(50);
  vonas();
  delay(50);
  vonas();
  delay(50);
  vonas();
  delay(50);
  pont();
  delay(50);
  pont();
  delay(50);
  pont();
  delay(2500);
}

void pont() {
  digitalWrite(13, HIGH);
  // led be
  temp1long=tartam/(var*2);
  // ennyi impulzust kell kiadni
  while (temp1long != 0) {
    //ismeteld, amig a feltetel igaz
    digitalWrite(Speaker, LOW);
    // hangszoro alacsony
    delayMicroseconds(var);
    // varakozas valtas kozott
    digitalWrite(Speaker, HIGH);
    // hangszoro magas
    delayMicroseconds(var);
    // varakozas valtas kozott
    temp1long = temp1long-1;
  }
  digitalWrite(13, LOW);

}

void vonas() {
  digitalWrite(13, HIGH);
  // led be
  temp1long=tartam/(var*2);
  // ennyi darab imoulzust kell kiadni
  temp1long=temp1long*4;
  // a vonas 4 x hosszabb mint a pont
  while (temp1long != 0) {
    // ismeteld amig a feltetel igaz
    digitalWrite(Speaker, LOW);
    // hangszoro alacsony
    delayMicroseconds(var);
    // hangszoro magas
    digitalWrite(Speaker, HIGH);
    // varakozas valtas kozott
    temp1long = temp1long-1;
  }
  digitalWrite(13, LOW);
}
[/code]


Összehasonlításként íme a tanfolyami eredeti példa ami rendesen működik

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

[code]
/*  SOS alappprogram
      hanggal es eljarasokkal
    60 nap alatt arduino tanfolyam
    (c) TavIR http://www.tavir.hu  */
    
      //varakozas a jelvaltasnal
    unsigned int var=2000;
      //ennyi ideig szoljon
    unsigned long tartam=100000;
      //segedvaltozo
    unsigned long temp1long;
      //melyik labon a csipogo
    #define Speaker 10
 
void setup() {                
        //D13: LED rakotve
    pinMode(13, OUTPUT); 
        //hangszoro kimeneti labon
    pinMode(Speaker, OUTPUT);
        //ennyi ideig kell ket valtas kozt lenni
 } 
 
void loop() { 
    //...---...
  pont();
  delay(50);             
  pont();  
  delay(50);
  pont();
  delay(50);              
  vonas(); 
  delay(50);             
  vonas();
  delay(50);              
  vonas();
  delay(50);              
  pont();
  delay(50);             
  pont();  
  delay(50);
  pont();
  delay(2500);              
}
 
void pont() {
    //LED be - var - LED ki
  digitalWrite(13, HIGH);
    //ennyi darab impulzust kell kiadni
  temp1long=tartam/(var*2);
    //ismeteld, amig a feltetel igaz
  while (temp1long != 0) {
        //hangszoro alacsonyra
      digitalWrite(Speaker,LOW);
        //varakozas valtas kozt
      delayMicroseconds(var);
        //hangszoro magasra
      digitalWrite(Speaker,HIGH);
        //varakozas valtas kozt
      delayMicroseconds(var);
      temp1long = temp1long-1;
  } 
  digitalWrite(13, LOW);   
}
 
void vonas(){
    //LED be - var - LED ki
  digitalWrite(13, HIGH); 
    //ennyi darab impulzust kell kiadni
  temp1long=tartam/(var*2);
     //A vonas 4x hosszabb mint a pont
  temp1long=temp1long*4;
       //ismeteld, amig a feltetel igaz
  while (temp1long != 0) {
        //hangszoro alacsonyra
      digitalWrite(Speaker,LOW);
        //varakozas valtas kozt
      delayMicroseconds(var);
        //hangszoro magasra
      digitalWrite(Speaker,HIGH);
        //varakozas valtas kozt
      delayMicroseconds(var);
      temp1long = temp1long-1;
    } 
  digitalWrite(13, LOW); 
}
[/code]

Többször is átnéztem de a beállításokban nem találtam különbséget.
(Előre is elnézést kérek a lámaságért de az abszolút nulla szintről próbálom felküzdeni magam)
Arduino Mega 2560
Válasz küldése