Jak mám správně nastavit podmínky?

Odpovědět
marionorko
Příspěvky: 2
Registrován: 21 dub 2019, 20:07
Reputation: 0

Jak mám správně nastavit podmínky?

Příspěvek od marionorko » 21 dub 2019, 20:18

Dobrý den, moje otázka bude možná trochu banální, ale už nad tím sedím asi hodinu a nedokážu to nijak nastavit. Chtěl jsem si vyzkoušet jak fungují podmínky a tak jsem si připojil potenciometr, seriovým výpisem jsem zjistil, že hodnoty se pohybují od 0 do 255 a k tomu jsem si připojil 2 led diody, k jedné jsem nastavil, že pokud bude hodnota nižší než 200 tak se má rozsvítit, jelikož svítila pořád tak jsem dole dal pauzu 200ms a pokud bude hodnota vyšší než 200 má svítit/blikat červená. Výsledek je takový že když je hodnota menší než 200 první led bliká a ta druhá která by měla blikat až nad 200 tak svítí, pokud přesáhnu 200 blíká jen ta druhá a ta první svítí. Jak udělám aby v určitém rozsahu svítila/blikala jen jedna?

Kód: Vybrat vše

int cteni;
int led = 6;
int pot = A0;
int war = 5;  //warning, cervena led dioda

void setup() {

Serial.begin (9600);  
pinMode(led, OUTPUT);
pinMode(war, OUTPUT);
pinMode(pot, INPUT);
}

void loop() {

int cteni = analogRead(pot)/4;
//analogWrite(led, cteni);
if (cteni < 200)
{
 digitalWrite(led, HIGH); 
}
 else if (cteni > 200)
{
 digitalWrite(war, HIGH);
}
delay(200);
digitalWrite(war, LOW);
digitalWrite(led, LOW);
Serial.println(cteni, DEC);
delay(500);
}
Zkoušel jsem to dát i do podmínky, ale bez úspěchu.

Kód: Vybrat vše

if (cteni < 200)
{
 digitalWrite(led, HIGH);
 digitalWrite(war, LOW); 
}

Uživatelský avatar
SkullKeep
Příspěvky: 290
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Jak mám správně nastavit podmínky?

Příspěvek od SkullKeep » 21 dub 2019, 21:33

Nechápu proč jsi dvakrát inicializoval hodnotu cteni porpvé před SETUPem a pak v programu.
Zkus toto snad to pojede lépe.

Kód: Vybrat vše

int cteni = 0;
int led = 6;
int pot = A0;
int war = 5;  //warning, cervena led dioda

void setup() {

Serial.begin (9600);  
pinMode(led, OUTPUT);
pinMode(war, OUTPUT);
pinMode(pot, INPUT);
}

void loop() {

cteni = analogRead(pot)/4;
//analogWrite(led, cteni);
if (cteni <= 200)
{
 digitalWrite(led, HIGH); 
}
 else 
{
 digitalWrite(war, HIGH);
}
delay(200);
digitalWrite(war, LOW);
digitalWrite(led, LOW);
Serial.println(cteni, DEC);
delay(500);
}
:twisted: :?: :arrow: :geek: P. Q. M.

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Jak mám správně nastavit podmínky?

Příspěvek od gilhad » 21 dub 2019, 23:16

A mas ty LED zapojene (prez odpor) k zemi, nebo k +5V? Pokud je mas k +5V, tak nastavenim HIGH je na pinu taky 5V na ledceje 5-5=0V a nesviti. Kdyz je na pinu LOW, tak je tam 0 a na ledce 5-0=5V a sviti/blika.

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: Jak mám správně nastavit podmínky?

Příspěvek od petan » 22 dub 2019, 09:49

Hodnoty se pohybují od 0 do 255 protože při načítání hodnoty dělíš čtyřmi. Funkce analogRead vrací číslo od 0 do 1023 Na funkci to nemá žádnej vliv, ale zbytečně si tím zmenšuješ rozlišení analogového vstupu.

Pozor na to, jak definuješ podmínku. Takhle jak to máš napsaný se provede část když je hodnota pod 200 a druhá část nad 200. Ale když bude mít proměnná hodnotu 200, tak se nic neprovede!

