posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirkaÚčastník
no ve výsledku tím autor myslel že si pošleš s kodem i jeslti počet log.1 je sudý „sum=0“ nebo lichý „sum=1“- Pak si spočítáš počet log.1 v tebou přijatých datech a porovnáš. pokud nesouhlasí sudá/lichá máš špatná data a nereaguj na ně. Je tu otázka zda máš duplexní komunikaci, nebo jen posloucháš/přijímáš. V tu chvíli totiž moc neovlivníš výsledek a max. můžeš čekat na lepší konstelaci hvězd. To je pak důležité někde indikovat…. no a pokud máš duplexní nebo aspoň halfduplex tak si prostě požádáš o nová data a to tak dlouho než to to sedne. jak asi tušíš může se stát že i tak nedostaneš 100% výsledek, ale pravděpodobnost stoupá ….
posjirkaÚčastníka one wire sběrnice ?
posjirkaÚčastníknašel jsem použití TLC5940 jako expanderu pro 16 serv:
https://circuits.io/circuits/211975-arduino-servo-expander
neprověřoval jsem to, ale můžeš to zkusit …posjirkaÚčastníkjá bych použil wifi modul esp8266 u každého čidla (ten tech 10 m zvládne), nebo použít třeba arduino mini jako převodníky různých čidelna např.i2C nebo RS485.
posjirkaÚčastníknejsem si jistý, že to tak jednoduše půjde. Servo potřebuje pro svou funkci signál o frekvenci cca 50hz a log. 1 o délce 1-2ms (1=0st, 2=180st)
Při přepínání bys musel zajistit detekci všech signálů zároveň a pak je postupně spouštět.
Mimochodem pokud si spočítáte 20ms (50hz) na max.2ms/servo tak dostanete max 10serv.
Toto se týkalo klasických analogových serv. digitální mají trochu jinou logiku, ale i cenu …posjirkaÚčastníkve výsledku ani nepotřebuješ žádný další modul.
Použij bud PC nebo mobil, kde máš bluetooh , naistaluj si nějáký bluetooth terminál (já mám windows mobile a tam je BTterminal) a pošli si z arduina něco přes bluetooth a v mobilu to musíš dostat presne v tom stavu.
Navíc i zpětně si můžeš poslat nějákou zprávu,nebo kod jako v tom ovládání a musí to fungovat … tady asi žádná rada nebude přesná a je třeba vyzkoušet všechno co jde …posjirkaÚčastníkno já se u té optiky bojím spíš soli, nebo poškrábání opvrchu plexiskla. To už může být vyhodonoceno jako dotyk. U té kapacity si nejsem jistý s funkčnosti ve vlhkem prostředí. citlivost můžeš vyzkoušet pomocí jedné knihovny, kdy arduino proměníš v kapaciní snímač/klávesnice:
http://playground.arduino.cc/Main/CapacitiveSensor?from=Main.CapSensezjistíš, že to není tak jednoduchý. se zvětšující se vzdáleností se snižuje kapacita mezi plochou a tvým prstem. na tento drobný rozdíl pak nestačí detektor vyhosnoti změnu frekvence oscilátoru. podívej se n theremin , ten funguje napodobném pricnipů. jen to jeho odstínění je brutus. žijeme se světě el.mag smogu a když zvětšíš „citlivost“ budeš chytat kdejaký bordel (rádio, dálk. ovl., metoestanicie, wifi,..) a není zajištěna spolehlivost. I na lodi máš vysílačku, možná něco na principu radaru, el.motory, ….
posjirkaÚčastníkještě mě napadá použít něco totálně odděleného, jako třeba mobil + bluetooth.
Optické čidla se zanesou do soli a nebudou fungovat, magnetické kontakty nejsou tak nic extra. u tšch kapacitních senzoru, nevím jak se budou chovat na lodi …posjirkaÚčastníkno zvažoval jsem bu´d použití gumy nad panel nebo gumovou klávesnici. Tu ale stejně neutěsníš (reps. její přívod). Co takhle použít anitvandal tlačítka. Ty mají mít krytí IP65:
https://www.gme.cz/antivandal-spinac-hbgq16ph-10-j-nposjirkaÚčastníka kolik klaves potrebujes?
posjirkaÚčastníkzkušenosti s tím nemale ale našel jsem ještě toto:
http://www.zive.cz/clanky/pojdme-programovat-elektroniku-rtc-hodiny-aneb-kdyz-arduino-vi-kolik-je-opravdu-hodin/sc-3-a-184666/default.aspxposjirkaÚčastníkkdyž jsem to porovnal s examplem:
http://arduino8.webnode.cz/news/lekce-27-adruino-a-napajeni-z-baterie-aneb-jak-uspat-arduino/
tak máš řešení úplně jinak. Třeba pořadí příkazů ve sleepNow(), v režimu SLEEP_MODE_PWR_DOWN je interní časovač mrtvý a nelze se na něj odkazovat, nechápu princip attachInterrupt(0,alarmIsr,CHANGE); v kodu.
Spíš napiš co chceš aby to dělalo a můžeme se na to podívat ..posjirkaÚčastníka jak se nefunkcnost projevuje? nepripojis ho do site nebo ti posila chybne hodnoty?
vetsinou to byva problem IP adresy kdy ti koliduje z nejakym jinym zarizenim v tomto pripade asi switchem
posjirkaÚčastníkvidim dva mozne problem
bud je spatny bluetooth modul nebo seriova komunikace. ruseni rovnou odstreluji protoze to je podle me blbost. pokud bych mel sazet tipoval bych seriova komunikace.
zkus si nechat poslat na serial monitor vsechno co bluetooth prijme a over si tvoji teorii.
pak budes vedet.
no nelibi se mi ze pouzivas interni uart. predpokladam ze mas desku treba arduino nano kde je na tomto portu usb prevodnik. sam o sobe je v pohode ale nemuzes vyuzivat tento port pro pc i pro bluetooth. nikde si to nepsal jen upozornuji.
no pak jedine stabilita krystaly …posjirkaÚčastníknech to být, rád pomůžu. jestli chceš něják přispět dej sem pak svuj projekt ať se mohou inspirovat jiní. I jednoduchá věc může ulehčit život 🙂
ps doporučuju smazat to tel. číslo. asi není důvod podezřívat někoho ze zneužití, ale at máš i ty klid 🙂
posjirkaÚčastníkmáš pravdu. v poslední době používám simulator arduina místo HW řešení a nedocvaklo mě, že používá pro vstupy tlačítek přímo log.1/0, nikoliv spínače na zem.
Patří tam do setup() při nastavení modu pinu použít „INPUT_PULLUP“ místo „INPUT“ u všech tlačítek.// casovac s 3 predvolbou casu // by JP. 2017 // v02 - doplnení pull up interních odporu #define LED 13 // led dioda #define TLACITKO1 10 // tlacitko proti zemi #define TLACITKO2 11 // tlacitko proti zemi #define TLACITKO3 12 // tlacitko proti zemi void setup() { pinMode(LED, OUTPUT); pinMode(TLACITKO1, INPUT_PULLUP);// v02 pinMode(TLACITKO2, INPUT_PULLUP);// v02 pinMode(TLACITKO3, INPUT_PULLUP);// v02 } void loop() { if(digitalRead(TLACITKO1) == 0){ // po stistku tlacitka 1 volej funkci caosvace se zpozdenim 5s casovac(TLACITKO1, 5000); } if(digitalRead(TLACITKO2) == 0){ // po stistku talcitka 2 volej funkci caosvace se zpozdenim 10s casovac(TLACITKO2, 10000); } if(digitalRead(TLACITKO3) == 0){ // po stistku tlacitka 3 volej funkci caosvace se zpozdenim 15s casovac(TLACITKO3, 15000); } } void casovac(int TLACITKO, unsigned long ZPOZDENI) { // rozsvit LED a zapis si cas startu unsigned long OLDTIME = millis(); digitalWrite(LED, HIGH); // cekej dokud neni uvolnene tlacitko while(digitalRead(TLACITKO) == 0) { delay(100); // odstraneni zakmitu tlacitka } // cekej dokud nepretece nastaveny cas while(millis() < (OLDTIME + ZPOZDENI)) { // pokud stisknu nejake tlacitko ukonci casovac tim ze vynulujes nastavenou dobu zpozdeni if(digitalRead(TLACITKO1) == 0 || digitalRead(TLACITKO2) == 0 || digitalRead(TLACITKO3) == 0) { ZPOZDENI = 0; } } // zhasni LED digitalWrite(LED, LOW); delay(1000); // zabraneni nechtenemu startu noveho cesovani }
snad tě to někam posunulo a budeš mít z čeho čerpat.
posjirkaÚčastníkje to trochu primitivní řešení, ale aspoň se na něm můžeš něco naučit. Popisy jsou snad jasné a je tam odstraněno hned několik zvláštoností ze základů programování (zákmity tlačítek, nechtěné nastarotvání nového časování atd. spíš jde o věci, které by tě možná v začátku nenapadly, ale pak by ti způsobovali problémy …snad jsem pomohl
posjirkaÚčastníkměl jsem trochu honku, ale viděl bych to takto:
// casovac s 3 predvolbou casu // by JP. 2017 // v01 #define LED 13 // led dioda #define TLACITKO1 10 // tlacitko proti zemi #define TLACITKO2 11 // tlacitko proti zemi #define TLACITKO3 12 // tlacitko proti zemi void setup() { pinMode(LED, OUTPUT); pinMode(TLACITKO1, INPUT); pinMode(TLACITKO2, INPUT); pinMode(TLACITKO3, INPUT); } void loop() { if(digitalRead(TLACITKO1) == 0){ // po stistku tlacitka 1 volej funkci caosvace se zpozdenim 5s casovac(TLACITKO1, 5000); } if(digitalRead(TLACITKO2) == 0){ // po stistku talcitka 2 volej funkci caosvace se zpozdenim 10s casovac(TLACITKO2, 10000); } if(digitalRead(TLACITKO3) == 0){ // po stistku tlacitka 3 volej funkci caosvace se zpozdenim 15s casovac(TLACITKO3, 15000); } } void casovac(int TLACITKO, unsigned long ZPOZDENI) { // rozsvit LED a zapis si cas startu unsigned long OLDTIME = millis(); digitalWrite(LED, HIGH); // cekej dokud neni uvolnene tlacitko while(digitalRead(TLACITKO) == 0) { delay(100); // odstraneni zakmitu tlacitka } // cekej dokud nepretece nastaveny cas while(millis() < (OLDTIME + ZPOZDENI)) { // pokud stisknu nejake tlacitko ukonci casovac tim ze vynulujes nastavenou dobu zpozdeni if(digitalRead(TLACITKO1) == 0 || digitalRead(TLACITKO2) == 0 || digitalRead(TLACITKO3) == 0) { ZPOZDENI = 0; } } // zhasni LED digitalWrite(LED, LOW); delay(1000); // zabraneni nechtenemu startu noveho cesovani }
posjirkaÚčastníkobávám se, že je to všechno co tato knihovna umí. Pokud bys chtěl něco dodatečného, tak musíš buď knihovnu pozměnit, nebo napsat zvlášť funkci …
Co přesně ti nejde, nebo co potřebuješ ?posjirkaÚčastníka kterou knihovnu jsi použil? resp. odkud jsi jí stáhnul … abych parafrázoval jednu českou hlášku:
„není knihovna, jako knihovna“ 🙂posjirkaÚčastníkrozmysli si, jestli má v pruběhu časování po stisku tlačítka skončit, nebo ignorovat.
Každé má jiné řešení …posjirkaÚčastník1. máš tam chybu, že jsou všechny podmínky vnořené do sebe a vlastně se na ně nikdy nedostane. Musíš si navyknout, že se páry složených závorek dávají do stejné úrovně aby si získla přehled co je co
když uděláš např.:loop(){ {{ } }
tak nezjistíš, které z nich tvoří pár. udělej to takto:
loop(){ { { } }
a hned vidíš, co je s čím.
2. používej tady párvoou značku CODE pro vkládání kodu, jinak se ti rozhodí jak stylizace, tak je tu problém s některými znaky (přepisují se ne jiné a pak je kod nečitelný).
3. neměl jsi v kodu vyhodnocení tohot času, jen podmínky
4. nesprávně jsem si přečetl tvůj požadavek. Takto to nepůjde. musíš si říct co to má dělat ve chvíli když je navolen nějáký čas, evětlo svítí a ty zmáčkenš předvolbu jiného času. Má přestat, prodloužit čas o převolbu, nebo nereagovat?
Je to důležite k rozhodnutí stavby programu ..posjirkaÚčastníknení to tak složité. Nadefinuješ si 3 sady proměnných:
OLD_TIMEx
CEKAMx
MYTIMEx
kde „x“ je číslo sady.
Pak rozkopíruješ a poupraviš celý obsah ve smyčce LOOP()
to je vše …
Případně to vyřešíš pomocí funkcí
Jestlit o nedáš, nezoufej a dej tomu čas, nikdo neví všechno hned.
Chce to čas s zkušenosti. Já se taky pořád učím a zřejmě tomu nebude konec 🙂posjirkaÚčastníkkdyž myslíš … já schema nemám …
posjirkaÚčastníkto mystriks: to je trochu off topic ….
posjirkaÚčastníkhod sem ten program co jsi napsal a mrkenem na to …
posjirkaÚčastníkviděl bych to na reinstal Arduina IDE případně použití jiné knihovny pro ATTINY
posjirkaÚčastníkasi bych spíš volil třeba BUZ11:
https://www.gme.cz/unipolarni-tranzistor-buz11-to220To schéma je navržené pro unipolární tranzistory (FET) a proto nemá ani omezovací odpory mezi arduinem a bází (GATE). I když bych tam radši dal třeba 220R až 10k.
Mělo by to jít s celým rozsahem. Doporučuji zlatý střed 1K0-posjirkaÚčastníknerozumím otázce. Co programuješ za procesor ?
posjirkaÚčastníkDUE je na 3,3V UNO na 5V. Tady bych hledal chybu. Jinak ten display nemůže blikat. Z ARduina si bere jen data co má zobrazit a pak už jede autonomně. Sám si přepína segmenty, reguluje svítivost atd.
Leda že bys mu nesutálě měnil hodnoty (myslím tím víc než 5x/s). Pak by mohl zablbnout, ale spíš to vidím na to napájecí napětí. -
AutorPříspěvky