NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
pgarsky
Člen
Avatar
pgarsky:15.10.2017 12:21

Ahojte, mám postavené 2 diody a potenciometr. A chci docílit toho, aby když točím s potenciometrem na jednu stranu, aby jedné diodě hodnota klesala a druhé stoupala a opačně.

Tento zdroják jsem vymyslel, ale nefunguje.

int led1 = 2;
int led2 = 3;
int hodnota1 = 0;
int hodnota2 = 0;
int pocatecniHodnota1 = 127;
int pocatecniHodnota2 = 128;
int analogPin = 0;

void setup() {
  Serial.begin(9600);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
}

void loop() {
    hodnota1 = analogRead(analogPin);
    hodnota1 = hodnota1 / 4;
    hodnota2 = analogRead(analogPin);;
    hodnota2 = hodnota2 / 4;
    hodnota1 = pocatecniHodnota1;
    hodnota2 = pocatecniHodnota2;
    if (hodnota1 < analogRead(analogPin))
    {
      for (int i = 127; i <= 253;i++)
      {
      hodnota2++;
      }
      for (int e = 127; e >= 0;e--)
      {
      hodnota1--;
      }
    }
    analogWrite(led1, hodnota1);
    analogWrite(led2, hodnota2);
    Serial.print(hodnota1);
    Serial.print(", ");
    Serial.println(hodnota2);
}
Odpovědět
15.10.2017 12:21
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na pgarsky
ostrozan:15.10.2017 21:21

Za prvé - aby ti to "fyzicky" fungovalo - musíš pro potenciometr použít analogový vstup označený jako A (A0,A1,A2.......) a pro ledky pwm výstupy - což třeba takový výstup 2 není

int led1 = 3;//2;
int led2 = 5;//3;
int analogPin = A0;//0;

Dále úplně nevím jak jsi to myslel, ale pokud má mít led1 největší jas při potenciometru na jedné straně a přitom led2 nesvítit vůbec (a obráceně) - tedy při potenciometru ve středu budou svítit obě stejně(polovičním jasem)
pak by to bylo nějak takto

int pot_value= analogRead(analogPin)/4;
analogWrite(led1, pot_value);
analogWrite(led2, 255 - pot_value);

takže tvůj kód by měl vypadat takhle:

int led1 = 3;
int led2 = 5;
int analogPin = A0;

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
    int pot_value = analogRead(analogPin)/4;
    analogWrite(led1, pot_value);
    analogWrite(led2, 255 - pot_value);
    Serial.print(pot_value));
    Serial.print(", ");
    Serial.println(255 - pot_value);
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
15.10.2017 21:21
Avatar
pgarsky
Člen
Avatar
pgarsky:15.10.2017 22:25

Děkuji moc. Akorát nerozumím tomu, proč musí být PWM piny a analog zapsán A0 a nestačí jen 0. Protože teď jsem to vyzkoušel na pinech 2 a 6 a analog přepsal na 0. A fungovalo to stejně. Jaký je tedy rozdíl?

Nahoru Odpovědět
15.10.2017 22:25
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
rdaek
Člen
Avatar
rdaek:15.10.2017 22:51

Piny PWM slouží pro výstup analogu. Na ostatních nemůžeš nastavit analogovou hodnotu, můžeš tam pouze nastavit 0 nebo 5V. Pokud by si diody připojit na čistě digitální piny, jakákoliv hodnota různá od 0 by byla zobrazena jako log. 1 neboli 5V na výstup.

Nahoru Odpovědět
15.10.2017 22:51
Důležité je udělat program blbuvzdorným... Je pravda že mi často dost vzdorují :D
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na pgarsky
ostrozan:15.10.2017 23:16

Pokud máš arduino mega, tak tam jsou na pwm napojené výstupy 2-13 tam to teda bude fungovat i na těch co popisuješ , to co jsem psal platí pro Uno
A s tím analogovým vstupem - kompilator asi vezme 0 stejně jako A0 - důležité ale je, aby samotné připojení bylo na A0 (A1, A2......) protože ty jsou připojenéna AD ppřevodník

 
Nahoru Odpovědět
15.10.2017 23:16
Avatar
pgarsky
Člen
Avatar
Odpovídá na ostrozan
pgarsky:16.10.2017 14:02

Ok, děkuji za vysvětlení. Mám Arduino Mega.

Nahoru Odpovědět
16.10.2017 14:02
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.