One-wire temperatuur upload naar mysql database crash

Beste,

Ik gebruik het onderstaande script om de temperatuur van een One-wire sensor te posten naar mijn website, die hem vervolgens in een database zet. Het is een script van het internet heb verkregen en deels heb aangepast.

Echter het probleem is dat na een x aantal tijd hij lijkt vast te lopen. Als ik de arduino reset begint hij weer te posten. voorbeeld: vanaf gister 23:30 tot vandaag 17:15 ging het goed, daarna crashte hij.

Ik heb het geprobeerd op een arduino Mega + ethernet board en ook op een Arduino ethernet.

Kunnen jullie mij hier bij helpen?

Groeten Nick.

#include <OneWire.h>
#include <Ethernet.h>
#include <SPI.h>

//Variabelen
int counter = 0; 
float counter_totaal = 0;
float gem_temp = 0;

//Ethernet settings
byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x30 };
EthernetClient client;
char server[] = "www.mijnwebsiteee.nl";
int  interval = 1000;

//Sensor ingang
OneWire  ds(2);

void setup(void) {
  Serial.begin(9600);
  Ethernet.begin(mac);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;

  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      return;
  }
  Serial.println();

  ds.reset();
  ds.select(addr);
  ds.write(0x44);

  delay(1000);

  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);

  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
  }

  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);
    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 = (float)raw / 16.0;
  counter++;
  counter_totaal = counter_totaal + celsius; 
   
  if (counter == 60) {
    gem_temp = counter_totaal / 60;
    // if you get a connection, report back via serial:
    if (client.connect(server, 80)) {
      Serial.println("-> Uploaden");
      Serial.print("Gemiddelde temperatuur: ");
      Serial.println(gem_temp);
      // Make a HTTP request:
      client.print( "GET /add_data.php?");
      client.print("sensor=");
      client.print("sensor2");
      client.print("&&");
      client.print("temperature=");
      client.print(gem_temp);
      client.println( " HTTP/1.1");
      client.print( "Host: " );
      client.println(server);
      client.println( "Connection: close" );
      client.println();
      client.println();
      client.stop();
      counter = 0;
      counter_totaal = 0;
    }
    else {
      // you didn't get a connection to the server:
      Serial.println("--> connection failed/n");
    }
  }
}

kijk eens naar watchdog Dan reset hij op zijn minst vanzelf Als je deze aanpak gebruikt kan je zelf ook vinden waar het probleem zit. Het is wel adanced als je mij vraagt. http://www.megunolink.com/how-to-detect-lockups-using-the-arduino-watchdog/ Met vriendelijke groet Jantje

als je geen verbinding hebt word de counter niet gereset, en dan komt er dus nooit meer bij 60 en krijg jij geen bericht meer, } staat niet goed.

Bedankt voor jullie reacties

@Shooter, je hebt helemaal gelijk, ik denk dat ik het aan moet passen naar 60 of groter, ipv gelijk aan 60.

@Jantje: ik ga het morgen eens aandachtig door lezen, dit lijkt me een goede oplossing

je reset de counter alleen als deze en 60 s en je hebt verbinding hij staat en te vroeg en nderdaad beter >=