Nejste přihlášen/a.

Přihlásit se do poradny

 

Arduino – vstup/výstup

Od: medvidek180® odpovědí: 11 změna:

Poradil by mi prosím nějaký hodný člověk s tímto problémem? Už jsem prošel několik knížek a návodů, ale všude se zabývají jen výstupy arduina. Díky tomu jsem se naučil si sestavyt na výtupech takovou světelnou show, jakou potřebuji. V žádné publikaci ale není ani zmínka o tom, jak by mi toto mělo fungovat pouze při stisknutém tlačítku na vstupu. Neporadil by mi někdo? K čemu to je, když si výstupy dělají to co chci, ale nemůžu toto dějství zapínat a vypínat jednoduchým způsobem. Předem moc děkuji za jakou koli radu. Michal

 

 

11 odpovědí na otázku
Řazeno dle hodnocení

 

 

jentak*
hodnocení

2x

Máte několik možnosti vstupů. Použít digitální vstup, nebo analogový vstup. Tlačítko zapojit jedním koncem na + druhým koncem na D3. D3 přes odpor cca 10k-100k na zem. podobně jako s digitálním vstupem, se to dá udělat i s analogovým vstupem. pak jsou složitější metody, udělat to přes přerušení, ale to není pro začátečníka.

tady je vzor SW:
void setup()
{
pinMode(3, INPUT); //nastaví pin D3 jako vstupní

}

void loop()
{
proměnná = digitalRead(3); // do proměnné se zapíše stav vstupu D3

// tady nějaké IF, apod, kterým se reaguje na stav vstupu, tedy stisknutého tlačítka.

}

hodnocení

Moc Vám děkuji, Ale jak to včlením do tohoto programu (viz níže), který mi dělá, co potřebuji a jak ho zase umlčím (ve skutečnosti používám místo tlačítka PIR detektor pohybu) Ten mů prográmek, co už chápu je tento:

/* čísla výstupných pinov */
byte outputPins[] = {0,1,7,8,9,10,11,12};
void setup()
{
for(int i=0; i<8;i++)
{
pinMode(outputPins[i], OUTPUT);
digitalWrite(outputPins[i], LOW);
}
}
void loop()
{
for(int i=0; i<7;i++)
{
digitalWrite(outputPins[i], HIGH);
delay(300);
digitalWrite(outputPins[i], LOW);
}
{
digitalWrite(outputPins[4], HIGH);
digitalWrite(outputPins[5], HIGH);
digitalWrite(outputPins[6], HIGH);
digitalWrite(outputPins[7], HIGH);
digitalWrite(outputPins[3], HIGH);
digitalWrite(outputPins[2], HIGH);
digitalWrite(outputPins[1], HIGH);
digitalWrite(outputPins[0], HIGH);
delay(2000);
digitalWrite(outputPins[4], LOW);
digitalWrite(outputPins[5], LOW);
digitalWrite(outputPins[6], LOW);
digitalWrite(outputPins[7], LOW);
digitalWrite(outputPins[3], LOW);
digitalWrite(outputPins[2], LOW);
digitalWrite(outputPins[1], LOW);
digitalWrite(outputPins[0], LOW);

delay(500);
}
}

 

jentak*
hodnocení

0x

Tady to máš upravené.

/* čísla výstupných pinov */
byte outputPins[] = {0,1,7,8,9,10,11,12};
byte tlacitko
void setup()
{
for(int i=0; i<8;i++)
{
pinMode(outputPins[i], OUTPUT);
digitalWrite(outputPins[i], LOW);
}
//digitální vstup(jakýkoliv volný, kteý je k dispozici)
pinMode(3, INPUT); //nastaví pin D3 jako vstupní
// analogový vstup (jakýkoliv volný, kteý je k dispozici)
pinMode(A3, INPUT); //nastaví pin A3 jako vstupní

}

void loop()
{
for(int i=0; i<7;i++)
{
digitalWrite(outputPins[i], HIGH);
delay(300);
digitalWrite(outputPins[i], LOW);
}
digitalWrite(outputPins[4], HIGH);
digitalWrite(outputPins[5], HIGH);
digitalWrite(outputPins[6], HIGH);
digitalWrite(outputPins[7], HIGH);
digitalWrite(outputPins[3], HIGH);
digitalWrite(outputPins[2], HIGH);
digitalWrite(outputPins[1], HIGH);
digitalWrite(outputPins[0], HIGH);
delay(2000);
digitalWrite(outputPins[4], LOW);
digitalWrite(outputPins[5], LOW);
digitalWrite(outputPins[6], LOW);
digitalWrite(outputPins[7], LOW);
digitalWrite(outputPins[3], LOW);
digitalWrite(outputPins[2], LOW);
digitalWrite(outputPins[1], LOW);
digitalWrite(outputPins[0], LOW);

delay(500);
tlacitko = digitalRead(3); // do proměnné se zapíše stav vstupu D3
if tlacitko != 0
{
// tady obsloužíš stisk tlačítka
}
// tady to pokračuje, když není nic stisknuto
}

