posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirkaÚčastník
máš 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