Close

DavidTor

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 481. až 510. (celkem z 2,768)
  • Autor
    Příspěvky
  • 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: aktualizování firmwaru přes uart #10944
    Vojtěch Vosáhlo
    Účastník

    aktuálně používám atmega328p

    Používáte ji jako Arduino nebo jako čip samotný, programovaný třeba přes Atmel Studio?

    U psaní bootloaderu totiž moc arduina neuvidíte, ten se píše v GCC nebo Assembleru. Výhody oproti programu? On je vlastně sám program, ale je na přesně definovaném místě v paměti (úplně na konci) a procesor ho spouští jako první. Je to takový BIOS, on se stará o to aby se váš program rozjel tak jak má, je to takový startér.
    Zde je hezký článek o tom jak bootloader funguje a i ukázka velice jednoduchého kódu: Bootloader AVR

    Poté si můžete projít i bootloader který je v arduinu zde: Arduino bootloader

    proč to nejde tak, že za běku se vyvolá například přerušení, vyprázdní se ram, do ní nenahraje požadovaný kód a pak nenaprogramuje do příslušné paměti?

    Budu trošku tipovat ale řekl bych že hlavně kvůli tomu že váš program běží v nějaké smyčce, jakmile byste vyprázdnil ram a začal zapisovat cokoliv do paměti, smyčka by se roztrhla a program by stopnul takže byste nezapsal nic. Když máte v paměti bootloader i program, běží si oba v jiné smyčce, paměť je rozdělena. Bootloader přesně ví kde je aby nezasáhl do své smyčky a když se rozjede, může bez problému zapisovat data do zbylé části paměti. Bootloader může také vykonávat funkce pro zápis bytů na specifické místo v paměti.

    3)ano i o této možnosti jsem přemýšlel ale uní zase nevím jak umožnit přeprogramovávání dvou procesorů za běhu (pak samozřejmě restart) nebo úpravy bootloaderu

    Proč přeprogramování dvou procáků? Mám jeden, třeba „aktualizační“ a druhý, „hlavní.“
    Hlavní procesor může běžet a dělat si co chce, jakýkoliv kód který mu dáte. Aktualizační procesor může zatím sedět a čekat, třeba počítat a každou hodinu kontrolovat internet zda tam není nový soubor. Pokud by se GPSR modulu měl dostávat i hlavní procesor, musel by být hlavní procesor ten co provádí váš program ale i počítá, pak by si sám zavolal ten aktualizační, ten by převzal modul a zjistil jestli je možný update. Pokud by update byl, aktualizační procesor by se zachoval jako programátor. Stahoval by byte po bytu z vašeho hex a zapisoval by ho do paměti toho druhého zatímco by ho držel v resetu.. Reset je samozřejmě proveden přivedením pinu RST na zem. Aktualizační procesor se nemusí sám nikdy aktualizovat.

    Tahle metoda má jednu velkou výhodu, nemusíte na ní znát C. Vše co jsem popsal by neměl být problém naprogramovat v Arduino IDE, je to prakticky jen komunikace po SPI, UART a přepínání pinů. Mohl byste začít třeba s příkladem v arduino IDE a to ArduinoISP, prakticky plní to co vy potřebujete, čte UART a vš přehraje do paměti čipu připojeného přes SPI, stačilo by to upravit tak aby četl z internetu.

    Pak by se možná dalo vymyslet i něco s existujícím arduino bootloaderem, možná mu posílat příkazy přes serial. Vzhledem k tomu že je to optiboot, měli by se dát i ty příkazy někde najít. Ale o tom vám bohužel moc neřeknu :/

    odpověď na: aktualizování firmwaru přes uart #10941
    michal123
    Účastník

    aktuálně používám atmega328p

    1)takovýto modul nemám, ale jestli to dobře chápu tak se to blíží možnosti 3)

    2)jakou výhodu má bootloader oproti programu za běhu nebo například přerušení?

    jak se píše vlastní bootloader?

    proč to nejde tak, že za běku se vyvolá například přerušení, vyprázdní se ram, do ní nenahraje požadovaný kód a pak nenaprogramuje do příslušné paměti?

    3)ano i o této možnosti jsem přemýšlel ale uní zase nevím jak umožnit přeprogramovávání dvou procesorů za běhu (pak samozřejmě restart) nebo úpravy bootloaderu

    mohl by jste mě prosím odkázat na nějaký pochopitelný kód?
    Děkuji, tyto odpovědi se mi moc líbí, jen nevím jak je realizovat (ani jednu)

    odpověď na: aktualizování firmwaru přes uart #10939
    Vojtěch Vosáhlo
    Účastník

    Dobrý den,
    napadá mě hned několik řešení tak se na ně pojďme podívat. Budu mluvit o procesoru který používáte jako AVR, použitá metoda programování by pak musela být nejspíš přes SPI.

    1) Je závislé na modulu který budete používat k připojení k internetu. Pokud by měl modul samotný možnost uploadovat do něj program (můžete měnit co běží v modulu), třeba nějaké ESP, mohl byste si napsat prográmek kde modul samotný nahraje program do AVR. Několik takových programů pro ESP již existuje.

    2) AVR by flashnulo samo sebe. Na tohle se používá bootloader, to je prográmek v paměti který je před samotným kódem a je spuštěn vždy při zapnutí čipu. Muselo by se tedy nejspíše naprogramovat to že AVR si řekne GPRS modulu o soubor, „stáhne“ si ho a pak do sebe nahraje. Tady je ale pár možných komplikací, nejsem nějaký bootloader expert a nevím jestli by se do samotného bootloaderu dala zapsat celá procedura, tzn. stahování jednotlivých bytů ze souboru a jejich vypalování do paměti. Možná by tedy bylo potřeba aby AVR nejdříve stáhlo soubor (asi někam extérně kvůli velikosti, SD nebo externí flash) a resetovalo se. Bootloader by pak jen přečetl externí paměť a nahrál vše do AVR.

    3) Mít nějaký čip, třeba další AVR, které bude dělat programátor pro váš hlavní čip. Prakticky byste mohl mít čip který funguje jako USBasp akorát přes internet. Tahle metoda by byla použitelná asi jen pokud by nefungovala 2, tedy provedení všeho v bootloaderu.

    Pokud existojou lepší metody tak jsem si jistý že mě někdo opraví a vylepší co jsem napsal.

    odpověď na: Časovane spinaní pinu #10937
    BlindP
    Účastník

    Napsal jsem jednu třídu, sice určenou pro časování čerpadel, ale pořád je to jen zpožděné vypnutí – pak by to mohlo být

    
    Pump p(vystupni_pin);
    
    if(!digitalRead(pin_tlacitka)) {
       p.Start(20);
    }
    zbyva = p.State();
    
    atd..

    BP

    odpověď na: Komunikace Ard. Mega 2560 a PC přes COM #10935
    Jan Hraba
    Účastník

    Přikládám foto boardu:

    Attachments:
    odpověď na: Komunikace Ard. Mega 2560 a PC přes COM #10933
    Jan Hraba
    Účastník

    Dobrý den,
    díky za reakci. K jednotlivým bodům:

    1. Netuším, jak zjistit přesný název a verzi aplikace, ale pouštím ji zadáním: https://create.arduino.cc/editor/, přičemž pracuji v cloudu.

    2. desku jsem koupil na dx.com, na desce je uvedeno Made in China, pokud pustím lokální IDE ver. 1.6.10 a zadám GetBoard Info, editor vypíše:
    BN: Unknown board
    VID: 1A86
    PID: 7523
    SN: Upload any sketch to obtain it

    3. webový editor napsaný program přeloží bez chybového hlášní, ale asi jej do arduina nepošle, přičemž vypíše:
    „arduino-builder/arduino-builder -compile -core-api-version 10611 -build-path /tmp/457964434 -hardware arduino-builder/hardware -hardware arduino-builder/packages/cores -tools arduino-builder/tools -tools arduino-builder/packages/tools -built-in-libraries arduino-builder/latest -libraries /tmp/353782079/pinned -libraries /tmp/353782079/custom -fqbn arduino:avr:mega:cpu=atmega2560 -build-cache /tmp -verbose=false /tmp/353782079/Rolety_ver_002
    Sketch uses 2866 bytes (1%) of program storage space. Maximum is 253952 bytes.
    Global variables use 173 bytes (2%) of dynamic memory, leaving 8019 bytes for local variables. Maximum is 8192 bytes.“

    Nějak mi docházejí nápady 🙁

    odpověď na: Adresace I2C #10932
    Luke_CZ
    Účastník

    Musíš juknout do zdrojáků, předpokládám, že na začátku skeče vkládáš hlavičkový C soubor pro knihovnu:
    #include <TM1640.h>
    Tož se jukni do něj(TM1640.h), jak je funkce definována, pokud není (jakože není), tak je v něm (TM1640.h) vkládán další hlavičkový soubor#include "TM16XX.h".
    Koukni do TM16XX.h a hleďme:

    /** Set the display to the values (left to right) */
    virtual void setDisplay(const byte values[], unsigned int length = 8);

    Prostě, ne každý autor píše detailní manuál ke knihovně a raději dává popis funkcí rovnou do zdrojáku.

    L.

    boylucky
    Účastník

    Ahoj, kdysi jsem přešně tohle řesil. Psal jsem o tom i článek tady na bastlirna.hwkitchen.cz Článek je stále přístupný na:

    Zavlažovací systém s GPRS ovládáním

    Na tomto projektu již dále nepracuji, ale získal jsem během vývoje znalosti které by se mohli pro podobný projekt hodit. Pokud by se našlo víc lidí dala by se z toho udělat zajímavá věc. Moje představa je pokusit se toto vše spojit s dalšími alternativami jako jsou potravinové zahrady o kterých se můžete dočíst například na http://www.potravinovezahrady.cz/

    Snažil jsem se kdysi také najít pár lidí na spolupráci na podobném projektu:

    Home automation

    Pokud by se dalo pár lidí dohromady a vytvořil by se zajímavý projekt šel bych do toho taky. Ze skušenosti vím že je to časově poměrně náročné a je důležité si vše na začátku dobře promyslet a rozplánovat. Já jsem se do projektu vrhnul bez příprav a v pozdějších fázích byl celkem problém se ve všem ještě orientovat.

    odpověď na: Adresace I2C #10930
    LeosP
    Účastník

    Nic kritickeho mi nechybi. Jen nevim u nekterych fci (treba setDisplay()) kolik parametru lze pouzit a co presne ovlivnuji. ( setDisplay(x, y, ?z…) prvni je jasny = CO, druhy nevim jestli je prosty pocet segmentu nebo neco jineho a jak adresnout druhou polovinu segmentu 9 – 16. Nicmene to opravdu kriticke neni, spis jen jestli neobjevuju objevene. Doufal jsem v existenci „klasickeho“ popisu fce s parametry.
    Moc dekuju za rady a jakmile zase nekde narazim, tak se s dovolenim opet ozvu. L.

    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 #10926
    LeosP
    Účastník

    A jedinej „popis“ jsem nasel tento

    Attachments:
    odpověď na: Adresace I2C #10925
    LeosP
    Účastník

    Tady odtud:
    https://github.com/rjbatista/tm1638-library
    BTW jinou jsem nenasel…

    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: Adresace I2C #10923
    LeosP
    Účastník

    Diky, jeste jsem neproveril, ted mam „na stole? zrovna UNO, kde je to OK. Nikde ale nemuzu najit nejaky popis/manual funkci a parametru knihovny pro modul s TM1640. Nasel jsem jen seznam funkci…z toho nektere funkcnosti a parametry jsem zkusmo odhalil, ale predpokladam, ze tam jsou jeste dalsi (mne nezname) moznosti rizeni. Nenarazil jste na neco pouzitelneho? Dekuji.

    odpověď na: Časovane spinaní pinu #10922
    hogen
    Účastník

    Po stisku tlačítka skončit.

    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: Stabilizátor napětí #10920
    Luke_CZ
    Účastník

    A propos pro čidla bych volil referenční zdroj, pak to lítat nebude.

    odpověď na: Stabilizátor napětí #10919
    Luke_CZ
    Účastník

    Zkusil bych „poněkud“ levnější variantu.

    Tahle vypadá i celkem profi.

    L.

    odpověď na: Časovane spinaní pinu #10917
    hogen
    Účastník

    Uplně z toho nejsem chytrej hlavně bod 3.
    Můj požadavek je ,aby po stisknutí některého tlačítka času např 5,10,nebo15sec seplo výstup na zadaný čas a pří opětovném sepnutí nějakého tlačítka to nereagovalo,nebo v lepším případě ukončilo odpočítávání a vypnulo výstup(rozepne relé).
    Ještě kdyby to umnělo po skončení odpočtu zvukový signál ,tak by to bylu super,ale to již není podstatné.Díky za tvůj čas. Hog

    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 #10910
    hogen
    Účastník

    Tak jsem to zkoušel,ale moc jsem to nepochopil.Můžeš prosím na to mrknout,jestli to má alespoň trochu hlavu a patu,nebo je tu úplnej nesmysl.Díky

    // zpozdeni tlacitka
    // v1
    // by JP 2016
    // program po stisku tlačítka rozsvítí LED diodu a nechá jí 5s rozsvícenou, pak ji zhasne a opět čeká na stisk tlačítka

    const int LED = 13; // led dioda
    const int TLACITKO = 10; // tlacitko proti zemi
    const int TLACITKO1 = 11; // tlacitko proti zemi
    const int TLACITKO2 = 12; // tlacitko proti zemi

    boolean CEKAM = false; // kdyz je true tak ceka na zhasnuti.
    unsigned long OLDTIME = 0; // strojní čas posledního stitku tlačítka
    unsigned long ZPOZDENI = 5000; // čas zpoždění zahsnutí LED diody v ms.
    unsigned long MYTIME = 0; // aktuální čas -zpoždění

    unsigned long OLDTIME1= 0; // strojní čas posledního stitku tlačítka
    unsigned long ZPOZDENI1 = 10000; // čas zpoždění zahsnutí LED diody v ms.
    unsigned long MYTIME1 = 0; // aktuální čas -zpoždění

    unsigned long OLDTIME2= 0; // strojní čas posledního stitku tlačítka
    unsigned long ZPOZDENI2 = 15000; // čas zpoždění zahsnutí LED diody v ms.
    unsigned long MYTIME2 = 0; // aktuální čas -zpoždění
    void setup()
    {
    pinMode(LED, OUTPUT); // nastaveni jako vystup
    pinMode(TLACITKO, INPUT_PULLUP); // nastaveni jako vystup
    OLDTIME = millis();// zapamatuj si aktuální strojní čas
    pinMode(TLACITKO1, INPUT_PULLUP); // nastaveni jako vystup
    OLDTIME1 = millis();// zapamatuj si aktuální strojní čas
    pinMode(TLACITKO2, INPUT_PULLUP); // nastaveni jako vystup
    OLDTIME2 = millis();// zapamatuj si aktuální strojní čas
    }

    void loop()
    {
    digitalWrite(LED, CEKAM); // zapis stav na LED
    if (digitalRead(TLACITKO) == 0) { // při stisku tlačitka
    if (CEKAM == false) { // a zhasnuté LED diodě
    CEKAM = true; // změn stav
    OLDTIME = millis(); // zapamatuj aktuální strojový čas

    if (digitalRead(TLACITKO1) == 0) { // při stisku tlačitka
    if (CEKAM == false) { // a zhasnuté LED diodě
    CEKAM = true; // změn stav
    OLDTIME = millis(); // zapamatuj aktuální strojový čas

    if (digitalRead(TLACITKO2) == 0) { // při stisku tlačitka
    if (CEKAM == false) { // a zhasnuté LED diodě
    CEKAM = true; // změn stav
    OLDTIME = millis(); // zapamatuj aktuální strojový čas
    }
    }
    }}}}}

    odpověď na: Komunikace Ard. Mega 2560 a PC přes COM #10909
    Zbyšek Voda
    Účastník

    Dobrý den, Honzo,
    problémů může být více, musíte poskytnout víc informací.
    – jaké webové IDE používáte?
    – jakou desku máte (nejlépe s odkazem, odkud jste ji koupil)
    – hlásí editor při nahrávání nějakou chybu?

    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 …

    mystriks
    Účastník

    to neni vubec off topic potrebuju schema abych vedel jestli by to slo napojit na arduino a ovladat tim ten vetrak.

    odpověď na: Časovane spinaní pinu #10903
    hogen
    Účastník

    No já jsem nic nenapsal,jen jsem se pokoušel upravit ten program z tvého příspěvku ze dne 22.2.2016 (20:53),ale bez úspěchu.Asi je to prozatím pro mně nadlidský úkol.Hog.

    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 …

    mystriks
    Účastník
Aktuálně je na stránce zobrazeno 30 příspěvků - 481. až 510. (celkem z 2,768)