Pomoc s úpravom Arduino kódu

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

mato22
Okoloidúci
Okoloidúci
Príspevky: 10
Dátum registrácie: 18 Feb 2018, 18:29

Pomoc s úpravom Arduino kódu

Príspevok od používateľa mato22 » 20 Mar 2018, 22:18

Dobrý večer,

urobil som Vu meter pomocou tejto schémy: https://imgur.com/a/6DvXQ
výstup x2-1 je svorkovnica do ktorej je pripojený LED panel na ktorom je zobrazovaný daný efekt.

Môj kód

Kód: Vybrať všetko

int led[10] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int input, i;
void setup()
{
  for (i = 0; i < 12; i++)
    pinMode(led[i], OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  input = analogRead(A5);
  Serial.println(s);
  input = input / 85;      //By changing the denomintor the sensitivity can be changed
  if (input < 13)
  {
    if (input == 0)
    {
      for (i = 0; i < 13; i++)
      {
        digitalWrite(led[i], LOW);
      }
    }
    else
    {
      for (i = 0; i < input; i++)
      {
        digitalWrite(led[i], HIGH);
        delay(4);
      }
      for (i = 0; i < 13; i++)
      {
        digitalWrite(led[i], LOW);
      }
    }
  }
}
Mojím problémom je, to že po načítaní tohto kódu mi svieti prvá ledka neustále a ked pustím nejakú pesničku tak sa mi na panely zobrazí len po 8 ledku na 9 10 sa nedostane (jedná sa o panel kde je 10 lediek). Prosím, nevedeli by ste mi poradiť ako by som mohol urobiť to, aby po načítaní programu mi nesvietila ani jedna ledka až ked pustím nejakú pesničku a aby mi rozsah lediek ukazoval až po 10 ledku?



! Presun témy do správnej sekcie. presunul: 21.3.2018 mirosne !
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa alidedko » 20 Mar 2018, 22:23

A arduino niekam zo schemy uslo?
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

mato22
Okoloidúci
Okoloidúci
Príspevky: 10
Dátum registrácie: 18 Feb 2018, 18:29

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa mato22 » 20 Mar 2018, 22:26

Ak sa pozrieš lepšie, iste ho tam uvidíš ;-)
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa peterple » 20 Mar 2018, 23:55

Pokiaľ by to bolo napísané korektne tak pri nízkom napätí na vstupe by všetky LEDky zhasli. Lenže nejakou ľudovou tvorivosťou sa tam zaplietla poriadna hlúposť. LEDiek je 10 ale cyklusy behajú po poli aj za pole. Čo rastie za poľom tušia iba srnky. Takže by som doporučoval upraviť všetky cykly tak aby prechádzali iba cez to desať prvkové pole.

No a citlivosť sa upravuje jednou konštantou a je to tam aj napísané:

Kód: Vybrať všetko

  input = input / 85;      //By changing the denomintor the sensitivity can be changed
Zmen si konštantu ako potrebuješ. Na sériej linke (v temináli) by si mal vidieť namerané hodnoty z prevodníka a podľa toho si potom vypočítaj konštantu.

inak nechápem celkom ako to svieti (či bliká) lebo ledky sa postupne rozvecujú s oneskorením 4ms aby sa hneď na to zhasli. To mi zase moja hlava nebere.
Inak už sa to tu v minulosti mihlo. Presne tento kód a tiež to behalo mimo pole.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
zen
Stály člen
Stály člen
Príspevky: 484
Dátum registrácie: 22 Nov 2013, 14:33
Bydlisko: Cadca

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa zen » 22 Mar 2018, 18:18

Mna najviac udivuje, ako tento kod prosel kompilatorom:

Kód: Vybrať všetko

  Serial.println(s);
s nie je definovano.
0
Samozřejmě, že dědeček nemá kapesní hodinky poháněné elektřinou. Takový nesmysl si může vymyslit jen Saturnin. (Zdenek Jirotka, 1942)

mato22
Okoloidúci
Okoloidúci
Príspevky: 10
Dátum registrácie: 18 Feb 2018, 18:29

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa mato22 » 09 Apr 2018, 19:42

Nemohli by ste mi teda prosím pomôcť upraviť ten kód do normálnej pôodoby aby to šlo? Prosím :) iste ste tu niekto šikovný komu to nezaberie ani minútku. Ďakujem.

-- Spojený príspevok 09 Apr 2018, 20:24 --

int led[10] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // Assign the pins for the leds
int Channel = A5; // channel input
int left,i;

void setup()
{
for (i = 0; i < 10; i++)
pinMode(led, OUTPUT);
Serial.begin(9600); // Uncomment to enable troubleshooting over serial.
}

void loop()
{
left = analogRead(Channel); // read the left channel
Serial.println(left); // uncomment to check the raw input.
left = left / 20; // adjusts the sensitivity
Serial.println(left); // uncomment to check the modified input.

if (left == 0) // if the volume is 0 then turn off all leds
{
for(i = -3; i < 10; i++)
{
digitalWrite(led, LOW);
}
}

else
{
for (i = 0; i < left; i++) // turn on the leds up to the volume level
{
digitalWrite(led, HIGH);
}

for(i = i; i < 10; i++) // turn off the leds above the voltage level
{
digitalWrite(led, LOW);
}
}
}


S týmto kodom sú toto dosiahnuté výsledky (Aktuálne svietia všetky ledky a nereagujú)

983
49
1011
50
1003
50
1014
50
1014
50
1020
51
1018
50
1005
50
1018
50
1003
50
1016
50
1013
50
1023
51
993
49
1007
50
1023
51
1019
50
1015
50
1017
50
1023
51
1023
51
1023
0

