obsluha tlacitka v přerušení
Úvodní stránka › Fórum › Hardware › Arduino › obsluha tlacitka v přerušení
- Toto téma obsahuje celkem 7 odpovědí. Do diskuze (3 diskutující) se naposledy zapojil uživatel
posjirka a poslední změna proběhla před 7 roky a 7 měsíci.
-
AutorPříspěvky
-
27.12.2016 v 12:59 #9761
jpokorny12
ÚčastníkZdravím
Mám v plánu si udělat barevnou hudbu s arduinen. Asi bych tam chtěl tři filtry a přes arduino pwmkem řídit led pásek. A napadlo mě, že bych si tam přidal nějaký blikání 😛 nezávislé na hudbě. Měl bych tam tři tlačítka. A jedním bych přepínal aby to bylo závislé na audiu a nebo aby to nějak blikalo. A pak dvě tlačítka na přepínání těch programu (nezávislé na audiu) jak by to melo blikat. Jak udělat to přepínání programů, přes switche a tlačítkama zvyšovat nebo snižovat čítač. No ale kdybych chtěl použít ty stejné tlačítka třeba na změnu rychlosti programu. Jak to udělat? Děkuji za návrhy a nápady.
Jsme v tom začátečník27.12.2016 v 13:12 #9763posjirka
Účastníkna tlačítka se vykašli. použij přepínač (on/off) pro přepínání zváslosti na hudbě/oscilátor a pak otočný přepínač (ideálně BCD) pro přepínání předvoleb. BCD znamená, že jednotlivé polohy jsou řešeny binárně takže má třeba 16 poloh ,ale jen 4 kontakty. Třeba teto:
https://www.gme.cz/p-kdr10proč to udělat takto? ve smyčce loop() si nejdřív zjistíš, v jakém stavu je přepínač ovládání (hudba/oscilátor) a případně v jaké stavuje přepínač voleb (otočný) a podle toho dál pokračuješ ve smyčce.
Tím máš zajištěno, že to tak bude i po vypnutí napájení, navíc nemusíš obsluhovat přerušení tlačítkem. Vše ostatní už je stejně shodne.27.12.2016 v 13:38 #9766jpokorny12
ÚčastníkSuper diky s tím spínačem mě to nenapadlo. Diky
A jak bych vyřešil tu změnu rychlostí blikání. Kdybych měl tlačítka plus mínus a ty programy bych mel udělané přes delay , nebo to je blbost. Protože kdybych měl pomalou změnu barvy tak bych to tlačítko musel držet dlouho než by se ta rychlost změnila.diky27.12.2016 v 17:25 #9767posjirka
Účastníkpro autonomní blikání )oscilátor) bych použil časovat timer1.
tady je tutorial použití včetně knihovny:
https://playground.arduino.cc/Code/Timer1hestli chceš jen nastavovat rychlost blikání tak bych použil místo otočného přepínače raděčji potenciometr. připojený na analogový vystup (v unu jich máš 6). Do pomocné proměnné třeba „oldPot“ by sis zavedl předchozí hodnotu potenciometru.
V každé smyčce loop() bys zkonstroloval jestli nové nastavení se liší od starého (analogRead(A0) != oldPot) a pokud ano tak si přenastav časovat Timer1.
Takže ve výsledku bys použil přepínač na volbu funkce (zvuk/automat) a potenciometr na nastavení rychlosti. U toho potenciometru jen pozor musíš to uědlat trochu hrubší krok, protože půspbí hodně prvků, které nastavení potenciometru ovlivňují (teplota okolí, stabilita referenčího napětí, odchylka LBA kroku, …).28.12.2016 v 21:18 #9785play
Účastník#define BUTTON_SELECT_MOD 2 #define BUTTON_SPEED_NEXT 3 #define BUTTON_SPEED_BACK 4 #define MAX_SPEED_BLINK 10 #define MODE_AUDIO 0 #define MODE_BLINK 1 bool BUTTON_SELECT_MOD_PRESSED = false; long int TIME_BUTTON = 0; //VHODNÉ ULOŽIT DO EEPROM int SELECT_MODE = MODE_AUDIO; int SPEED_BLINK = 0; //______________________ void setup() { pinMode(BUTTON_SELECT_MOD, INPUT); pinMode(BUTTON_SPEED_NEXT, INPUT); pinMode(BUTTON_SPEED_BACK, INPUT); } void loop() { //___________PŘEPÍNÁNÍ AUDIO A BLIKÁNÍ_________[VYUŽITÍ I PRO ON/OFF] if (digitalRead(BUTTON_SELECT_MOD) == HIGH) { if (BUTTON_SELECT_MOD_PRESSED == false) { BUTTON_SELECT_MOD_PRESSED = true; if (SELECT_MODE == MODE_AUDIO) { SELECT_MODE = MODE_BLINK; } else { SELECT_MODE = MODE_AUDIO; } } } else { BUTTON_SELECT_MOD_PRESSED = false; } //____________________________________________ if (SELECT_MODE == MODE_AUDIO) { // KÓD KDYŽ JE AUDIO } else if (SELECT_MODE == MODE_BLINK) { //___________NASTAVENÍ RYCHLOSTI_________ if (digitalRead(BUTTON_SPEED_NEXT) == HIGH or digitalRead(BUTTON_SPEED_BACK) == HIGH) { if (millis() >= TIME_BUTTON + 1000) { TIME_BUTTON = millis(); if (digitalRead(BUTTON_SPEED_NEXT) == HIGH and SPEED_BLINK <= MAX_SPEED_BLINK) SPEED_BLINK++; if (digitalRead(BUTTON_SPEED_BACK) == HIGH and SPEED_BLINK >= 0) SPEED_BLINK--; } } else { TIME_BUTTON = millis() - 1000; } //_____________________________________ } }
30.12.2016 v 9:40 #9810jpokorny12
ÚčastníkDíky moc
Ale asi udělám variantu s přepínačem a s potenciometrem a s BCD přepínačem pro změnu programu blikání. Protože nevím, jak bych udělal v tom kodu dvě funkce pro jedno tlačítko. Díky28.1.2017 v 9:29 #10251jpokorny12
ÚčastníkZdravím
Tak nějak jsem udělal schema a zkoušel jsem to. Ale když vystupy z filtru připojím na arduino, tak i když tam není žádný signál, tak pořád je tam hodnota kolem (400)? Nevadí, když ty filtry a OZ napájím jiným zdrojem (25V), ale společnou zem mají.
Nevíte co s tím? Nebomám zkusit dát do cesty kondenzátor? DěkujiTady je schema
Schema28.1.2017 v 17:58 #10255posjirka
Účastníkto musíš vědět ty. jestli tam ten signál je nebo neni …
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.