Close

Pulec

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 2,071. až 2,100. (celkem z 2,768)
  • Autor
    Příspěvky
  • odpověď na: Bezdrátová komunikace #6617
    alan
    Účastník

    Zkoušel jsem také přidat další funkci níže v programu poslat. Dal jsem tam pauzu 20 vteřin než se pošle „end“. Ale mám s tím podoboný problém, Tentokrát jsem schopen odeslat čísla najednou ale celý program čeká 20s. Místo toho aby mi to nejdříve odeslalo čísla 123 a pak po 20s end, tak mi to odešle end a až pak čísla a pak znovu po 20 vteřinách end. Což nechápu, protože nedjříve volám void loop a az pak void poslat.
    end
    123

    end

    
    void setup (){
      Serial.begin(9600);
      Serial.flush();
      digitalWrite (13, HIGH);      //turn on debugging LED
    }
    
    void loop (){
    
      int i=0;
      char commandbuffer[100];
    
      if(Serial.available()){
         delay(100);
         while( Serial.available() && i< 99) {
            commandbuffer[i++] = Serial.read();
         }
         commandbuffer[i++]='\0';
      }
    
      if(i>0)
         Serial.println((char*)commandbuffer);
         
    poslat();
    }
    
    void poslat(){
      
      delay(20000);
      Serial.println("end");
    
      
    }
    
    
    odpověď na: Bezdrátová komunikace #6602
    alan
    Účastník

    Nevím proč, ale když nechám v arduinu jen `byte byteRead;

    void setup() {
    // put your setup code here, to run once:
    Serial.begin(9600);

    }

    void loop() {
    // put your main code here, to run repeatedly:

    if(Serial.available( )){
    byteRead = Serial.read();
    Serial.write(byteRead);`
    Přečte a odešle mi to jednotlivá čísla dohromady. Tudíž, když zadám třeba i posloupnost dlouhoo(123456789), zobrazí se to i ve stejném pořadí. Když jsem zkoušel upravit kod v arduinu podle vašich rad, tak už v sériovém monitoru mi to ukazovalo ty prázdné znaky postupně „1 2 3 4“. Takže i kdyby se mi to povedlo úspěšně načíst v matlabu, tak by to odeslalo dřív další posloupnost než je potřeba. Myslím si, že je problém jen v arduinu, tam prostě potřebuji přijat ty čísla dohromady, pak je i dohromady odeslat. Počkat chvíli a odeslat nějaký indikátor, který budu schopný v matlabu načíst, když ho načtu, tak azdám další posloupnost čísel z klávesnice.
    Dám sem ještě originální kód, který používám v matlabu, ještě bez toho kroku kde má porovnat string nebo netisknutelný znak.

    
    clear all;
    clc;
    
    b=Bluetooth('HC-05', 1); %vytvoreni bluetooth objektu
    
    i = input('Zadej posloupnost: ','s'); % Zadávání číselné posloupnosti z klávesnice
    fopen(b); %otevreni komunikace
    
    fwrite(b,i); %zapis ciselne posloupnosti
    
    d = fscanf(b, '%s');   % oskenovani prijatych dat
           
       
       disp('Zadana posloupnost: '); %vypise na monitor
        disp(d);
    
        fclose(b);
        
    odpověď na: Bezdrátová komunikace #6601
    Zbyšek Voda
    Účastník

    Takž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
    		}
    	}
    }
    odpověď na: Bezdrátová komunikace #6600
    posjirka
    Účastník

    to je přesně ono …
    a na druhé straně čekáš na přijem znaku „start“, pak budeš číst všechno ve smyčce dokud nepřijmeš znak „stop“

    odpověď na: Bezdrátová komunikace #6596
    alan
    Účastník

    Abych byl upřímný, tak úplně nevím co máte namysli nebo jak to mám zakomponovat do programu. Měl bych tedy na začátku programu vytvořit, ty proměnné

    char start = char(1);
    char stop = char(2);
    

    A poté upravit to přijímání a odesílání?

    
     if(Serial.available( )){
      byteRead = Serial.read();
      Serial.write(start);
      Serial.write(byteRead);
     Serial.write(stop);
      delay(20000);
      Serial.write("e");
    
    
    odpověď na: Bezdrátová komunikace #6594
    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ší? 🙂

    odpověď na: Bezdrátová komunikace #6593
    alan
    Účastník

    Jde o to, že ta posloupnost čísel bude vždy jiná. Takže nemůžu nastavit natvrdo o bude začátek a co konec komunikace. Jinak nevím co jste tím myslel.

    odpověď na: Bezdrátová komunikace #6592
    posjirka
    Účastník

    Navrhni si komunikační portokol.
    asi bych šel cestou netisknutených znaků.
    Postě jeden znak bude označovat začátek komunikace, druhý konec komunikace.
    Třeba Char(1) bude začátek, char(2) bude konec. Vše mezi tím je string.

    odpověď na: Bezdrátová komunikace #6591
    alan
    Účastník

    Ještě pro vysvětlení by to mělo být takhle

    1. nejdříve odeslat 123 z amtlabu do arduina a ihned zpátky do maltabu
    2. spoté poslat string „e“ z arduina do matlabu
    3. tento string porovnám v matlabu a odešlu další čísla do arduina

    odpověď na: Digispark USB ATtiny85 Mini Arduino #6572
    tribal.cz
    Účastník

    tento problém jsem měl také a řešení je prakticky na facku kterou jsem si chtěl dát když se mi poprvé podařilo nahrát program. Pokud máš vše nainstalované podle toho http://digistump.com/wiki/digispark/tutorials/connecting. Tak dále postupuj následovně z příkladu vyber například blink. Poté bez zapojené desky do pc dej náhrat program. Ve stavovém řádku se ti zobrazí tato informace:

    Projekt zabírá 718 bytů (11%) úložného místa pro program. Maximum je 6 012 bytů.
    Globalní proměnné využívají 9 bytů dynamické paměti.
    Running Digispark Uploader…
    Plug in device now… (will timeout in 60 seconds)

    Nyní máš 1 minutu na připojení digisparku po jeho zapojení se vše nahraje a bude fungovat. Na linuxu je to trochu složitější je potřeba doinstalovat nějaké utilitky.

    Je to řešené takto protože digispark využívá jako uploader micronucleus. Nikoliv standartní arduino nástroje

    posjirka
    Účastník

    máš 5 variant:
    1, použij jiný připojovací bod napíjení. Na Arduinu máš vstup Vin a to je to samé jako napájecí konektor.
    2, jdi cestou vlastního zdroje : stabilizátor 7805 + pořádné kondenzátory na vstupu.
    Pak to přivedeš na +5V a je hotov.
    3, Použij napájení přes USB. Prost2 nabije4ku na mobil p5es redukci na velke USB.
    4, Bateriové napájení
    5, na vstup připájej superkondenzátor o kapacitě třeba 1 až 10F. Ten je malý a je schopný ti překlenout tuto kolizní dobu. Pozor na velikost napětí ! Nejspíš budeš muset dát 2 do serie.

    Simakai
    Účastník

    Ahoj všem,

    narazil jsem na problém s napájením. Natočil jsem krátké video, kde je to ukázané

    https://youtu.be/pK4rGK4NWjo

    Jde o to, že když zahýbu s napájecím kabelem, tak se megaduino resetne, vypne, protože mu vypadne „šťáva“. Koncovka adaptéru se v „zástrčce“ trochu hýbe.

    Jak se to dá řešit?

    Problém je, že deska je součástí krabice, ke které je připojených několik termočlánků, a loguje z nich teploty. Krabice by právě měla být napájená z adaptéru. Ale pokud do ní někdo drbne, což se „v provozu“ může stát, tak se megaduino resetne a je to v čudu.

    odpověď na: Napájení Arduina #6561
    TomasN
    Účastník

    Díky za odpověď. Je rozdíl, když použiji 7805 s kondíky a budu Arduino napájet přes USB port? Tak jsem to taky zkoušel a neuspěl jsem….

    odpověď na: Napájení Arduina #6560
    posjirka
    Účastník

    jojo zdroje. Já používám Arduino jako vývojový kit a pro reálný výrobek používám samotný čip AT Mega 328 + krystal a stadardní zdroj ze 7805 a kondenzátory 1m0.
    Originální Arduino má stabilizátory pro max. 150mA a kondenzátory 47u. To není nic moc.
    čip programuju přes icsp rozhraní.

    odpověď na: Individuálne adresovateľný RGB led pás #6546
    dodo1001
    Účastník

    Toto sú tie 3 cykly:

    odpověď na: Propojeni nastenneho vypinace s Arduinem #6544
    majkee
    Účastník

    Díky za odpoved a priklad posjirko,

    zkusim tedy objednat normalni otocny vypinac typu 0->1->0 a rozchodit to s ledkou pro test.

    Prislo mi akorat elegantnejsi pouzit pouze tlacitko pro kratky pulz, nez tam drzet hodnoty HIGH, LOW dle stavu vypinace, ale snad to tedy nicemu nebude vadit.

    Predpokladam, ze vypinac aby se choval jako tlacitko nepredelam 😉

    Michal

    odpověď na: Propojeni nastenneho vypinace s Arduinem #6543
    posjirka
    Účastník

    trochu nechápu požadavek = dotaz.
    Potřebuješ mít vypínač/tlačítko na stěně (klasické na 230V) a porpojené s arduinem.
    Když stisknu tlačítko/vypínač tak arduino něco udělá.
    Resp. bude reagovat na změnu stavu tlačítka, takže ať nastane zapnutí ne bu vypnutí arduino musí udělat příslušnou akci.

    Zjednodušeně řečený příklad : na arduinu je LED dioda na pinu č.13.
    Na pinu 2 a 3 bude po jednom vypínači.
    1, Přepnu jeden vypínač = LED se rozsvítí
    2, přepnu libovolný vypínač = LED zhasne.
    3, přepnu libovolný vypínač = LED se rozsvítí.

    Chápu to správně?

    Pokud ano je třeba si uvědomit, že přepnutí vypínače neznamená pevné a trvalé spojení kontaktů. Realitou je, že přepnutí doprovází spoustu hazardních impuzů, které po chvilce utichnou. Takže rychlost arduina/atmegy je spíš na škodu. Budeš muset udělat to, že uděláš tzv. „switch boucing“.
    Já to třeba řeším časovou prodlevou.
    Zjistím si stav tlačítek a když se změní, tak určitou dobu (cca 250ms) na další změnu nereaguji.

    odpověď na: 1-wire teplomer a bluetooth #6537
    posjirka
    Účastník

    po hrubé kontrole to vypadá funkčně.
    Máš tam 2x delay podle mě zbytečně.
    Jen výsledný proces podmínky „if“ bych dal do složených závorek.
    Napadá mě, že jestli se neresetuje sám procesor.
    Bluetooth modul má celkem velkou spotřebu a po čase může zahřát a přetížit stabilizátor na desce. TO by pak znamenalo reset.
    Dej si na začátek něco jako text „start“.
    Když se ti objeví před změnou hodnot „start“ tak se ti resetoval čip.

    i tak neni nic ztraceno. můžeš si ti hodnoty zaznamenat do EEPROM a při startu si je znovu načíst. Vlastně by pokračoval tam, kde posledně skončil.
    Po stisku tlačítka (nový tlačítko) + reset by si ty udaje mohl resetovat.
    TO udělal tjde. jen pozor EEPRm má max.100 000 zápisu do každé buńky. Pak ta bunka není stabilní.

    odpověď na: Príkaz switch #6534
    poprad
    Účastník

    Myslel jsem si to, jen jsem se chtěl ujistit. Ale je to škoda….

    odpověď na: Príkaz switch #6533
    Zbyšek Voda
    Účastník

    Dobrý den, pokud vím, tak ne.
    Musíte použít if

    if(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í 🙂

    odpověď na: Řídící jednotka pro peletový kotel #6510
    johnyhol
    Účastník

    Tak to je přesně to co bych si představoval! moc díky za tip!

    odpověď na: Individuálne adresovateľný RGB led pás #6509
    Zbyšek Voda
    Účastník

    Bude to jednodušší, když se s námi podělíte o kód 🙂

    odpověď na: I2C #6508
    rakocid
    Účastník

    Problem vyrieseny. Dakujem za rady.
    Hodnoty ktore som posielal boli prijate pomocou bezdrotoveho priimaca nrf24. Ked boli na väcsiu vzdialenost niektore hodnoty boli na tolko skreslene ze ich nedokazalo poslat dalej.Bohužial som sem ani tu cast programu nenapisal. Wire zbernica funguje skvele.

    odpověď na: Led místo svícení bliká #6495
    ArduXPP
    Účastník

    Už jsem na to přišel, P0 a P1 digital a ostatní analog 🙂

    Ale pořád jsem nepřišel na to proč pořád pouští proud do P5 3.3V .

    odpověď na: Řídící jednotka pro peletový kotel #6493
    posjirka
    Účastník

    asi bych tě odkázal na EXOSITE.
    SPEKO2 to používá a nejspíš by ti dokázal poradit.
    http://arduino.sk/viewtopic.php?f=6&t=250&sid=1a2a735f040bc590a27d3aba42cb4ba0

    odpověď na: Řídící jednotka pro peletový kotel #6488
    johnyhol
    Účastník

    O displayi jsem už taky přemýšlel, ale nakonec jsem se rozhodl pro ethernet schield, protože bych chtěl časem sledovat stav kotle (případně i nastavovat) a taky teplotu v místnostech (nebo aspoň v obýváku) po síti a nejlépe i v mobilu s androidem. Půjde to? Úplně nejlepší by byla jednoduchá webová stránka, kde by se vypisovalo co zrovna kotel dělá a taky by tam bylo tlačítko pro zapnutí kotle na dálku v případě, že budeme někde na cestách, v baráku bude zima a budeme si chtít zatopit než přijedeme domů.

    odpověď na: Řídící jednotka pro peletový kotel #6487
    posjirka
    Účastník

    super.
    Jestli chceš mít na seriovem portu zprávy o počítadlech tak jen doplnň další řádky Serial.printlm();
    a do závorek dej názvy proměnných.
    já bych šel spíš cestou LCD displaye.
    Stojí pár korun a potřebuješ na ně 6 volných pinu.
    Ideální je 16×2 (16 znaku x 2 řádky).
    Připojení je velmi jednoduché a pak ty zprávy co se kde děje můžeš vidět přímo na něm.
    Idealni je třeba tento:
    http://aukro.cz/modul-klavesice-1602-lcd-keypad-shield-arduino-i6089165384.html
    Nevim jsetli se ti nebude bít s modulem RELE, protože nevím jeho zapojení.
    Navic už tam máš tlačítka , takže je mužeš rovnou využít ….

    odpověď na: Řídící jednotka pro peletový kotel #6486
    johnyhol
    Účastník

    Tady upravený kód:

    
    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 30_3_2016
    
    // changelog
    // v 30_3_2016
    //   oprava funkce tlacitka kvitace poruchy -> HIGH->LOW
    //   umazani parametru "long cas=13000;" -> jiz neni potreba
    //   umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba
    //   umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba
    //   umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){  // prostorovy  nebo  kotlovy termostat vypne" u funkce zapaleni
    //   drobne upravy textu/popisu jednotlivych parametru/funkci
    // v 27_3_2016
    //   uprava procesu zapalovani - nebude reagovat na prostorovy termostat
    //   uprava dlouhych delayu na smycky,  pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s
    //   nastaveni definice poruch pro pozdejsi vyuziti
    // v22_3_2016
    //   uprava ladicich textu pro termostaty
    // v21_3_2016
    //   presunuti testuPlamene pouze do smycky udrzuj horeni
    //   doplneni textu do testu horeni
    //   oprava textu zprav
    //   zruseni diakritiky
    //   zapnuti alarmu pri vyskytu poruchy
    // v20_3_2016
    //   slouceni podminenych funkci  
    //   vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy)
    //   rozdeleni funkci do vlastnich funkcnich bloku
    //   zapojeni seriove komunikace pro odladeni funkci 
    // v16_3_2016
    //   uprava podminky smycek (zruseno =)
    //   posun zpozdeni 5s z procesu zapaleni na jeho konec
    //   doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni
    //   upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle
    //   nastaveni poruchy a jeji kvitance tlacitkem na pinu 9
    
    // definice poruch
    // bit  funkce
    // 0    prehrati kotle pri zapalovani
    // 1    ztrata plamene pri horeni
    // 2    volne
    // 3    volne
    // 4    volne
    // 5    volne
    // 6    volne
    // 7    volne
    
    // knihovna watchdogu
    #include <avr/wdt.h>
    
    #define davkovaniPelet 6 //davkovani pelet snek
    #define spirala 5 //zapalovaci spirala
    #define ventilator 3 //ventilator
    #define alarm 10 //signalizace poruchy
    #define prostorovyTermostat 12 //prostorovy termostat
    #define kotlovyTermostat 2 //kotlovy termostat
    #define fotobunka 8 //fotobunka pro kontrolu plamene
    #define trimr1 14 // nastaveni doby zapaleni  DI14 = A0 pro arduino UNO
    #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy
    
    int smycka1 = 0; // pomocna smycka - zapaleni
    int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A1 60-600s
    int smycka2 = 0; // pomocna smycka - udrzeni horeni
    int smycka2max = 2; // max.pomocne smycky
    int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni
    int smycka3max = 2; // max.pomocne smycky
    int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet
    int smycka4max = 12; // max.pomocne smycky
    int smycka5 = 0; // pomocna smycka - rozhoreni
    int smycka5max = 5; // max.pomocne smycky
    int smycka6 = 0; // pomocna smycka - dohoreni
    int smycka6max = 84; // max.pomocne smycky
    byte porucha = 0; // promenna pro zaznam poruchy
    
    void setup() {
      // nastav seriovou komunikaci na rychlost 9600 bd 
      Serial.begin(9600);
      Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace
      pinMode(davkovaniPelet, OUTPUT);
      pinMode(spirala, OUTPUT);
      pinMode(ventilator, OUTPUT);
      pinMode(alarm, OUTPUT);
      pinMode(prostorovyTermostat, INPUT);
      pinMode(kotlovyTermostat, INPUT);
      pinMode(fotobunka, INPUT);
      pinMode(trimr1, INPUT);
      pinMode(tlacitkoKvitance, INPUT);
      // vsechno vypni
      vypniVse();
            // nastav watchdog na 8s
            wdt_enable(WDTO_8S);
    }
    
    void loop() {
            wdt_reset(); // resetuj watchdog
      Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace
      smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0
      if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty
                Serial.println("Prostorovy termostat zapnut"); // ladici seriova komunikace
        if(digitalRead(kotlovyTermostat) == HIGH){  // kotlovy termostat je zapnuty
              Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace
          // startovaci davka pelet
          //------------------------
          zapalovaciDavkaPelet();
          
          // proces zapaleni
          //----------------
          zapaleni();
          
          // test poruchy
          // -----------------
          //testPlamene(); 
          
          // udrzeni horeni
          //--------------
          udrzujHoreni();
          
          // dohoreni
          //---------
          dohoreni();
        }
        } else {
          Serial.println("Prostorovy termostat vypnut"); // ladici seriova komunikace
        }
      // kvitence pripadne poruchy
      //-------------------------------
      kvitancePoruchy();
    }
    
    void vypniVse() {
      // funkce vypni vse
      Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace
      digitalWrite(davkovaniPelet, LOW); //vypni davkovani
      digitalWrite(spirala, LOW); //vypni zhaveni
      digitalWrite(ventilator, LOW); //vypni ventilator
    }
    
    void zapalovaciDavkaPelet() {
      // prvotni davkovani pelet pro zapaleni
      Serial.println("Davkuji pelety pro zapaleni ... 12s"); // ladici seriova komunikace
      digitalWrite(davkovaniPelet, HIGH); //davkuj pelety
            for (smycka4 = 0;  smycka4 < smycka4max; smycka4 ++){
        delay(1000); 
              wdt_reset(); // resetuj watchdog
            }
      digitalWrite(davkovaniPelet, LOW); //potom vypni davkovani
      digitalWrite(ventilator, HIGH); //zapni ventilator
      digitalWrite(spirala, HIGH); //zapni zhaveni
    }
    
    void zapaleni() {
      // funkce zapaleni pelet
      // 3 pokusy o zapaleni
      Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace
      for (smycka3 = 0;  smycka3 < smycka3max; smycka3 ++){
        // smycka "1-10" minut zapalovani
        for (smycka1 = 0;  smycka1 < smycka1max; smycka1 ++){
                            wdt_reset(); // resetuj watchdog
          Serial.print("Pokus "); // ladici seriova komunikace
          Serial.print(smycka3); // ladici seriova komunikace
          Serial.print("/"); // ladici seriova komunikace
          Serial.print(smycka3max); // ladici seriova komunikace
          Serial.print(" stav: "); // ladici seriova komunikace
          Serial.print(smycka1); // ladici seriova komunikace
          Serial.print("s/"); // ladici seriova komunikace
          Serial.print(smycka1max); // ladici seriova komunikace
          Serial.println("s "); // ladici seriova komunikace
                            
          if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne
            digitalWrite(spirala, LOW); //vypni zhaveni
            smycka1 = smycka1max; // ukonci smycku1
            smycka3 = smycka3max; // ukonci smycku3
            Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace
                                    bitSet(porucha,0); // nastav poruchu bit c.0 na "1"
          }
          if(digitalRead(fotobunka) == HIGH){ //pokud fotobunka vidi plamen
            digitalWrite(spirala, LOW); //vypni zhaveni
            smycka1 = smycka1max; // ukonci smycku1
            smycka3 = smycka3max; // ukonci smycku3 
            Serial.println(" hori ...");   // ladici seriova komunikace       
          } else {
            Serial.println(" nehori ...");   // ladici seriova komunikace 
          }
          delay(1000);
        }
                    for (smycka5 = 0;  smycka5 < smycka5max; smycka5 ++){
                delay(1000); 
                      wdt_reset(); // resetuj watchdog
                    }
        //delay(5000); //cekej 5s
      }
    }
    
    void udrzujHoreni() {
      // funkce udrzeni horeni
      Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace
      for (smycka2 = 0;  smycka2 < smycka2max; smycka2 ++){
                    wdt_reset(); // resetuj watchdog
        smycka2 = 0; // vynuluj smycku
        if(digitalRead(prostorovyTermostat) == HIGH  && digitalRead(kotlovyTermostat) == HIGH){ // prostorovy + kotlovy termostat je zapnuty
          if(digitalRead(fotobunka) == HIGH){ //pokud fotobunka vidi plamen
                      Serial.println("Test plamene ... hori"); // ladici seriova komunikace
            digitalWrite(davkovaniPelet, HIGH); //davkuj pelety
            delay(1000); //pockej 1s
            digitalWrite(davkovaniPelet, LOW); //vypni davkovani
            delay(1000); //pockej 1s
          } else {
            delay(1000); // pocekej jeste 1s a zkus to znovu
            if(digitalRead(fotobunka) == LOW){  //pokud fotobunka nevidi plamen
                                    Serial.println("Test plamene ... porucha"); // ladici seriova komunikace
                                    smycka2 = smycka2max; // ukonci smycku
                        //porucha = 1; // nastav poruchu
                                    bitSet(porucha,1); // nastav poruchu bit c.1 na "1"
                                    digitalWrite(alarm, HIGH); // zapni alarm
            }
          }
        } else {
          smycka2 = smycka2max; // ukonci smycku
        }  
      }
    }
    
    void dohoreni() {
      // funkce dohoreni
      Serial.println("Dohoreni ..."); // ladici seriova komunikace
      digitalWrite(davkovaniPelet, LOW); //vypni davkovani pelet
      digitalWrite(spirala, LOW); //vypni zhaveni - pro jistotu
            for (smycka6 = 0;  smycka6 < smycka6max; smycka6 ++){
        delay(1000); 
              wdt_reset(); // resetuj watchdog
            }
      digitalWrite(ventilator, LOW); //vypni ventilator
    }
    
    void kvitancePoruchy() {
      // funkce kvitance poruchy
      
      if(porucha > 0 ){ // kdyz je porucha aktivni
            Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace
        // vypni vse
        vypniVse();
        while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka
          digitalWrite(alarm, HIGH); // zapni alarm
          Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace
                            wdt_reset(); // resetuj watchdog
        }
        Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace
        digitalWrite(alarm, LOW); // vypni alarm
        porucha = 0; // vynuluj poruchu
      } else {  // jinak 
        Serial.println("Zadna porucha  ..."); // ladici seriova komunikace
        digitalWrite(alarm, LOW); // vypni alarm
    }
    }
    
    
    odpověď na: Řídící jednotka pro peletový kotel #6485
    johnyhol
    Účastník

    Ahoj, tak teď už je to kód jako v Temelíně 🙂 Jinak jsem to zkoušel a po drobný úpravě už to vypadá dobře. Musel jsem ještě změnit hodnotu u kvitace poruchy, přesně tady: while (digitalRead(tlacitkoKvitance) == HIGH) { // zapni alarm a cekej na stisk tlacitka z hodnoty „HIGH“ na hodnotu „LOW“, protože to reagovalo na tlačítko poruchy obráceně. (+ jsem tam udělal ještě pár úprav, upravený kód přiložím později) Všiml jsem si toho, když už jsem byl bezradnej (pořád nefungovala porucha) a tak jsem to komplet všechno rozpojil a znovu zapojil podle simulátoru, ale stejně to nešlo. Taky jsem si všiml, že tam máš tlačítka (spínače) zapojený obráceně (jako imput_pullup), jenom jsem si toho předtím vůbec nevšiml, protože tam máš i odpory. (sice ne proti zemi, ale proti plusu) Sériová komunikace je taky v pohodě, jenom bych ještě uvítal, kdyby běžel při každý akci čas (odpočet) jako je to při pokusu o zapálení. Časování u zapalování už taky funguje korektně 1-10min.

    odpověď na: I2C #6484
    rakocid
    Účastník

    Arduino nano som vymenil, nepomohlo.
    Program zamrzne v casti ked komunikuje cez zbernicu wire.
    Zacne pracovat az po restartovani arduino nano (slave). Restartovanie len mastra nepomaha.
    Co by znamenalo keby bol zahlceny buffer?

Aktuálně je na stránce zobrazeno 30 příspěvků - 2,071. až 2,100. (celkem z 2,768)