popopepe
Stály člen
Stály člen
Príspevky: 404
Dátum registrácie: 22 Jún 2009, 00:00

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa popopepe » 09 Apr 2018, 20:33

Pro arduino už dlouho nedělám. Ale tam je chyb...

Kód: Vybrať všetko

int led[10] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; //tohle jsou vývody Arduina na jednotlové LED, máš jich 10.
int input, i; //v input budeš mít tu hodnotu z převodníku
void setup()
{
  for (i = 0; i < 10; i++) //máš jenom 10 LED (0 až 9 je dohromady 10 :-)
    pinMode(led[i], OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  input = analogRead(A5); //tady načteš hodnotu, která může být v rozsahu 0-1023
  //Serial.println(s); //nic se tisknout nebude
  input = input / 102;      //máš jenom 10 LED, takže max. 1023/10 = 102, číslo můžeš dát větší, ale ne menší
  if (input < 102) //pokud je na vstupu nějaká úroveň menší než maximální (1023/102=10 - intová matematika, žádná desetiná čísla)
  {
    if (input == 0) //pokud je vstupní hodnota 0, tak 
    {
      for (i = 0; i < 10; i++) //(jenom 10 LED); 
      {
        digitalWrite(led[i], LOW); //zhasni všechny LED
      }
    }
    else //pokud není vstupní hodnota nulová, je prostě nějaká jiná
    {
      for (i = 0; i < input; i++) //tak podle toho, jaký je výsledek z načtené hodnoty, podělené 102 ( například 6) se to celé provede třeba 6x
      {
        digitalWrite(led[i], HIGH); //tak rozsviť nejprve jednu  LED, v dalším cyklu další atd. (jenom příklad)
        delay(4); //a počkej 4ms, tohle dělej, dokud to neprovedeš 6x (jenom příklad) - tady můžeš laborovat s tím číslem, klidně zkus mnohem větší (10,20,40,100) atd - prostě zkoušej
      }
      for (i = 0; i < 10; i++) //jenom 10 LED
      {
        digitalWrite(led[i], LOW); //všechny LED zhasni
      }
    }
  }
}
Takže nejdřív zjistíš, jaká je hodnota na vstupu, pak jí podělíš tou konstantou, a podle výsledku postupně rozsvítíš jednu LED za druhou, a pak je zhasneš. A to celé pořád dokola.

4ms - to za vteřinu proběhne 250x. 250x za vteřinu se LED rozsvítí a zhasnou (teda ne přesně, ono to bude trvat déle kvůli zbytku toho kódu, ale jenom abys tušil, co to znamená.

Když tam dáš 40, tak to bude 25x za vteřinu (40 x 25=1000 ms).

A ta bulharská konstanta 102 - převodník u arduina umí rozlišit 10bit - 1024 úrovní. Pokud chceš na jednu LED jednu desetinu, tak 1024/10=102. A proto 102.
0

mato22
Okoloidúci
Okoloidúci
Príspevky: 10
Dátum registrácie: 18 Feb 2018, 18:29

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa mato22 » 09 Apr 2018, 21:10

Ďakuejm za tvoju ochotu a pomoc, super si mi to vysvetlil teraz tomu o dosť viacej chápem. No nejde mi ete jedna vec do hlavy, ako mám urobiť to aby mi na začiatku ked by môj VU meter nemal zaznamenávať žiaden zvuk tak sú rozsvietené prvé 2 ledky a 3 bliká, ako by som mohol upraviť tú hodnotu tak aby vôbec neboli na začiaktu ledky rozsvietené ?

Serial.println(input) - to tam mám kvôli tomu aby mi vypísalo na seriový monitor v tom programe hodnoty ktoré nameria v tom input čiže AD prevodníku.
0

popopepe
Stály člen
Stály člen
Príspevky: 404
Dátum registrácie: 22 Jún 2009, 00:00

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa popopepe » 09 Apr 2018, 21:22

On je problém s tím, že na ty dráty k tomu převodníku se vždycky něco naindukuje, a proto skutečná hodnota opravdu nebude nula.
Jakmile úroveň na vstupu dosáhne 102mV, tak už po vyhodnocení bude ten input roven jedné, a svítí jedna LED.

Řešení je několik, zprůměrovat tu vstupní hodnotu - provést několik měření,a poslat dál ten průměr.

Můžeš ten spodek ořezat

změň tu podmínku:
if (input == 0)...

za

if (input <=1)... //případně 2, pokud ti svítí dvě ledky, - vlastně říkáš, že tě nic do 200mV nezajímá, ale není to optimální řešení. Ale fungovat by to mohlo :-) Zjistíš tím, zda je to tím, že se ti něco indukuje na dráty....
0

kamilko
Stály člen
Stály člen
Príspevky: 269
Dátum registrácie: 21 Okt 2017, 14:07
Bydlisko: kosice

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa kamilko » 09 Apr 2018, 21:28

Ked das odkaz na normalnu schemu a nie sivu obrazovku... Tak poradime.
0

mato22
Okoloidúci
Okoloidúci
Príspevky: 10
Dátum registrácie: 18 Feb 2018, 18:29

Re: Pomoc s úpravom Arduino kódu

Príspevok od používateľa mato22 » 09 Apr 2018, 21:48

100x ďakujem popopepe :) je vidno že sa v tom naozaj vyznáš, som ti moc vďačný už to všetko šľape ako má. ĎAKUJEM!
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok