Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

ARDUINO - DS18S20 a relatka - chyba v programu = VYŘEŠENO

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: pá květen 15 2015, 20:23    Předmět: ARDUINO - DS18S20 a relatka - chyba v programu = VYŘEŠENO Citovat

Zdravím,
trochu se trápím s programem, který by při zvýšení teploty nad 28°C zapnul relé a na webu obarvil rele1 na zeleno
kód:

          if (digitalRead(2)){
          client.print("<a href='http://192.168.0.150?rele1=0'><button style='background:red;width:20%;height:30px'>RELE 1 VYPNUTO</button></a>");         
          }else{
          client.print("<a href='http://192.168.0.150?rele1=1'><button style='background:green;width:20%;height:30px'>RELE 1</button></a>");
           }

ale stále mi to neběží nedaří se mi to rozchodit Sad
Teplotu mi to ukazuje správnou, ale když ji zvýším relé se nezapne, když teplota klesne také se nic nestane chybu ...nevím, jak to správně zapsat, aby to fungovalo.
kód:

/*
          if(buffer.indexOf("rele1=1")>=0)
          digitalWrite(2,HIGH);

          else if(buffer.indexOf("rele1=0")>=0)
          digitalWrite(2,LOW);
 */       
          if (28 > teplota1){
          digitalWrite(2,HIGH);
          } else {
          digitalWrite(2,LOW);
          }

Jediné co mi funguje je, že když kliknu na ostatní tlačítka, tak se mi dané relé obarví a po opětovném kliknutí se relé vypne a barva tlačítka změní, což je skvělé, jen bych to ještě potřeboval u prvního tlačítka změnit ne na kliknutí, ale na ovládání teplotou.
Můžete mi někdo s tím kódem pomoct?
Níže ho přikládám celý a předem děkuji za případnou pomoc.
kód:

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>   //knihovna pro teplomer

// zde si upravte podle sebe
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// IP adresa
IPAddress ip(192,168,0, 150);
// port
EthernetServer server(80);

OneWire  ds_1(7);  // on pin 10 (a 4.7K resistor is necessary) teplomer v zavorce pin teplomeru
int ledPin = 13;

float teplota1 = teplomer1();

//--------------------------------zacatek teplomeru_1
float teplomer1() {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius_1, fahrenheit_1;
 
  if ( !ds_1.search(addr)) {
   // Serial.println("No more addresses.");
    Serial.println();
    ds_1.reset_search();
    delay(250);
    //return;
  }
 
  //Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    //Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
    //  return;
  }
 

  ds_1.reset();
  ds_1.select(addr);
  ds_1.write(0x44, 1);        // start conversion, with parasite power on at the end
 
  //delay(5000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds_1.reset();
  ds_1.select(addr);   
  ds_1.write(0xBE);         // Read Scratchpad


  //Serial.print("  Data = ");
  //Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds_1.read();
    //Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  //Serial.print(" CRC=");
  //Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius_1 = (float)raw / 16.0;
  fahrenheit_1 = celsius_1 * 1.8 + 32.0;
  /*Serial.print("Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");*/
  float stupne_1 = celsius_1;
  return stupne_1;
   }
//------------------------------------konec teplomeru_1
 

void setup()

{
  // inicalizace sítě
  Ethernet.begin(mac, ip);
  // inicializace serveru
  server.begin();
  // nastavíme pin 2 jako výstup pro rele

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
 
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);

  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); //pro ledku ke kouri zakladni nastaveni je vypnuta 

}


