Close

JardaL

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 721. až 750. (celkem z 2,779)
  • Autor
    Příspěvky
  • odpověď na: adresovatelný led pásek, změna efektů #10485
    Vojtěch Vosáhlo
    Účastník

    Zkuste za while vložit dalkoveOvl.resume(); tzn bude to vypadat asi takto: `void nejakyefekt(){
    while(neco){
    }
    dalkoveOvl.resume();
    }
    `
    Pokud to nepojede tak se ozvěte. Zkuste taky poslat odkaz na knihovnu kterou přesně máte, jestli existuje dokumentace, bude to jednoduší.

    odpověď na: adresovatelný led pásek, změna efektů #10484
    Hint
    Účastník

    Díky moc, hned jsem vaši radu vyzkoušel a opravdu teď mohu vypnout smyčku i pomoci ovladače a sepnutí nového efektu přes seriovou linku pracuje ještě lépe než předtím, bohužel ale nevím proč, přestal program přijímat sepnutí smyček efektů, pouze ukončí smyčku. Ovladačem nejde spustit efekt ani po resetu arduina, když ještě nic neběží.
    Omlouvám se snad jsem to napsal srozumitelně.

    odpověď na: adresovatelný led pásek, změna efektů #10483
    Vojtěch Vosáhlo
    Účastník

    Mělo by stačit přidat k přerušení seriovou linkou i přerušení IR příjmem. Na začátku kódu máte v podmínce if toto: „dalkoveOvl.decode(&vysledek)“
    Vzhledem k tomu že je v podmínce, nejspíše vrátí 1/true/pravda pokud něco přijme a zvládne dekódovat a 0/false/nepravda pokud nic nepřijme nebo nedekóduje.
    Do vašeho while by tedy stačilo přidat logický operátor OR v arduinu jako ||. Ten vám dá 1 pokud alespoň jedna vstupní hodnota je 1. Smyčka by tedy vypadala asi takto while(!(Serial.available() || dalkoveOvl.decode(&vysledek)))...
    Serial.available() se podívá jestli je něco dostupného na sériové lince a dalkoveOvl.decode() zjistí zda něco přijímáme. Pokud nic z tohoto neplatí dostaneme 0 která je vykřičníkem znegovaná na 1 a smyčka běží. Pokud bude ale jedna z možností 1, smyčka se zastaví.

    Mimo tohle by se dal kód ještě různě optimalizovat ale o tom kdyžtak jindy 😉

    odpověď na: Linux x Windows rozdíly v kompilaci? #10480
    Zbyšek Voda
    Účastník

    Začal jsem to zkoumat a je to celkem zajímavý problém.

    Zkusil jsem udělat úplně jednoduchou non-void funkci, která ale, stejně jako u vás, nic nevrací. Ta funkce vypadá takto:

    #include <stdint.h>
    
    uint8_t fce(){
        
    }
    
    int main(){
        uint8_t a = fce();
        
    	return 0;
    }

    Použil jsem uint8_t, protože boolean je vlastně „převlečený“ typ uint_8 – viz:
    typedef uint8_t boolean;

    Když tento miniprogram proženu přes kompilátor avr-gcc a zadám přepínače pro výstup v assembleru, získám kód níže. Příkaz pro spuštění kompilace je takovýto (jsem na MacOS):
    /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-gcc -S main.c

    	.file	"main.c"
    __SP_H__ = 0x3e
    __SP_L__ = 0x3d
    __SREG__ = 0x3f
    __tmp_reg__ = 0
    __zero_reg__ = 1
    	.text
    .global	fce
    	.type	fce, @function
    fce:
    	push r28
    	push r29
    	in r28,__SP_L__
    	in r29,__SP_H__
    /* prologue: function */
    /* frame size = 0 */
    /* stack size = 2 */
    .L__stack_usage = 2
    /* epilogue start */
    	pop r29
    	pop r28
    	ret
    	.size	fce, .-fce
    .global	main
    	.type	main, @function
    main:
    	push r28
    	push r29
    	push __zero_reg__
    	in r28,__SP_L__
    	in r29,__SP_H__
    /* prologue: function */
    /* frame size = 1 */
    /* stack size = 3 */
    .L__stack_usage = 3
    	rcall fce
    	std Y+1,r24
    	ldi r24,0
    	ldi r25,0
    /* epilogue start */
    	pop __tmp_reg__
    	pop r29
    	pop r28
    	ret
    	.size	main, .-main
    	.ident	"GCC: (GNU) 4.9.2"
    

    K pochopení toho, co se děje, stačí najít řádek std Y+1,r24. Toto je instrukce v assembleru (viz . Slouží k tomu, že se někam do paměti na adresu danou Y+1 (proměnná a v programu) uloží hodnota z registru r24. Když se ale na program podíváte, do tohoto registru se předtím nic neukládá, ani se nenuluje, takže je hodnota nedefinovaná.

    Tento příklad je zjednodušený, v případě při kompilaci pro Arduino dojde k připojení několika dalších funkcí. Pro ilustraci je to ale myslím dobré 🙂

    Podle mě tedy dojde k tomu, že při kompilaci na Linuxu se ještě přidá instrukce pro vynulování registru r24. Je to ale jenom teorie. Můžete vyzkoušet, docela by mě zajímalo, jestli ten assemblerový kód vypadá stejně 🙂

    Zbyšek Voda
    Účastník

    Dobrý den, možná by to šlo, ale asi to nebude úplně přívětivé. Programování na iOS je popsané třeba tu: http://www.arduinocode.info .

    Také by to asi šlo pomocí OTA přes prohlížeč. K tomu byste potřeboval počítač jen při prvotním nahrání a potom už by to mělo jít přes prohlížeč více o OTA zde: http://esp8266.github.io/Arduino/versions/2.0.0/doc/ota_updates/ota_updates.html

    odpověď na: Linux x Windows rozdíly v kompilaci? #10476
    Zbyšek Voda
    Účastník

    Dobrý den, mě ta otázka přijde položená docela jasně 🙂

    Pouštím se teď na trochu tenký led, tak snad neplácnu nějakou blbost.

    Podle mě jde o to, že norma C++ nevynucuje návrat hodnoty z funkce pomocí return (i když tato funkce není void).Potom tedy závisí na kompilátoru, jak si s tím poradí. Použitý kompilátor pro Arduino je avr-gcc, který se ale asi na obou platformách chová trochu odlišně (právě v takovýchto normou nedefinovaných případech).

    Podle mě může dojít ke dvěma možnostem:
    1) Na linuxu je defaultní hodnota z funkcí bez return nulová, na Windows nenulová.
    Tato možnost ale asi není moc pravděpodobná.

    2) V https://gcc.gnu.org/wiki/avr-gcc píší, že jednobytové hodnoty se vrací pomocí registrů (ATmega v Arduinech je většinou 8-bitová, takže má i 8-bit registry). Boolean je jenom jiné pojmenování pro bezznaménkové osmibitové číslo, takže se asi vrací v registrech. A právě registry v tom podle mě dělají ten rozdíl – na linuxu se kompilátor chová tak, že registr použitý k návratu vynuluje, kdežto na Windows ne. Díky tomu v registru zůstane hodnota, která už tam byla před voláním funkce (a s největší pravděpodobností je nenulová), takže pak dostanete odpověď OK.

    Aspoň takto si to vysvětluji.

    Použití if (Testfunction()) je v pořádku. Můžete si představit, že kompilátor toto vidí jako if (Testfunction() != 0).

    odpověď na: Linux x Windows rozdíly v kompilaci? #10475
    schamann
    Účastník

    Mozna mela puvodni otazka byt jinak postavena:
    Je konstrukce if (Testfunction()) { sama o sobe spravna? neni bezpecnejsi pouzit treba jiny operator?

    odpověď na: Linux x Windows rozdíly v kompilaci? #10473
    schamann
    Účastník

    To ja vim, ze nic nevrati… Otazka byla proc to kazdy kompilator zpracuje jinak, ve win dostanu hlasku OK, a v Lin dostanu Hlasku False. Tedy, ja testuju vysledek Testfunction(), ktery je prazdny. a zajima me proc je vyhodnoceni v ruznych kompilacich ruzne. nikoli to, ze je to samo o sobe blbost.

    Mimochodem nevrati „co chce“, vrati neco co win vyhodnoti jako true tedy jakoukoliv hodnotu mimo 0 a pod linuxovou kompilaci vrati 0 protoze vysledek je FALSE. A nebo vrati NULL a pak to kazdy kompilator vyhodnoti jinak a to je to co me zajima.

    Muj asi mylny predpoklad na FALSE pochazi z Visual Studia kde programuju uz 20 let. Pokud v Basicu deklaruji funkci Boolean, je vzdy vysledek false, pokud mu neridam hodnotu true.

    odpověď na: Linux x Windows rozdíly v kompilaci? #10471
    Vojtěch Vosáhlo
    Účastník

    Jak můžete říct že správná odpověď je false? Ten kód koukne na to jestli se 1==1, řekne ano ale pak nic nevrací, tzn na return nikdy nenarazí. Může si teda vrátit co chce.
    Řešení je v celku jednoduché. Vždy používat return ve všech částech kde by jste měl. Mnoho IDE by vás to ani nenechalo zkompilovat, vyjela by hláška jako „Not all parts of the code return a value.“ Pokud nic nenastavíte, program si asi dělá trochu co chce.

    Jinak tu funkce upravená tak aby vždy něco vrátila by vapadala takto ale to asi víte.

    boolean TestFunction() {
      if (true) {
         return true;
         break;
          
     }
        return false;
    }

    Pokud to je zakomentované tak samozřejmě nevrátí nic…

    rehot79
    Účastník

    Pekné riešenie ale možno som našiel niečo jednoduchšie , bez potrebnej vedomosti o elektrotechnike aj keď ja som elektrotechnik, ale na čo si komplikovať život no nie? a cenovo dostupne na Ebay cca 3Eur. Volá sa to ssr-40da relé,je galvanicky oddelene,ovládane už od 3 volt DC .Pridávam link na YouTube
    Klik sem Pevne verím že toto pomôže veľa ľudom s touto problematikou .

    petan
    Účastník

    Mrkni sem: http://playground.arduino.cc/Main/ACPhaseControl (bacha, mají přehozeno in a out na Arduinu). Jinak, když zadáš do gůglu „AC Phase Control“ tak toho určitě najdeš dost. Je to v podstatě řízená triaková regulace.

    odpověď na: Komunikace přes sériovou linku #10463
    Zbyšek Voda
    Účastník

    Dobrý den, asi úplně nejjednodušší cesta je použít nějaký oddělovač, který vložíte vždy mezi dvě čísla – třeba byte s hodnotou 255 (0b11111111), popřípadě možná vhodnější 0. Vždycky čekáte, dokud nepřečtete znak s hodnotou 0 a potom přečtete dva byty.

    Tato metoda má své mouchy – třeba si musíte ošetřit situaci, kdy i datový být má hodnotu oddělovače (0, popř. 255). Napadá mě třeba k byte před odesláním vždy přičíst 1 – potom se byte s hodnotou 0 v datových bytech nemůže vyskytnout. Po přijetí 1 zase odečtete. Tam je ale zase problém s přetečením.

    Dalším způsobem by mohlo být použít redundanci – prostě byte dat pošlete vždycky dvakrát za sebou (například).

    Nebo zkusit použít nějaký standardizovaný formát dat – JSON, CSV apod… To už je ale trochu „s kanonem na vrabce“ (viz http://www.zive.cz/clanky/pojdme-programovat-elektroniku-jak-to-ze-je-prumerna-webova-stranka-stejne-velka-jako-doom/sc-3-a-185860/default.aspx).

    Výběr vhodného protokolu řeší například zde: http://forum.arduino.cc/index.php?topic=195224.0.

    odpověď na: Generování bílého šumu do reproduktoru #10461
    mitgan
    Účastník

    Děkuji. To mi pomohlo.

    M.

    odpověď na: Due #10460
    posjirka
    Účastník

    nemáš vůbec zač, každopádně bych ten odpor zvětšil alespoň na 1k ideálně 10k.
    Bude to jistější.

    odpověď na: Due #10459
    hcdady
    Účastník

    Dobrý den, děkuji za pomoc a užitečné rady posjirkovi, chyba byla ve mě. Měl jsem špatně definované piny na tranzistoru. Jinak u toho obvodu jsem odpor R1 úplně zrušil a R2 jsem nechal 100, protože když jsem tam dat 100K tak tranzistor nespínal.
    Každopádně ještě jednou děkuji David

    odpověď na: Max6675 #10458
    rehot79
    Účastník

    Knihovne som sťahoval V správe knižníc som napísal vo vyhladavaci max6675 našlo knihovnu A len som klik instal. ArduinoIDE používam 1.8.1 A hlavne veľa čítal vseliake example A kde tu čo sa my hodilo som vybral A skúsil zakomponovať do svojho kódu s neakov drobnou úpravou aby vyhovovalo mne. Prakticky to všetko je len zlepenec napr. Oled som orezal Z demo orginal knižnice urobil neake rámčeky okolo čísel atď. Pid zase vybral z example na arduino.cc len som pridal analogread potenciometer na nastavenie set point. A tak sa to Neako zlepilo dokopy. Ak tam vydis niečo na zlepšenie tak kľudne do mňa. …Ďakujem hlavne bez prvej reakcie na môj príspevok by tento code nevznikol. Všetko si skúšam na stole s pt100, malí oled A malé servo. Ešte raz ďakujem tomuto fóru za príjemne zabitý deň hihihi A zas som O čosi múdrejší.

    odpověď na: Max6675 #10457
    posjirka
    Účastník

    ty ses teda rozjel 🙂 . Tomu říkám progress. Jen se ti začal ztrácet přehled o knihovnách. tak jak to máš, jeto dále nešířitelné. Nikdo neví v jaké verzi Arduina jsi to ladil, odkud máš knihovny (MAX6675, nebo Adafruit_SSD1306 rozhodně nejsou standardní vybavení Arduino IDE. Problém je v tom, že si lidi můžou stáhnout tyto knihnvny z různých zdrojů a pak mohou mít různé syntaxe nebo funkce. Výsledkem je pak to, že to nerozchodí. A to ani v některých případech nemusí Adruino vyhlásit chybu. Nejsem si jist, zda není třeba vložit knihovnou MATH pro přepočet PID regulace (možná už je v knihovně PID ale nevím, viděl jsem 3 a 2 jí měli 1 né …) . jinak jsem rád, když lidi mají cíl a snahu ho dosáhnout. Nezřídka se tu člově setka s lidmi , kterým se nechce přemýšlet, nebo se něco učit a v podstatě to chtěji napsat od tebe. Jsi vzácná vyjímka ….

    odpověď na: Max6675 #10456
    rehot79
    Účastník

    Netuším v čom to je ale asi že mám po dlhej dobe volný víkend , prikladám code už aj s PID reguláciou a nastavením Set-point pomocou potenciometru .

    
    ////Vsetky kniznice nacitane cez ArduinoIDE spravca kniznic.
    #include <PID_v1.h>
    #include "max6675.h"
    #include <Servo.h>
    Servo myservo;
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    #if (SSD1306_LCDHEIGHT != 32)
    #error("Height incorrect, please fix Adafruit_SSD1306.h!");
    #endif
    
    //Definicia pin
    
    int thermoSO = 6;   
    int thermoCS = 5;   
    int thermoSCK = 4;  
    MAX6675 thermocouple(thermoSCK, thermoCS, thermoSO);
    int vccPin = 3; //Napajanie + pre max6675 modul z digitalneho pinu
    int gndPin = 2; //Napajanie - pre max6675 modul z digitalneho pinu
    int val;
    int poloha;  
    const int pot = A0;
    //Define Variables we'll be connecting to
    
    //Define Variables we'll be connecting to
    double Setpoint, Input, Output;
    
    //Define the aggressive and conservative Tuning Parameters
    double aggKp=5, aggKi=0.7, aggKd=1;
    double consKp=1, consKi=0.1, consKd=0.5;
    
    //Specify the links and initial tuning parameters
    PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
    
    void setup()
    {
        
      // definicia napajacich pinou 
      pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
      pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);   
      
      ////definicia servo pinu
      myservo.attach(9);
      
      //initialize the variables we're linked to
      Input = thermocouple.readCelsius();
      Setpoint = map(analogRead(pot), 0, 1024, 0, 500);
    
      //turn the PID on
      myPID.SetMode(AUTOMATIC);
    
    //////////////////////Oled////////////
      // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
      // init done
      // Vycisti logo
      display.clearDisplay();
      //uvod email
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(10,0);
      display.println("M.Jakab29@Gmail.com");   
      display.display();
      delay(5000);
      display.clearDisplay();
    
    }
    
    void loop()
    {
      Setpoint = map(analogRead(pot), 0, 1024, 0, 500); ;
      Input = thermocouple.readCelsius(); 
      double gap = abs(Setpoint-Input); //distance away from setpoint
      if(gap<20)
      {  //we're close to setpoint, use conservative tuning parameters
            myPID.SetTunings(consKp, consKi, consKd);
      }
      else
      {
         //we're far from setpoint, use aggressive tuning parameters
         myPID.SetTunings(aggKp, aggKi, aggKd);
      }
    
      myPID.Compute();
      Output = map(Output, 0, 255, 0, 170);
      myservo.write(Output);
      poloha = myservo.read();
      poloha= map(poloha, 0, 180, 0, 100); 
               
                val = Input;
                // text display text
               display.drawLine(0, 13, 0, display.height()-1, WHITE);
               display.drawLine(300, 32, 0, display.height()-1, WHITE);
               display.drawLine(300, 13, 0, display.height()-20, WHITE);
               display.drawLine(127, 13, 127, display.height() -1, WHITE);
               display.drawLine(42, 13, 42, display.height() -1, WHITE);
               display.drawLine(84, 13, 84, display.height() -1, WHITE);
               display.setTextSize(1);
               display.setTextColor(WHITE);
               display.setCursor(6,2);
               display.println("Tep.   Poz.%   Set.");   
               display.setTextSize(2);
               display.setCursor(4,16);
               display.println(val);   
               display.setTextSize(2);
               display.setCursor(47,16);
               display.println(poloha);   
               display.setTextSize(2);
               display.setCursor(89,16);
               display.println(Setpoint); 
               display.display();
               display.clearDisplay();
    delay(5000);  
    
    }
    odpověď na: Max6675 #10448
    rehot79
    Účastník

    Ešte foto dyspleja prikladám

    odpověď na: Max6675 #10446
    rehot79
    Účastník

    Tak prikladám znova s úpravami kode.

    
    
    //M.jakab29@gmail.com
    
    //Vsetky kniznice nacitane v arduinoIDE spravca kniznic ///// 
    #include "max6675.h"
    //Servo
    #include <Servo.h>
    Servo myservo;
    //Oled ///////////////////
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    #if (SSD1306_LCDHEIGHT != 32)
    #error("Height incorrect, please fix Adafruit_SSD1306.h!");
    #endif
    /////////////
    
    //Definicia pin
    
    int thermoSO = 6;   
    int thermoCS = 5;   
    int thermoSCK = 4;  
    MAX6675 thermocouple(thermoSCK, thermoCS, thermoSO);
    int vccPin = 3; //Napajanie + pre max6675 modul z digitalneho pinu
    int gndPin = 2; //Napajanie - pre max6675 modul z digitalneho pinu
    int val;
    int poloha;  
    void setup() {
      
      
      // definicia napajacich pinou 
      pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
      pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);   
      ////definicia servo pinu
      myservo.attach(9);
     
      //////////////////////Oled////////////
      // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
      // init done
      // Vycisti logo
      display.clearDisplay();
      //uvod email
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(10,0);
      display.println("M.Jakab29@Gmail.com");   
      display.display();
      delay(5000);
      display.clearDisplay();
    }
    
    void loop() {
         // Nacitanie teploty
         val = thermocouple.readCelsius()-2;
           
        // text display text
      display.drawLine(0, 13, 0, display.height()-1, WHITE);
      display.drawLine(300, 32, 0, display.height()-1, WHITE);
      display.drawLine(300, 13, 0, display.height()-20, WHITE);
      display.drawLine(127, 13, 127, display.height() -1, WHITE);
      display.drawLine(62, 13, 62, display.height() -1, WHITE);
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(3,2);
      display.println("Teplota    Poloha%");   
      display.setTextSize(2);
      display.setCursor(10,16);
      display.println(val);   
      
       val = map(val, 0, 600, 0, 180);     
       myservo.write(val);                      
       poloha = myservo.read();
       poloha= map(poloha, 0, 180, 0, 100); 
      
               display.setTextSize(2);
               display.setCursor(70,16);
               display.println(poloha);   
               display.display();
               delay(5000);
               display.clearDisplay();
    
    }
    

    Tu už vypisuje aj polohu serva na Display .

    odpověď na: Komunikace 2 MCU #10444
    rades
    Účastník

    Vyřešil jsem to pomocí SW seriovky na analog. portech díky 🙂

    odpověď na: Max6675 #10442
    rehot79
    Účastník

    Som tu znova s novými úpravami kódu kde pribudol oled Display. Este raz podotykam ze toto je môj prvý projekt. Ak vydite nejake chyby tak kľudne do mňa . Zatiaľ to funguje.

    
    //M.jakab29@gmail.com
    
    //Vsetky kniznice nacitane v arduinoIDE spravca kniznic ///// 
    #include "max6675.h"
    //Servo
    #include <Servo.h>
    Servo myservo;
    //Oled ///////////////////
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    #if (SSD1306_LCDHEIGHT != 32)
    #error("Height incorrect, please fix Adafruit_SSD1306.h!");
    #endif
    /////////////
    
    //Definicia pin
    
    int thermoSO = 6;   
    int thermoCS = 5;   
    int thermoSCK = 4;  
    MAX6675 thermocouple(thermoSCK, thermoCS, thermoSO);
    int vccPin = 3; //Napajanie + pre max6675 modul z digitalneho pinu
    int gndPin = 2; //Napajanie - pre max6675 modul z digitalneho pinu
    int val;
    int poloha;  
    void setup() {
      
      
      // definicia napajacich pinou 
      pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
      pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);   
      ////definicia servo pinu
      myservo.attach(9);
     
      //////////////////////Oled////////////
      // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
      // init done
      
      
      // Vycisti logo
      display.clearDisplay();
    }
    void loop() {
    // basic readout test, just print the current temp
      
       val = thermocouple.readCelsius()-2;
       val = map(val, 0, 300, 0, 180);     
       myservo.write(val);                      
       poloha = map(val, 0, 180, 0, 100);
        // text display text
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("Teplota       Poloha%_____________________");   
      display.display();
      display.setTextSize(2);
      display.setCursor(0,17);
      display.println(thermocouple.readCelsius()-2);   
      display.display();
      display.setTextSize(2);
      display.setCursor(85,17);
      display.println(poloha);   
      display.display();
      delay(3000);
      display.clearDisplay();
    
    }
    
    odpověď na: Max6675 #10441
    rehot79
    Účastník

    Ďakujem za rady. S arduinom pracujem cca asi mesiac s prestávkami A toto je môj prvý vlastný projekt ktorý sám programujem. Určite poupravujem podľa tvojich rád, ešte raz ďakujem. Ps už mám tam aj oled i2c 128×32 ..istotne ešte budem sem zdieľať code Z projektu.

    odpověď na: Max6675 #10440
    posjirka
    Účastník

    díky za kod určitě se bude někomu hodit.
    jen pár poznámek ke kodu:
    – u knihoven si do kodu napiš kde jsi tu knihovnu vzal
    – zkus pracovat trochu syststematicky, tady změříš teplotu, pošleš na seriiovou linku, pak změříš znovu, je to zbytečné zdržování a vtěžování procesoru. Změřit, poslat, přepočítat
    – dvojitý delay na konci je absolutně zbytečný.
    – Servo bych aktualizoval jen při změně. takto jej každou sekundu přepisuješ, takže nuluješ čítač, nasavýš tu samou hodnotu znovu spuštíš …

    neber to prosím jako pohrdavý pohled, jen v čas určitě většinu těch připomínek oceníš.
    Za snahu dávám palec nahoru … jen tak dál

    odpověď na: Max6675 #10439
    rehot79
    Účastník

    Tak som tu zas. Po tvojej rade som skúšal a vyzerá že to funguje.Ešte raz ďakujem a prikladám aj code ak by sa niekomu hodil ,ja s tým chcem ovládať polohu komínovej klapky na kotli na koľko max6675 je až do 1024 stupňov Celzia .Časom pribudne aj oled a wifi na sledovanie kotla na dialku napr. v mobile.

    
    
    //M.jakab29@gmail.com
    
    //Nacitanie knihovni
    #include "max6675.h"
    #include <Servo.h>
    
    Servo myservo;
    
    //Definicia pin
    
    int thermoSO = 6;   
    int thermoCS = 5;   
    int thermoSCK = 4;  
    MAX6675 thermocouple(thermoSCK, thermoCS, thermoSO);
    int vccPin = 3; //Napajanie + pre max6675 modul z digitalneho pinu
    int gndPin = 2; //Napajanie - pre max6675 modul z digitalneho pinu
    int val;
      
    void setup() {
      
      Serial.begin(9600);
      // definicia napajacich pinou 
      pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
      pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);   
      Serial.println("MAX6675 test");
      // cakanie na stabylizaciu max6675 cipu
      delay(500);
    
      myservo.attach(9);
    
    }
    
    void loop() {
      // basic readout test, just print the current temp
      
       Serial.print("C = "); 
       Serial.println(thermocouple.readCelsius());
       
       val = thermocouple.readCelsius();
       val = map(val, 10, 800, 0, 180);     
       myservo.write(val);                  
       delay(15);            
       delay(1000);
    }
    
    odpověď na: Max6675 #10438
    rehot79
    Účastník

    Ďakujem za reakciu na moju tému, túto možnosť som už pozeral aj ju chapem že si číta Z analógového vstupu hodnotu ktorú prepošle na servo, len môj problém je že mám max6675 ktorý nieje napojený na analog ale používa neaky thermocoupule.read() čo neviem ako poslať na servo. Ďakujem za odpoveď A ďalší nápad, idem skúšať

    odpověď na: Max6675 #10437
    BlindP
    Účastník

    Ahoj, funkce map dělá to co hledáš.. uhel_pro_servo = map(namerena_teplota, 10, 60, 0, 180);
    https://www.arduino.cc/en/Tutorial/Knob BP.

    Mirda0124
    Účastník

    Pokud ještě sháníte napište na Mirda2@email.cz

    Vojtěch Vosáhlo
    Účastník

    Pokud chcete něco co bude po vybalení fungovat tak vyplatí, pokud si chcete pohrát a trochu ušetřit, asi nevyplatí. Postavit se to dá určitě a řekl bych že bez větších problémů. Bezdrátová komunikace by asi byla přes ESP předpokládám. Co vše to má umět? Záleží taky na tom jak se na to cítíte vy. 😉

    Miroslava
    Účastník

    Ďakujem za odpoveď 🙂 áno s napájaním sa budem musieť potrápiť ešte pretože budem ovládať aj krokové motory a viem že takéto napájanie mi určite stačiť nebude.

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