Zbyšek Voda
Vytvořené odpovědi
-
AutorPříspěvky
-
Zbyšek Voda
ÚčastníkKdyž se koukám do návodu, tak ani nemusíte odpojovat shield. Stačí při programování přepnout oba přepínače na shieldu do pozice OFF. Potom naprogramujete Arduino (takže zvolíte desku Arduino UNO) a přepnete přepínače zpět na ON. Podrobněji je postup popsán ZDE.
Myslím si, že ta propojka není nutná. Zkuste to bez a uvidíte 🙂
Zbyšek Voda
ÚčastníkZkuste na čas programování rozpojit sériovou linku, popřípadě úplně odpojte celý shield.
Programování totiž probíhá tak, že USB převodník převádí „příkazy“, které přicházejí z PC a posílá je přes sériovou linku do čipu Arduina. Jelikož ale k této sériové lince máte připojené i ESP, může to způsobovat problémy.Zkuste to a uvidíme 🙂
Zbyšek Voda
ÚčastníkDobrý den,
samotné Arduino vám tedy funguje v pořádku (třeba na blikání LED)?Zkoušel jste postupovat podle návodu k setu?
Zbyšek Voda
ÚčastníkNe všechny datové signály můžete připojit přímo…
TX ESP můžete na RX Arduina připojit – 3.3V je na příjmu identifikována pořád jako 1.
Ale opačný směr (TX Arduina -> RX ESP) už je nutné připojit přes rezistor/dělič!Sériová linka Arduina funguje na 5V, kdežto sériová linka ESP na 3.3V.
Zbyšek Voda
ÚčastníkDobrý den, TFT displeje často používají 16-bit barevný režim.
Podívejte se sem – http://www.willamette.edu/~gorr/classes/GeneralGraphics/imageFormats/. Pod „16 bit color“ je tam tento režim popsaný.Zkráceně: Jak to funguje?
Na popis barvy máte celkem 16 bitů. 5 na červenou, 6 na zelenou, 5 na modrou (lidské oko je na zelenou citlivější, proto má o jeden bit více). Bity jsou uspořádány takto:|r|r|r|r|r|g|g|g|g|g|g|b|b|b|b|b|
Jak dosáhnout barev?
Na červenou a modrou máte 5 bitů – tedy hodnoty 0 – 31
Na zelenou 6 bitů – 0 – 63Kod:
uint16_t barva(int r, int g, int b){ r = r % 32; g = g % 64; b = b % 32; r = r << 11; g = g << 5; return r | g | b; }
Tedy
uint16_t(0,0,0)
vrátí hodnotu černé.Zbyšek Voda
ÚčastníkSouhlasím s Posjirka. Co jsem četl po cizojazyčných fórech, tak ESP sice 5V snese, ale většinou ne na dlouho.
Můžete zkusit s ESP komunikovat na různých rychlostech. Vyzkoušejte všechny možné – od 9600 po 115200. Rychlost komunikace se může lišit podle typu firmware – většinou to je jedna z: 9600, 57600, 115200.
Zbyšek Voda
ÚčastníkDobrý den,
Arduino většinou běží na 5V, ESP na 3.3V. ESP můžete napájet z 3.3V pinu arduina, ale také potřebujete úrovně převést na sériové lince (RX, TX).Dá se to udělat pomocí děliče napětí, ale spolehlivější je nějaký převodník, například: http://www.hwkitchen.com/products/logic-level-converter/
Zbyšek Voda
ÚčastníkZbyšek Voda
ÚčastníkPošlete sem prosím fotku toho senzoru, děkuji.
Je to čidlo na měření vzdušné vlhkosti, nebo vlhkosti půdy?Zbyšek Voda
ÚčastníkDobrý den, v první řadě musíte uvést typ senzoru (nějaké číslo, označení…). Bez toho se dál nedostaneme.
Zbyšek Voda
ÚčastníkDobrý den, té „děravé desce“ se říká nepájivé kontaktní pole a slouží právě k tvorbě obvodů bez nutnosti pájení.
Po obvodu desky jsou vetšinou piny propojené ve dvou řadách. Poté obsahuje deska „uprostřed“ spoustu sloupců pinů, které jsou vzájemně propojené. Asi nejlépe je princip patrný z obrázku – viz ZDE.
Tedy tím, že zastrkáte nožičky součástek do patřičných sloupců je propojíte a můžete tak sestavovat obvody 🙂
Zbyšek Voda
ÚčastníkDobrý den, tu tvorbu grafu z dat ukazuji třeba zde: https://bastlirna.hwkitchen.cz/programovani-webovych-rozhrani-pro-arduino/
Zbyšek Voda
ÚčastníkDobrý den, něco podobného chystám. Nebude to hned, ale dostanu se k tomu 🙂
Zbyšek Voda
ÚčastníkTakže to bude spíš něco jako:
if(Serial.available()){ prijato = Serial.read(); if(prijato == start){ prijato = Serial.read(); while(prijato != stop){ prijato = Serial.read(); //zpracování přijatých dat } } }
Zbyšek Voda
ÚčastníkŘekl bych, že tím Posjirka myslel to, že si vyberete dva znaky, které budou ohlašovat začátek a konec posílaného řetězce – ty budou vždy stejné, ať budete posílat cokoliv.
Aby nemohlo dojít k tomu, že budete posílat data, která by mohla obsahovat počáteční, či koncový znak, navrhuje použít netisknutelné znaky – například ty, které mají v ASCII tabulce hodnotu 1 a 2. char(1) a char(2) tedy reprezeentují dva znaky s touto hodnotou.
Mějme tedy dva znaky:
char start = char(1); char stop = char(2);
Obě strany pak budou vědět, že to, co přijaly mezi znaky 1 a 2 je požadovaná zpráva.
Tedy pošlete start data stop.Lepší? 🙂
Zbyšek Voda
ÚčastníkDobrý den, pokud vím, tak ne.
Musíte použít ifif(cislo > 2 && cislo < 6){...}
Popřípadě by šlo udělat
switch (Cislo) { case 3: case 4: case 5: …..; break; ….. }
Ale to asi není požadované řešení 🙂
Zbyšek Voda
ÚčastníkBude to jednodušší, když se s námi podělíte o kód 🙂
Zbyšek Voda
ÚčastníkTo vypadá dobře:)
Zbyšek Voda
ÚčastníkFunkci „nepřetíkat“ nedonutíte, ale můžete s tím v kódu počítat.
Když najednou funkce millis nevrací něco přes čtyři miliardy (kdy přetéká),
ale jede od nuly, musíte s tím v programu počítat a například si vynulovat nějaký čítač, nebo podobně.Zbyšek Voda
ÚčastníkDobrý den,
na jakých rychlostech jste s moduly komunikoval?
Podle verze firmware se rychlost může lišit: 9600, 57600, 115200.Zbyšek Voda
ÚčastníkNejvětší problém bude v tom, že máte funkce getShort() a další deklarované UVNITŘ funkce loop().
Funkce musíte deklarovat mimo tělo ostatních funkcí:)
Zbyšek Voda
ÚčastníkDobrý den, ještě nám sem prosím zkopírujte text chybové hlášky.
DíkyZbyšek Voda
ÚčastníkAno. Nepůjde.
Máte pravdu posjirka. Zákmity jsou potvory.
Ještě ideálnější řešení by (podle mě) bylo použít moje řešení společně s vaším čekáním uvnitř podmínky.Zbyšek Voda
ÚčastníkTa část
stav1 == true && predStav1 != stav1
slouží k tomu, aby systém reagoval při stisku tlačítka. (Tj. jedenkrát při změně z LOW na HIGH).Pokud je tedy tlačítko stisknuto, dojde k zvětšení/zmenšení proměnné i o jedna.
Ta může být použita například jako index v poli, ve kterém máte uložené piny s LEDkami („rozsviť LED, která odpovídá rychlosti 3“)Zbyšek Voda
ÚčastníkTo bude něco jako
byte tlacitkoPlus = 5; byte tlacitkoMinus = 6; boolean stav1 = false; boolean predStav1 = false; boolean stav2 = false; boolean predStav2 = false; int i = 0; ... void loop(){ stav1 = digitalRead(tlacitkoPlus); if(stav1 == true && predStav1 != stav1){ i++; } predStav1 = stav1; stav2 = digitalRead(tlacitkoMinus); if(stav2 == true && predStav2 != stav2){ i--; } predStav2 = stav2; }
Zbyšek Voda
ÚčastníkA když pod
lcd.print(tempC);
přidáte
Serial.println(tempC);
Co se Vám po sériové lince vypíše?
Zbyšek Voda
ÚčastníkDobrý den, zkuste nám prosím pro jistotu poslat kód 🙂
Zbyšek Voda
ÚčastníkDobrý den, moc nerozumím vaší otázce. Zkuste ji prosím formulovat trochu jinak, děkuji.
Zbyšek Voda
ÚčastníkVkládám slíbený obrázek od posjirka.
Zbyšek Voda
ÚčastníkZatím je bohužel pro uživatele možné vložit obrázek pouze z externího zdroje.
Když mi ho ale pošlete na mail zbysekvoda@gmail.com, dám ho sem. -
AutorPříspěvky