Close

Odpověď na: Řídící jednotka pro peletový kotel

Úvodní stránka Fórum Vaše projekty Arduino Řídící jednotka pro peletový kotel Odpověď na: Řídící jednotka pro peletový kotel

#9954
johnyhol
Účastník

Ahoj, tak jsem udělal několik testů pro odhalení závady.
1) jsem nahrál zpátky poslední funkční program (pouze jsem upravil/zaměnil LCD pin D4 za D30) bez měření teploty a výstupu na Exosite -> to fungovalo bez problémů
2) jsem zkusil pouze měření teploty a výstup na Exosite -> taky bez problémů
3) jsem zkusil znovu spojený program kotel + exosite -> a tady už byl zase problém – seknutý procesor
Takže problém bude asi to, že jsem přidal do funkčního kódu tu část pro měření teploty a výstup na Exosite na špatný místo a proto se to mezi sebou hádá. Zkus na to prosím mrknout jak by se to dalo spojit, aby to nedělalo neplechu.
Tady poslední funkční kód (pouze regulace kotle s LCD):


// REGULACE PELETKOVEHO KOTLE
// author. Johnyhol & by JP
// v 2_1_2017

// changelog
// v 2_1_2017
//   zmena desky na MEGA
//   precislovani pinu kvuli displeji a ethernetu
//   doplneny/zmeneny komentare
// v 16_12_2016
//   precislovani pinu kvuli displeji
//   testovani displeje
// v 13_11_2016
//   zrusena reakce na prostorovy termostat -> není potreba, reseno jiz v kotli
// v 10_11_2016
//   uprava seriove komunikace -> pridani casovacu jednotlivych funkci 
// v 5_11_2016
//   zmena casu - upraveno pro realny provoz
// v 4_11_2016
//   zmena vsech vystupu na rele
// v 14_5_2016
//   precislovani pinu
//   zmena funkce fotobunky z digitalu na analog
//   dolpneni seriove komunikace o hodnotu fotobunky 
// 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>
// knihovna displeje
#include <LiquidCrystal.h>

// nastaveni pinu displeje
LiquidCrystal lcd(8, 9, 30, 5, 6, 7);

#define davkovaniPelet 22 //davkovani pelet snek
#define spirala 24 //zapalovaci spirala
#define ventilator 26 //ventilator
#define alarm 28 //signalizace poruchy
#define kotlovyTermostat 2 //kotlovy termostat
#define fotobunka 55 //fotobunka pro kontrolu plamene DI55 = A1 pro arduino MEGA
#define trimr1 56 // nastaveni doby zapaleni  DI56 = A2 pro arduino MEGA
#define tlacitkoKvitance 3 // pin tlacitka kvitance poruchy
//pin DI54 = A0 -> rezervace pro tlacitka displeje
//pin D13 -> rezervace pro Ethernet Schield
//pin D12 -> rezervace pro Ethernet Schield
//pin D11 -> rezervace pro Ethernet Schield
//pin D10 -> rezervace pro Ethernet Schield + pro podsviceni displeje
//pin D4 -> rezervace pro SD kartu + pro displej
//pin D1 -> rezervace pro seriovou linku
//pin D0 -> rezervace pro seriovou linku

int smycka1 = 0; // pomocna smycka - zapaleni
int smycka1max = 720; // max.pomocne smycky - ted jiz nastavitelne trimrem na A2 60-720s
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 = 10; // 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
int ldr = 1; //analogovy pin kde je pripojen fotorezistor
int ldr_value = 0; //promenna pro zaznam hodnot z fotorezistoru

void setup() {
  // nastav seriovou komunikaci na rychlost 9600 bd 
  Serial.begin(9600);
  Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace
  lcd.begin(16, 2); // nastaveni displeje
  lcd.print("NAST.VSTUPY/VYST"); // zobrazeni na displeji
  lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print("VYPINAM VS. RELE"); // zobrazeni na displeji
  delay (2000);
  pinMode(davkovaniPelet, OUTPUT);
  pinMode(spirala, OUTPUT);
  pinMode(ventilator, OUTPUT);
  pinMode(alarm, OUTPUT);
  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
        ldr_value = analogRead(ldr); //čte hodnoty LDR
  Serial.print("HODNOTA FOTOBUNKY = ");
  Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince
  Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace
  smycka1max = map(analogRead(trimr1), 0, 1024, 60, 720); // nastaveni doby zapaleni trimrem na A2
  if(digitalRead(kotlovyTermostat) == HIGH){  // kotlovy termostat je zapnuty
          Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace
          lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
          lcd.print("TERMOSTAT ZAPNUT"); // zobrazeni na displeji
  delay (2000);
      // startovaci davka pelet
      //------------------------
      zapalovaciDavkaPelet();
      
      // proces zapaleni
      //----------------
      zapaleni();
      
      // test poruchy
      // -----------------
      //testPlamene(); 
      
      // udrzeni horeni
      //--------------
      udrzujHoreni();
      
      // dohoreni
      //---------
      dohoreni();
    } else {
      Serial.println("Kotlovy/Prostorovy termostat vypnut"); // ladici seriova komunikace
      lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
      lcd.print("TERMOSTAT VYPNUT"); // zobrazeni na displeji
      }
  // kvitence pripadne poruchy
  //-------------------------------
  kvitancePoruchy();
}