void loop()
{
  Serial.print("Teplota-1: ");
     Serial.println(teplota1);
//  Serial.println(teplomer1());
  // když je připojen klient, zjistíme, zda jsou odeslána data
  // od klienta směrem k nám
   EthernetClient client = server.available();
   String buffer = "";
   
  // dokud je klient připojen   
   while (client.connected()) {
    // čti data od něj dokud nenarazíš na znak nového řádku

     if (client.available()) {
        char c = client.read();
         buffer = buffer + c;
         if (c == '\n') {
     
/*
          if(buffer.indexOf("rele1=1")>=0)
          digitalWrite(2,HIGH);

          else if(buffer.indexOf("rele1=0")>=0)
          digitalWrite(2,LOW);
 */       
          if (28 > teplota1){
          digitalWrite(2,HIGH);
          } else {
          digitalWrite(2,LOW);
          }

          if(buffer.indexOf("rele2=1")>=0)
          digitalWrite(3,HIGH);

          else if(buffer.indexOf("rele2=0")>=0)
          digitalWrite(3,LOW);

          if(buffer.indexOf("rele3=1")>=0)
          digitalWrite(4,HIGH);

          else if(buffer.indexOf("rele3=0")>=0)
          digitalWrite(4,LOW);         

         
          if(buffer.indexOf("rele4=1")>=0)
          digitalWrite(5,HIGH);

 
          else if(buffer.indexOf("rele4=0")>=0)
          digitalWrite(5,LOW);
         
 
           // odešle klasickou hlavičku HTML stránky
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
         
          // zde již klasická html data
          client.println("<html>");
          client.println("<head>");
          // Název stránky
          client.println("<title>Arduinio Server - Rele control</title>");
          client.println("</head>");
          client.println("<body>");         
          client.print("<h3 align=center>Program pro ovladani rele</h3>");         
          client.println("</br>");
         
          // vygeneruje formulář
          if (digitalRead(2)){
          client.print("<a href='http://192.168.0.150?rele1=0'><button style='background:red;width:20%;height:30px'>RELE 1 VYPNUTO</button></a>");         
          }else{
          client.print("<a href='http://192.168.0.150?rele1=1'><button style='background:green;width:20%;height:30px'>RELE 1</button></a>");
           }
          client.println("&nbsp; &nbsp; &nbsp; &nbsp; rizeno teplotnim cidlem ds1");
          client.println("</br>");

           if (digitalRead(3)){
          client.print("<a href='http://192.168.0.150?rele2=0'><button style='background:red;width:20%;height:30px'>RELE 2 VYPNUTO</button></a>");
          }else{
          client.print("<a href='http://192.168.0.150?rele2=1'><button style='background:green;width:20%;height:30px'>RELE 2</button></a>");
           }
          client.println("&nbsp; &nbsp; &nbsp; &nbsp; tlacitko pro kotel 2");
          client.println("</br>");
 
           if (digitalRead(4)){
          client.print("<a href='http://192.168.0.150?rele3=0'><button style='background:red;width:20%;height:30px'>RELE 3 VYPNUTO</button></a>");
          }else{
          client.print("<a href='http://192.168.0.150?rele3=1'><button style='background:green;width:20%;height:30px'>RELE 3</button></a>");
           }
          client.println("&nbsp; &nbsp; &nbsp; &nbsp; tlacitko pro kotel 3");
          client.println("</br>");         

           if (digitalRead(5)){
          client.print("<a href='http://192.168.0.150?rele4=0'><button style='background:red;width:20%;height:30px'>RELE 4 VYPNUTO</button></a>");
          }else{
          client.print("<a href='http://192.168.0.150?rele4=1'><button style='background:green;width:20%;height:30px'>RELE 4</button></a>");
           }
          client.println("&nbsp; &nbsp; &nbsp; &nbsp; tlacitko pro kotel 4");
          client.println("</br>");
          client.println("</br>");
          client.println("</br>");         
          client.println("Teplota:");
          client.println("</br>");         
          client.println(teplomer1());       
          client.print("<meta http-equiv=\"refresh\" content=\"10\">"); //stránka se načte automaticky jednou za 3 s
          client.println("</body>");
          client.println("</html>");         

          //ukončí přenos
          client.stop();
          Serial.println(buffer);
                     }
                         }
                              }

}


Naposledy upravil jiri255 dne so květen 16 2015, 7:16, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3296

PříspěvekZaslal: pá květen 15 2015, 20:46    Předmět: Citovat

A na cem to beha? Na Arduino UNO?

Mel jsem 10 virtualnich tlacitek na UNO a vubec to nesestavilo HTML stranku.
Dal jsem to na MEGA a tam to slape OK.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: pá květen 15 2015, 20:58    Předmět: Citovat

jede to na Arduino Mega
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3296

PříspěvekZaslal: pá květen 15 2015, 21:03    Předmět: Citovat

Ale do HIGH jde podle podminky jen kdyz je teplota mensi 28
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: pá květen 15 2015, 21:11    Předmět: Citovat

jo to je možné zkoušel jsem to, tak i tak ale na zvýšení nebo snížení teploty to relé nereaguje
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3296

PříspěvekZaslal: pá květen 15 2015, 21:14    Předmět: Citovat

Mas ten IF s merenim 28<teplota ve smycce za ctenim z webu. Musis ho dat jinam

Dej ho treba za druhej radek serial.println (teplota1) ve smycce loop

A Taky nevidim nikde znovunacteni a opakovane mereni a naplnovani hodnoty (teplota1) v prubehu smycky Loop
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: so květen 16 2015, 7:15    Předmět: Citovat

toho jsem si vůbec nevšiml Sad ,že teplota1 je pořád stejná a nemění se Sad,
až když jsem si to vložil do web stránky
kód:

          client.println("Teplota2:");
          client.println("</br>");         
          client.println(teplota1);     

...já ji vlastně nemám v loop Confused ...stačilo tedy

float teplota1 = teplomer1();

vložit do loop a už to šlape přesně jak má Smile
kód:

void loop()
{
  float teplota1 = teplomer1();
  Serial.print("Teplota-1: ");
     Serial.println(teplota1);


Děkuji mnohokrát teď už je to OK přesně to o co mi šlo Very Happy


Naposledy upravil jiri255 dne so květen 16 2015, 18:05, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3296

PříspěvekZaslal: so květen 16 2015, 7:34    Předmět: Citovat

Rado se stalo...
Sdilena starost, polovicni starost Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.17 sekund