Zbyšek Voda
Vytvořené odpovědi
-
AutorPříspěvky
-
Zbyšek VodaSprávce
Pojďme tedy pokračovat dál 🙂 Koukám na dokumentaci, tak snad ji dobře chápu. (http://playground.arduino.cc/Code/Keypad)
Prozkoumejme pořádně funkci keypadEvent.
void keypadEvent(KeypadEvent eKey){ for (int i =0; i = 5; i++){ admpw[i] = keypad.getState(); Serial.println(admpw[i]); } }
Ta je zavolána kdykoliv, když dojde ke změně stavu klávesy (uvolnění, stisknutí).
Funkce getState() vrací hodnotu podle toho, co se s keypadem děje – vrací hodnoty
IDLE, PRESSED, RELEASED a HOLD. Vy tedy budete ve funkci keypadEvent testovat, jestli je getState() rovna PRESSED a poté zapisovat hodnotu stisknuté klávesy do pole admpw[] na patřičné místo (další v pořadí).Takže bych postupoval následovně: vytvořte si na začátku programu proměnnou
int pos = 0;
, která bude udávat pozici načteného znaku. Při stisknutí tlačítka dojde k uložení stisknutého tlačítka do pole admpw na index pos a navýšení proměnné pos o 1. Musíte si také pohlídat, aby pos měla hodnoty 0 – 4. To se dá zařídit operátorem modulo – %.void keypadEvent(KeypadEvent eKey){ if(keyboard.getState == PRESSED){ admpw[pos] = keyboard.getKey(); pos = (pos + 1) % 5; } }
Takhle by to podle mě mohlo jít 🙂
Zbyšek VodaSprávceDobrý den, ve funkci keypadEvent máte podivnou ukončovací podmínku cyklu for.
Máte tam:for (int i =0; i = 5; i++)
Tedy cyklus probíhá, dokudi = 5
. V každém průchodu se tedy do i přiřadí hodnota 5, je vyhodnocena jako true a cyklus opakuje znova – tedy se zacyklí.Asi je to překlep a chtěl jste napsat
i < 5
🙂Pokud byste chtěl testovat rovnost, tak musíte použít operátor
==
,=
je přiřazení hodnoty do proměnné.Zbyšek VodaSprávceDobrý den, já mám dobrou zkušenost s tímto převodníkem http://www.hwkitchen.com/products/logic-level-converter/. Použil jsem ho v několika projektech a funguje bez problému.
Zbyšek VodaSprávceŘešení: V době programování Arduina odpojit cokoliv, co je připojeno na piny RX a TX (0 a 1). Jak psal Dreamer.
Zbyšek VodaSprávcePopřípadě ten přeposílač mezi sériovými linkami (Serial a Serial1) vypadá takto:
void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { while (Serial1.available()) { Serial.write(Serial1.read()); } while (Serial.available()) { Serial1.write(Serial.read()); } }
ESP pak nepřipojujete na piny RX a TX, ale RX1 a TX1 – RX a TX jsou totiž napojené přímo na převodník z PC. Více linek ale mají jenom některé desky – jak jsem psal – Arduino Mega, Leonardo…
Zbyšek VodaSprávceDobrý den,
musíte mít připojené RX na TX a TX na RX (ne RX na RX apod.)Potom už jenom přes sériovou linku (Serial.println…) posíláte do ESP AT příkazy (za předpokladu, že máte v desce původní firmware). At příkazy viz: http://www.pridopia.co.uk/pi-doc/ESP8266ATCommandsSet.pdf.
Pokud máte Arduino s více sériovými linkami (Mega, Leonardo, …), můžete do něj nahrát program, který bude sloužit jenom jako přeposílatel mezi PC a ESP, kterému přes Serial Monitor můžete posílat AT příkazy, ozkoušet si je a až potom je natvrdo napsat do programu. Pěkný návod je například zde: http://dalpix.com/blog/connecting-your-arduino-wifi-esp-8266-module
Zbyšek VodaSprávceDobrý den,
zrovna Sparkfun má dokumentaci zpracovanou opravdu kvalitně 🙂
Tady je například stránka produktu: https://www.sparkfun.com/products/9721Najdete tam odkaz na Datasheet i ukázkový kód.
Zbyšek VodaSprávceO té možnosti ovládání zařízení vzdáleně jsem psal tady: https://bastlirna.hwkitchen.cz/programovani-webovych-rozhrani-pro-arduino/.
Zařízení vystupuje v roli klienta a periodicky se připojuje na stránku a zkoumá například nějaký text – když narazí na L, tak motor vypne, když na H, zapne apod.
Stejně může fungovat informování o jeho stavu – když se stav změní, zaloguje se změna na stránku.
Zbyšek VodaSprávcePostup je sepsaný v odkazech, které jsem vám poslal.
Zbyšek VodaSprávceMáte dvě možnosti. Buď ESP budete používat ve stavu, v jakém vám přišlo, nebo ho přeprogramujete.
Pokud ho chcete používat v původním stavu, ovládá se ESP pomocí AT příkazů. AT příkazy se do ESP posílají přes sériovou linku a můžete jimi například říct, kam se má modul připojit, v jakém módu má pracovat a další. Tato metoda vám dovolí s modulem dělat všechny potřebné základní operace.
Docela pěkně je tento postup popsán například zde: http://www.instructables.com/id/Using-ESP-01-and-Arduino-UNO/?ALLSTEPS, popřípadě tady: https://create.arduino.cc/projecthub/ROBINTHOMAS/programming-esp8266-esp-01-with-arduino-011389.Druhá možnost je programovat přímo ESP, ale to pak nepotřebujete Arduino a nevím, jestli to ve vašem konkrétním shieldu lze 🙂
Jak na to je vidět například zde: https://www.youtube.com/watch?v=P_ecAFpUADU.Zbyšek VodaSprávceDobrý den, asi bude problém v tom, že není WiFi shield jako Wifi Shield 🙂
On totiž oficiální Arduino WiFi shield (https://www.arduino.cc/en/Main/ArduinoWiFiShield) je úplně jiný než ten, který jste použil.Na vašem shildu je modul ESP8266, takže spíš hledejte „Arduino and ESP8266“ 🙂
Zbyšek VodaSprávceDobrý den, jakou desku máte?
Nemůžou se vám tlouct piny použitých periferií?Třeba deska Arduino Leonardo používá pin 2 pro I2C komunikaci.
Zbyšek VodaSprávceJestli se nepletu, tak se toto u Leonarda občas stane.
Zkuste do něj nahrát nějaký jednoduchý kód, třeba jenomvoid setup(){} void loop(){}
a to tak, že před stisknutím „Upload“ v IDE zmáčkněte na desce tlačítko Reset, až poté dejte Upload v IDE. Jakmile se dole ve stavovém řádku IDE objeví Uploading, tak tlačítko reset pusťte.
Zbyšek VodaSprávceDobrý den, tak ještě zkuste nasdílet váš kód 🙂
Zbyšek VodaSprávceNení zač. Pokud se vám teď nechce prokousávat teorií, můžete použít kód z té sekce Interrupt Example (the Encoder interrupts the processor). Uses both Interrupt pins. Proměnná encoder0Pos udává polohu enkodéru – ve vašem případě plní funkci vaší proměnné counter.
-
AutorPříspěvky