Pokud chceš jenom podle hodnoty rozsvěcet první, nebo druhou LEDku, tak můžeš jednoduše použít tento kód. Důležité je, že kromě rozsvěcení diody musíš tu druhou taky zhasínat. Arduino dělá jenom to, co mu napíšeš. A pokud nedáš příkaz k zhasnutí, tak to jednoduše neudělá.

Kód: Vybrat vše

int cteni;
int led = 6;
int pot = A0;
int war = 5;  //warning, cervena led dioda

void setup() {
Serial.begin (9600);  
pinMode(led, OUTPUT);
pinMode(war, OUTPUT);
pinMode(pot, INPUT);
}

void loop() {

int cteni = analogRead(pot)/4;
Serial.println(cteni, DEC);

if (cteni < 200){
 //hodnoty menší než 200 (tedy 0 - 199)
 digitalWrite(led, HIGH); 
 digitalWrite(war, LOW);
}
 else{
 //hodnoty větší a rovno 200 (tedy 200 - ...)
 digitalWrite(led, LOW); 
 digitalWrite(war, HIGH);
}
}
Pokud chceš s LEDkou blikat (nevím jak, z popisu jsem to moc nepobral), tak opět jenom upravíš podmínky. Konstrukce IF zůstane stejná, jenom se změní její obsah. Pozor, konstrukce, kde se používá delay bude mít vždy zpoždění - pokud budeš měnit hodnoty rychle, nebudou LEDky rychle problikávat, ale vždy dobliká jedna a pak začne druhá.

Kód: Vybrat vše

if (cteni < 200){
 digitalWrite(war, LOW);	//zhasni ledku war
 
 digitalWrite(led, HIGH); 	//rozsviť LED
 delay(200);	//čekání
 digitalWrite(led, LOW); 	//zhasni LED
 delay(200);
}
 else{
 digitalWrite(led, LOW);	//zhasni led
 
 digitalWrite(war, HIGH); 	//rozsviť LED war
 delay(200);	//čekání
 digitalWrite(war, LOW); 	//zhasni LED war
 delay(200);
}

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Jak mám správně nastavit podmínky?

Příspěvek od gilhad » 22 dub 2019, 17:13

Co se blikani tyce, tak to ma spravne (a taky mu to blika) - v tech ifech da jednu ledku na HIGH ( rozsviti), pak za ifama chvili pocka, pak obe da na LOW (zhasne), pak chvili pocka.
200 ms/500ms znamena 1/5 a 1/2 sekundy, to je v pohode postrehnutelne.

Problem je, ze mu jedna blika a druha sviti. Coz IMHO znamena, ze LOW (ktere by je melo vypnout) je naopak zapne a HIGH (ktere by melo jednu zapnout ji naopak vypne. Takze ta LED asi neni zapojena mezi pinem a zemi, ale mezi pinem a napajenim, cimz se logika obraci. (takze v ifech jednu zhasna a pak je spolecne rozsviti)

To, ze mu v pripade 200 neblika nic je bud nedokonalost, nebo naopak zadana vlastnost, to si musi rozhodnout sam, jak se to na te hranici ma chovat, podle toho, k cemu to potrebuje.

To, ze si rozsah snizi na ctvrtinu neni problem, kdyz chce testovat hranici (dokonce to ma dobry smysl, kdyz mu ten vstup trochu sumi, tak se male zmeny mezi 800 a 803 potlaci (coz se hodi, pokud chce stav "pri podpeti blika cervena, pri prepeti blika zelena, pri spravne hodnote neblika nic)

marionorko
Příspěvky: 2
Registrován: 21 dub 2019, 20:07
Reputation: 0

Re: Jak mám správně nastavit podmínky?

Příspěvek od marionorko » 11 kvě 2019, 19:09

Ano moc děkuji za radu. Měl jsem připojenou jednu ledku na +5V což dělalo problémy. Jinak účel tohoto není zatím do žádné velkého projektu, ale spíš vyzkoušet si jak správně požívat proměnné a čtení hodnot.

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Jak mám správně nastavit podmínky?

Příspěvek od gilhad » 12 kvě 2019, 07:45

Není problém mít LEDky proti plusu, jen si to člověk musí uvědomit a spínat je LOW a zhasínat HIGH - jsou zapojení, kde se to tak naopak docela hodí :)

Odpovědět

Kdo je online

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