Close

posjirka

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 15 příspěvků - 76. až 90. (celkem z 481)
  • Autor
    Příspěvky
  • odpověď na: Časovane spinaní pinu #10954
    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.

    odpověď na: Časovane spinaní pinu #10946
    posjirka
    Účastník

    je 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

    odpověď na: Časovane spinaní pinu #10945
    posjirka
    Účastník

    mě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
    }
    odpověď na: Adresace I2C #10928
    posjirka
    Účastník

    obá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š ?

    odpověď na: Adresace I2C #10924
    posjirka
    Účastník

    a kterou knihovnu jsi použil? resp. odkud jsi jí stáhnul … abych parafrázoval jednu českou hlášku:
    „není knihovna, jako knihovna“ 🙂

    odpověď na: Časovane spinaní pinu #10921
    posjirka
    Účastník

    rozmysli si, jestli má v pruběhu časování po stisku tlačítka skončit, nebo ignorovat.
    Každé má jiné řešení …

    odpověď na: Časovane spinaní pinu #10912
    posjirka
    Účastník

    1. 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 ..

    odpověď na: Časovane spinaní pinu #10906
    posjirka
    Účastník

    není 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ík

    když myslíš … já schema nemám …

    posjirka
    Účastník

    to mystriks: to je trochu off topic ….

    odpověď na: Časovane spinaní pinu #10901
    posjirka
    Účastník

    hod sem ten program co jsi napsal a mrkenem na to …

    odpověď na: USBasp #10887
    posjirka
    Účastník

    viděl bych to na reinstal Arduina IDE případně použití jiné knihovny pro ATTINY

    posjirka
    Účastník

    asi bych spíš volil třeba BUZ11:
    https://www.gme.cz/unipolarni-tranzistor-buz11-to220

    To 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-

    odpověď na: USBasp #10883
    posjirka
    Účastník

    nerozumím otázce. Co programuješ za procesor ?

    odpověď na: Adresace I2C #10882
    posjirka
    Účastník

    DUE 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í.

Aktuálně je na stránce zobrazeno 15 příspěvků - 76. až 90. (celkem z 481)