void vypniVse() {
  // funkce vypni vse
  Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace
  digitalWrite(davkovaniPelet, HIGH); //vypni davkovani
  digitalWrite(spirala, HIGH); //vypni zhaveni
  digitalWrite(ventilator, HIGH); //vypni ventilator
}

void zapalovaciDavkaPelet() {
  // prvotni davkovani pelet pro zapaleni
  Serial.println("Davkuji pelety pro zapaleni ... 110s"); // ladici seriova komunikace
  lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print("ST.DAVKA        "); // zobrazeni na displeji
  digitalWrite(davkovaniPelet, LOW); //davkuj pelety
        for (smycka4 = 0;  smycka4 < smycka4max; smycka4 ++){
    delay(1000); 
          wdt_reset(); // resetuj watchdog
  Serial.print("Stav: ");
  Serial.print(smycka4);
  Serial.print("s/");
  Serial.print(smycka4max);
  Serial.println("s ");
  lcd.setCursor(9, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print(smycka4);
  lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print("/"); // zobrazeni na displeji
  lcd.print(smycka4max);
          }
  digitalWrite(davkovaniPelet, HIGH); //potom vypni davkovani
  digitalWrite(ventilator, LOW); //zapni ventilator
  digitalWrite(spirala, LOW); //zapni zhaveni
}

void zapaleni() {
  // funkce zapaleni pelet
  // 2 pokusy o zapaleni
  Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace
  lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print("ZAPALENI        "); // zobrazeni na displeji
  for (smycka3 = 0;  smycka3 < smycka3max; smycka3 ++){
    // smycka "1-10" minut zapalovani
    for (smycka1 = 0;  smycka1 < smycka1max; smycka1 ++){
                        wdt_reset(); // resetuj watchdog
      Serial.print("Pokus o zapaleni "); // ladici seriova komunikace
      Serial.print(smycka3); // ladici seriova komunikace
      Serial.print("/"); // ladici seriova komunikace
      Serial.println(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
      lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
      lcd.print("POKUS           "); // zobrazeni na displeji
      lcd.setCursor(6, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
      lcd.print(smycka3);
      lcd.setCursor(7, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
      lcd.print("/"); // zobrazeni na displeji
      lcd.print(smycka3max);
      lcd.setCursor(9, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
      lcd.print(smycka1);
      lcd.print("  "); // zobrazeni na displeji
      lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
      lcd.print("/"); // zobrazeni na displeji
      lcd.print(smycka1max);
                        
      if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne
        digitalWrite(spirala, HIGH); //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(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen
        digitalWrite(spirala, HIGH); //vypni zhaveni
        smycka1 = smycka1max; // ukonci smycku1
        smycka3 = smycka3max; // ukonci smycku3 
        Serial.println(" hori ...");   // ladici seriova komunikace
        Serial.println("Rozhoreni ... 50s ");
        lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
        lcd.print("ROZHORENI       "); // zobrazeni na displeji
        lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
        lcd.print("HORI...         "); // zobrazeni na displeji
                
      } else {
        Serial.println(" nehori ...");   // ladici seriova komunikace 
      }
      delay(1000);
    }
                for (smycka5 = 0;  smycka5 < smycka5max; smycka5 ++){
            delay(1000); 
                  wdt_reset(); // resetuj watchdog
        Serial.print("Stav: ");
        Serial.print(smycka5);
        Serial.print("s/");
        Serial.print(smycka5max);
        Serial.println("s ");
        lcd.setCursor(10, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
        lcd.print(smycka5);
        lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
        lcd.print("/"); // zobrazeni na displeji
        lcd.print(smycka5max);
                }
    //delay(5000); //cekej 5s
  }
}

void udrzujHoreni() {
  // funkce udrzeni horeni
  ldr_value = analogRead(ldr); //čte hodnoty LDR
  Serial.print("HODNOTA FOTOBUNKY = ");
  Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince
  Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace
  for (smycka2 = 0;  smycka2 < smycka2max; smycka2 ++){
                wdt_reset(); // resetuj watchdog
    smycka2 = 0; // vynuluj smycku
    if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty
      if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen
                  Serial.println("Test plamene ... hori"); // ladici seriova komunikace
                  Serial.println("Davkuji pelety ... ");
                  lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
                  lcd.print("DAVKOVANI       "); // zobrazeni na displeji
        digitalWrite(davkovaniPelet, LOW); //davkuj pelety
        delay(4000); //pockej 4s
        wdt_reset(); // resetuj watchdog
        delay(4000); //pockej 4s
        wdt_reset(); // resetuj watchdog
        Serial.println("Pauza ... ");
        lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
        lcd.print("HORENI          "); // zobrazeni na displeji
        digitalWrite(davkovaniPelet, HIGH); //vypni davkovani
        delay(5000); //pockej 5s
        wdt_reset(); // resetuj watchdog
        delay(5000); //pockej 5s
        wdt_reset(); // resetuj watchdog
      } else {
        delay(1000); // pocekej jeste 1s a zkus to znovu
        if(analogRead(fotobunka) >= 500){  //pokud fotobunka nevidi plamen
                                Serial.println("Test plamene ... porucha"); // ladici seriova komunikace
                                //lcd.clear(); // smaze displej pred dalsi smyckou
                                lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
                                lcd.print("NEHORI - PORUCHA"); // zobrazeni na displeji
  //delay (500);
                                smycka2 = smycka2max; // ukonci smycku
                    //porucha = 1; // nastav poruchu
                                bitSet(porucha,1); // nastav poruchu bit c.1 na "1"
                                digitalWrite(alarm, LOW); // zapni alarm
        }
      }
    } else {
      smycka2 = smycka2max; // ukonci smycku
    }  
  }
}

void dohoreni() {
  // funkce dohoreni
  Serial.println("Dohoreni ... 840s "); // ladici seriova komunikace
  lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print("DOHORENI        "); // zobrazeni na displeji
  digitalWrite(davkovaniPelet, HIGH); //vypni davkovani pelet
  digitalWrite(spirala, HIGH); //vypni zhaveni - pro jistotu
  
        for (smycka6 = 0;  smycka6 < smycka6max; smycka6 ++){
  Serial.print("Stav: ");
  Serial.print(smycka6);
  Serial.print("s/");
  Serial.print(smycka6max);
  Serial.println("s ");
  lcd.setCursor(9, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print(smycka6);
  lcd.print("  "); // zobrazeni na displeji
  lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
  lcd.print("/"); // zobrazeni na displeji
  lcd.print(smycka6max);
    delay(1000); 
          wdt_reset(); // resetuj watchdog
        }
  digitalWrite(ventilator, HIGH); //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, LOW); // zapni alarm
      Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace
      lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
      lcd.print("CEKAM NA KVITACI"); // zobrazeni na displeji
                          wdt_reset(); // resetuj watchdog
    }
    Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace
    digitalWrite(alarm, HIGH); // vypni alarm
    porucha = 0; // vynuluj poruchu
  } else {  // jinak 
    Serial.println("Zadna porucha  ..."); // ladici seriova komunikace
    lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0)
    lcd.print("ZADNA PORUCHA..."); // zobrazeni na displeji
      digitalWrite(alarm, HIGH); // vypni alarm
}
}

a tady kód pro měření teploty a napojení na Exosite:


#include <EEPROM.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Exosite.h>
 
// Pin use
#define ONEWIRE 23 //pin to use for One Wire interface

// Set up which Arduino pin will be used for the 1-wire interface to the sensor
OneWire oneWire(ONEWIRE);
DallasTemperature sensors(&oneWire);
 
/*==============================================================================
* Configuration Variables
*
* Change these variables to your own settings.
*=============================================================================*/
//String cikData = "6c1d94611bda02dbaa5cc6640218cd0360088b7f";  // <-- FILL IN YOUR CIK HERE! (https://portals.exosite.com -> Add Device)
byte macData[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };        // <-- Fill in your Ethernet shield's MAC address here.

// Enter your Unique Identifier code here
char unique_id[11] = "0020024A24"; // <-- Generated from Adding your device in portals.exosite.com

// Use these variables to customize what datasources are read and written to.
const String readString = "d25";

// Number of Errors before we try a reprovision.
const unsigned char reprovisionAfter = 3;

// User defined variables for Exosite reporting period and averaging samples
#define REPORT_TIMEOUT 30000 //milliseconds period for reporting to Exosite.com
#define SENSOR_READ_TIMEOUT 5000 //milliseconds period for reading sensors in loop

/*==============================================================================
* End of Configuration Variables
*=============================================================================*/

unsigned char errorCount = reprovisionAfter;  // Force Provision On First Loop
char macString[18];  // Used to store a formatted version of the MAC Address

EthernetClient client;
//Exosite exosite(cikData, &client);
Exosite exosite(&client);

String tempString;
int index = 0;
int lastIndex = -1;
float tempC;
//
// The 'setup()' function is the first function that runs on the Arduino.
// It runs completely and when complete jumps to 'loop()' 
//
void setup() {
  Serial.begin(115200);
  Serial.println("Boot");
  pinMode(25, OUTPUT); //assume using D25 as output to control remotely
  
  // Start up the OneWire Sensors library
  sensors.begin();
  delay(1000);
  Serial.println("Starting Exosite Temp Monitor");
  Serial.print("OneWire Digital Pin Specified: ");
  Serial.println(ONEWIRE);
  Ethernet.begin(macData);
  // wait 3 seconds for connection
  delay(3000); 
 
}
 
//
// The 'loop()' function is the 'main' function for Arduino 
// and is essentially a constant while loop. 
//
void loop() {
  static unsigned long sendPrevTime = 0;
  static unsigned long sensorPrevTime = 0; 
  char buffer[7];
  String readParam = "";
  String writeParam = "";
  String writeString = "";
  String returnString = "";
  index = 0;
  lastIndex = -1;

   // Check if we should reprovision.
  if (errorCount >= reprovisionAfter) {
    if (exosite.provision("exosite", "ard-generic", unique_id)) {
      errorCount = 0;
    }
  }
    String uptime_str = String(millis()/1000);
  writeString += "uptime="+ uptime_str;

    //GET ANALOG 1 VALUE
  //get average of a number of readings
  int avgValue=0;
  int readings = 0;
  unsigned long avgTot = 0;
  int avgCnt = 0;

  while(readings<10)
  {
    avgTot += analogRead(A1);
    avgCnt += 1;
    avgValue = avgTot/avgCnt;
    readings++;
  }
  String analog1_str = String(avgValue);
  writeString += "&a1="+ analog1_str;
  
//Make Write and Read request to Exosite Platform
  Serial.println("---- Do Read and Write ----");
  if (exosite.writeRead(writeString, readString, returnString)) {
    Serial.println("OK");
    Serial.print("Returned: ");
    Serial.println(returnString);
    Serial.println("Parse out dataport alias values");
    errorCount = 0;
    for(;;){
      index = returnString.indexOf("=", lastIndex+1);
      if(index != 0){
        String alias = "";
        tempString = returnString.substring(lastIndex+1, index);
        Serial.println(tempString);
        lastIndex = returnString.indexOf("&", index+1);
        alias = tempString;
        if(lastIndex != -1){
          tempString = returnString.substring(index+1, lastIndex);
        }else{
          tempString = returnString.substring(index+1);
        }
        
        
        if (alias == "d25"){
          if(tempString == "1"){
            digitalWrite(25, 1);
            Serial.println("set Digital25 to 1");
          }else if(tempString == "0"){
            digitalWrite(25, 0);
            Serial.println("set Digital25 to 0");
          }else{
            Serial.println(tempString);
          }
        } else if (alias == "msg"){
          Serial.print("Message: ");
          Serial.println(tempString);
        } else {
          Serial.println("Unknown Alias Dataport");
        }
   
        if(lastIndex == -1)
          break;     
        
      }else{
        //Serial.println(F("No Index"));
        break;
      }
    }
    
  } else {
    Serial.println("No Connection");
    errorCount++;
  }

  Serial.print("."); // print to show running
 
 // Read sensor every defined timeout period
  if (millis() - sensorPrevTime > SENSOR_READ_TIMEOUT) {
    Serial.println();
    Serial.println("Requesting temperature...");
    sensors.requestTemperatures(); // Send the command to get temperatures
    tempC = sensors.getTempCByIndex(0);
    Serial.print("Celsius:    ");
    Serial.print(tempC);
    Serial.println(" C ..........DONE");
  
    sensorPrevTime = millis();
  }
 
  // Send to Exosite every defined timeout period
  if (millis() - sendPrevTime > REPORT_TIMEOUT) {
    Serial.println(); //start fresh debug line
    Serial.println("Sending data to Exosite...");
    
    readParam = "";        //nothing to read back at this time e.g. 'control&status' if you wanted to read those data sources
    writeParam = "temp="; //parameters to write e.g. 'temp=65.54' or 'temp=65.54&status=on'
    
    String tempValue = dtostrf(tempC, 1, 2, buffer); // convert float to String, minimum size = 1, decimal places = 2
    
    writeParam += tempValue;    //add converted temperature String value
    
    //writeParam += "&message=hello"; //add another piece of data to send

    if ( exosite.writeRead(writeParam, readParam, returnString)) {
      Serial.println("Exosite OK");
      if (returnString != "") {
        Serial.println("Response:");
        Serial.println(returnString);
      }
    }
    else {
      Serial.println("Exosite Error");
    }
 
    sendPrevTime = millis(); //reset report period timer
    Serial.println("done sending.");
  }
  delay(1000); //slow down loop
}

Nefunkční kód (moje spojení dvou předešlých kódů) je v mým příspěvku #9905.
Předem moc díky!