Co myslíš tím umlčením? Že ty výstupy pojedou jen když bude stisknuté tlačítko? To byse muselo upravit ještě dál, nejlíp přes pomocnou proměnnou.


doplněno 12.06.18 06:59:

Koukněte do vnitřní pošty. Snad editor zachová formátování z IDE.


doplněno 12.06.18 07:17:

A dobrý stránky, ze kterých se dá čerpat jsou tyhle: arduino.cc/...

hodnocení

Já nevím, jak poděkovat. Děkuji, děkuji a zároveň se omlouvám, za zpoždění, ale měl jsem nějaké povinnosti okolo domu a nemohl jsem to zkoumat.

Ale teď k věci...tenhle kód tam nejde nahrát...zasekne se u řádku

void loop()

Ale abych to řekl velice jednoduše o co mi jde. Mám na domě 12 reflektorů rozdělených do dvou skupin a dva PIR detektory. Je to již funkční a stažené do rozvaděče. Chybí mi tam jen dát arduino jako mozek, aby opě sekce reflektorů na sepnutí PIR (jim přidělený) zahrály krátkou animaci a pak už se rozsvítily nastálo - dokud bude PIR sepnutý.

Původně jsem ještě chtěl dalším mnohapólovým přepínačem si přepínat různé druhy animací, ale už jsem z tohoto problému tak vyřízený, že budu už vděčný za to, když to bude dělat animaci stále stejnou (bez přepínače).

Pro jednoduchost používám tlačítka na vstupu a led na výstupu, protože jak mi to bude fungovat takhle na stole, tak to už pro mě nic není, začlenit to do rozvaděče k reflektorům a PIRkům

Tedy potřebuji: Sepnu a držím tlačítko (vím, jak ho zapojit) v A0 a na to se rozsvítí (a nejlépe zase zhasne, ale při nejhorším může zůstat svítit) LED v D13 (necelou vteřinu), pak v D12, pak D11, Pak D10 a pak D9 nakonec se všechny rozsvítí a zůstanou svítit, dokud nepustím tlačítlo v A0

A nezávisle na tom sepnu tlačítko v A1 a to samé se mi bude dít na výstupech jen ale ve třech skocích. Napřed se sepne LED D8 a s ní D5, pak D7 a s ní D4 a D3, pak D6 a s ni D2 a pak zase svítí vše dokud držím tlačítko A1, když ho pustím, Všechny Led zhasnou.

To že jdou některé výstupy společně je proto, že jsou některá světla za rohem, tak aby nečekaly, až na ně dojde řada a já tam zatím nezakop po tmě. Vím, že by to šlo ošetřit Hartvarově pomocí diod, ale když navhnu už tišťák, tak to bude jednou pro vždy dané...no a kdybych se v budoucnu rozhodl pro jinou animaci, tak ba to byl průser a nešlo by to softwarově řešit.

Ještě jednou moc děkuji Za Tvou ochotu a jestli mi pomůžeš, tak Budeš budeš zlatý člověk!

Michal

nikdo*

nemám moc zkušeností s ard. ale možná by pomohlo napsat, v jakém prostředí to arduino programujete(IDE, nebo nějaké jiné), Pokud používáte IDE, před nahráním SW do ARD tím tím pravým tlačítkem, ho nejdřív tím levým tlačítkem jen přeložit. A pokud to během překladu hlásí nějakou chybu, tak tady vypsat ty chyby.

hodnocení

Moc děkuji, ale když já nevím, co je prostředí? a co IDE? já používám program Arduino.exe víc tomu nerozumím

a nešla by tam tedy přidat ta promenná, aby mi to chodilo, jak potřebuji?

nikdo*

Jo, arduino.exe je to, čemu se říká IDE. Musíte počkat na jentak. na tohle si netroufám. V každém případě zkuste napsat, co vám to dole, v tom spodním okně, pod programem hlásí za chybu. Nahoře máte v řadě pět ikonek. První zleva je zatržítko, to jen přeloží SW. Druhé je šipka do prava, ta přeloží SW a nahraje do Ard. Dokud vám po stisku prvního tlačítka neprojde překlad bez chyby, nemá cenu dál něco podnikat. No a právě ty chyby při překladu se zobrazují v tom černém okně pod programem.

hodnocení

Moc děkuji, už jsem se posunul maličko jinam a založím trochu jinou otázku. Děkuji, Michal

jentak*

Četl jste tu vnitřní poštu?

hodnocení

Ano, už teď ano a opět děkuji, odpověděl jsem na ní. M.

 

jentak*
hodnocení

0x

Pošlete mi vnitřní poštou Email. Pošlu .INO. Budete to mít i s formátováním textu, a bude to lépe pochopitelné.

 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]