Pomoc s úpravom Arduino kódu

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
mato22
Příspěvky: 4
Registrován: 20 bře 2018, 22:45

Pomoc s úpravom Arduino kódu

Příspěvek od mato22 » 20 bře 2018, 22:48

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: Vybrat vše

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?

AstroMiK
Příspěvky: 649
Registrován: 08 pro 2017, 19:05

Re: Pomoc s úpravom Arduino kódu

Příspěvek od AstroMiK » 20 bře 2018, 23:01

... Abys vybudil vyšší LED, pohraj si s číslem 85 na řádce:

Kód: Vybrat vše

input = input / 85;
(nižší číslo je vyšší citlivost)

A pro zhasnutí nejnižší LED zvětši 0 na něco trochu většího v řádce:

Kód: Vybrat vše

if (input == 0)


Ale asi nejlepší by bylo hodit sem hodnoty, které vypisuje sériový monitor při tichu a při maximální hlasitosti.
Z toho už by se ty konstanty daly spočítat přesně.

mato22
Příspěvky: 4
Registrován: 20 bře 2018, 22:45

Re: Pomoc s úpravom Arduino kódu

Příspěvek od mato22 » 09 dub 2018, 20:23

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

AstroMiK
Příspěvky: 649
Registrován: 08 pro 2017, 19:05

Re: Pomoc s úpravom Arduino kódu

Příspěvek od AstroMiK » 09 dub 2018, 20:52

... Je tam strašně velký vstupní signál.
To jsou vždycky ta první čísla (983, 1011, 1003, 1014.....)
Druhá čísla udávají, kolik ledek by při takovém signálu mělo svítit.

Tyhle čísla z toho lezou při tichu, nebo při hlasitém zvuku?

Jestli je to při tichu, tak máš nějaký problém s tou analogovou částí a musíš to nějak omezit. Možná tam je nějaké rušení.
V ideálním případě bych tam při tichu očekával nuly. V reálu tam vždycky něco bude, ale určitě by to nemělo přesahovat několik desítek.

mato22
Příspěvky: 4
Registrován: 20 bře 2018, 22:45

Re: Pomoc s úpravom Arduino kódu

Příspěvek od mato22 » 09 dub 2018, 21:24

upravil som kod



int led[10] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int input, i;
void setup()
{
for (i = 0; i < 9; i++)
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
input = analogRead(A5);
Serial.println(input);
input = input / 102;
if (input < 102)
{
if (input == 0)
{
for (i = 0; i < 10; i++)
{
digitalWrite(led, LOW);
}
}
else
{
for (i = 0; i < input; i++)
{
digitalWrite(led, HIGH);
delay(32);
}
for (i = 0; i < 10; i++)
{
digitalWrite(led, LOW);
}
}
}
}



Počiatočné hodnoty pri tichu:
315
334
334
317
338
319
306
327
317
309
327
328
332
324
308
325
328

AstroMiK
Příspěvky: 649
Registrován: 08 pro 2017, 19:05

Re: Pomoc s úpravom Arduino kódu

Příspěvek od AstroMiK » 09 dub 2018, 21:37

Takže zkus nahradit tyto původní řádky (z poslední verze programu):

Kód: Vybrat vše

input = analogRead(A5);
Serial.println(input);
input = input / 102;
if (input < 102)


tímto novým kódem:

Kód: Vybrat vše

input = analogRead(A5);
Serial.println(input);
input = (input-340) / 69;
if (input < 1)
Pokud by se při nejvyšší hlasitosti nerozsvítila poslední LED, tak změň číslo 69 na 68 .

AstroMiK
Příspěvky: 649
Registrován: 08 pro 2017, 19:05

Re: Pomoc s úpravom Arduino kódu

Příspěvek od AstroMiK » 09 dub 2018, 22:12

... ještě oprava:

Správně má být:

Kód: Vybrat vše

if (input < 0)
(Protože nejnižší LED má číslo 0)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti