IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tomáš Doležal:25.3.2017 18:04

Dobrý den jsem začátečník v Arduinu, ale rozhodl jsem se něco zkusit a to je, že jsem zapojil 2 diody jednu na vstup 5 a druhou na vstup 6. Připojil jsem potenciometr a tím se mělo regulovat viz. script.

*int cteni;
int led = 5;
int led2 = 6;
int pot = A0;

void setup() {
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
}

void loop() {
cteni = analogRead(pot);

if(pot < 500){
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
}
else if(pot < 100){
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
}

delay(1000);
}*

Chtěl jsem udělat to, že když bude hodnota 500 tak bude svítit jedna ledka a když bude nižší než 100 tak se rozsvítí ta druhá. Jenže pořád bliká jen jedna. Je to skoro můj první samostatnej projekt a nic. Výstup z potenciometru mám připojený na A0.

 
Odpovědět
25.3.2017 18:04
Avatar
Tomáš Doležal:25.3.2017 18:11

Ono to sice asi funguje, ale zapamatuje si to jen tu hodnotu při které se deska zapne. Takže když zapnu desku na 200 tak se rozbliká první ledka a potom s tím můžu kroutit až do maxima a nic se nemění.

 
Nahoru Odpovědět
25.3.2017 18:11
Avatar
Adam Ježek
Tvůrce
Avatar
Adam Ježek:25.3.2017 18:22

Problém je v tom, že hodnotu přečtenou z potenciometru máš v proměnné cteni

cteni = analogRead(pot);

ale v podmínce kontroluješ něco jiného.

if(pot < 500)

předělej na

if(cteni< 500)

Druhá věc je, že

if(cteni < 500){
blikni prvni diodou
}
else if(cteni< 100){
blikni druhou diodou
}

By se dalo přeložit jako

Pokud je hodnota z potenciometru menší než 500:
        zablikej první diodou
nebo, pokud hodnota z potenciometru je menší než 100: (ale kvůli první podmínce není menší než 500, tady už máš další problém)
        Zablikej druhou diodou

Pokud chceš, aby toho bylo docíleno při hodnotě 500, tak tam nepatří < (menší než), ale = (rovná se)
Navíc hodnotu 500 nedocílíš snadno, většinou to skáče o pár kolem. Takže pokud bych chtěl, aby kolem 500 mi svítila jedna dioda a kolem 100 mi svítila druhá dioda, u ostatních hodnot nic, tak bych to udělal asi takto:

if((cteni < 510) && (cteni > 490)) //pokud cteni je menší než 510 ale zároveň větší než 490 - tj. v rozmezí 490-510
{
blikni prvni diodou
}
else if((cteni < 110) && (cteni > 90)){
blikni druhou diodou
}
Nahoru Odpovědět
25.3.2017 18:22
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Adam Ježek
ostrozan:25.3.2017 19:47

Určitě je to jenom překlep, protože ty to samozřejmě víš, ale "=" je operátor přiřazení - rovnost je "==", ale aby se toho někdo nechytil a pak se nedivil, protože za

if(x=10){}

ti kompilátor nevynadá, ale nedělá to samozřejmě to co bys chtěl - podmínka bude vždy splněna

 
Nahoru Odpovědět
25.3.2017 19:47
Avatar
Odpovídá na Adam Ježek
Tomáš Doležal:25.3.2017 22:03

Ano nedošlo mě že tam mám hodnoty 500 a 100, ale před tím jsem tam měl

if(pot < 500)

if(pot > 500)

a stejně to nešlo. Bylo to tím, že jsem tam měl místo

if(cteni< 500)

if(pot< 500)

moc děkuji to mi nedošlo.

 
Nahoru Odpovědět
25.3.2017 22:03
Avatar
Odpovídá na Adam Ježek
Tomáš Doležal:26.3.2017 8:38

A jestli se můžu ještě zeptat, chtěl bych to udělat tak že kdyby ty hodnoty byly tak aby to jen svítilo a ne blikalo. Jenže když smažu u podmínek

delay(1000);

digitalWrite(led, LOW);

tak se rozsvítí jedna apotom když s tím otočím tak druhá a svítí obě najednou, nezhasíná. Jak udělám aby se program stále resetoval a hodnoty se měnili?

 
Nahoru Odpovědět
26.3.2017 8:38
Avatar
Petr Langer
Člen
Avatar
Odpovídá na Tomáš Doležal
Petr Langer:26.3.2017 10:04

Když rozsvítíš jednu, tak ti druhou musíš zase zhasnout. Když nastavíš jeden výstup na nějaký stav, tak si ho pamatuje dokud ho zase nezměníš.

 
Nahoru Odpovědět
26.3.2017 10:04
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 7 zpráv z 7.