Temperatur via Wifi anzeigen

Hallo!
Ich habe vor mit einem Arduino Due, einem Ethernet Shield, einem Access Point und einem LM35 die Temperatur meines Pools über ein WLan Netzwerk anzuzeigen. Wenn das einfache Anzeigen der Temperatur funktioniert will ich noch die RTC vom Due in mein Projekt mit einbeziehn.
Hier ist mein Code:

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <rtc_clock.h>

byte mac[] = { 
  0x90, 0xA2, 0xDA, 0x0D, 0xD6, 0x03 };
IPAddress ip(192,168,0, 1);

int LM35();
void getTime();

//char date[100][50], time[100][50], temp[100][10]; 
//int hh,mm,ss,dow,dd,mon,yyyy;
int t[100];
byte i=0, j;

char gradC[5];

EthernetServer server(80);
RTC_clock rtc_clock(XTAL);
int correct_address=0;

void setup() {
  pinMode(53,OUTPUT);
  sprintf(gradC,"\337C");
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  rtc_clock.init();
  rtc_clock.set_time(10, 29, 9);
  rtc_clock.set_date(22, 10, 2012);
}

void loop() {
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          client.print("<head>");
          client.print("<title>temp. via network</title>");
          client.print("</head>");
          client.print("<body>");
          client.print("<div align=""center"">");
          client.print("<h3>TEMPERATURE via WiFi</h3><hr />
<table border=""1"">");
          client.print("<tr><td>Datum</td><td>Uhrzeit</td><td>T/&degC</td></tr>");
          getTemp();
          for(j=0;j<=i;j++)
          {
            client.print("<tr><td>");
            //client.print(date[j]);
            client.print("</td><td>");
           // client.print(time[j]);
            client.print("</td><td>");
            client.print(t[j]);
            client.print("</td></tr>");
          }
          client.print("</table>");
          client.print("
<small>Arduino Web Server to display temperature data via network 
&copyMichael K&oumlfinger</small>");
          client.print("</div>");
          client.print("</body>");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
}

void getTemp()
{
  if(i==10)
  {i=0;}
  //rtc_clock.get_time(&hh,&mm,&ss);
 // rtc_clock.get_date(&dow,&dd,&mon,&yyyy);
 // sprintf(date[i],"%02d.%02d.%02d",dd,mon,yyyy);
 // sprintf(time[i], "%02d:%02d",hh,mm);
  t[i] = LM35();
  Serial.print("LM35: ");
  Serial.println(t[i]);
  //sprintf(tempC[i],"%d", t);
  i++;
}

int LM35()
{
  int mVolts=milliVolts();
  int tempC=mVolts/10;
  Serial.print("Temp: ");
  Serial.println(tempC);
  return tempC;
}

int milliVolts()
{
  int mV=analogRead(A0)*(3300/1024);
  Serial.print(mV);
  Serial.println("mV");
  return mV;
}

Mein Problem ist, dass ich keine Werte vom Sensor bekomme. Wenn ich allerdings nur folgenden Code verwende, funktioniert alles einfwandfrei.

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

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

void getTemp()
{
  int mVolts=milliVolts();
  int tempC=mVolts/10;
  delay(500);
  Serial.println("temperature");
  Serial.print(tempC);
  Serial.println("C");
  Serial.println();
}

int milliVolts()
{
  int mV=analogRead(A0)*(3300/1024);
  return mV;
}

Wieso funktioniert der Sensor in Verbindung mit dem Web Server nicht?
Bin für jede Hilfe dankbar!
mfg
Michael

Bin jetzt nicht wirklich der fachmann , ich meine aber das in deiner funktion gettemp der fehler liegt.. du musst in der get temp einen return wert angeben oder in der loop funktion gettemp einer variablen zuweisen und dann per Ethernet die varable übergeben.

Mit handy geschrieben keine Gewähr auf Rechtschreibung

Schreibt es denn auf Serial alles raus was du erwartest ?

Und was erwartest du ausserdem? ( ein client.print der Temperatur sehe ich nicht )

michael_x:
Und was erwartest du ausserdem? ( ein client.print der Temperatur sehe ich nicht )

mact das nicht das

client.print(t[j]);

im

getTemp();
          for(j=0;j<=i;j++)
          {
            client.print("<tr><td>");
            //client.print(date[j]);
            client.print("</td><td>");
           // client.print(time[j]);
            client.print("</td><td>");
            client.print(t[j]);
            client.print("</td></tr>");
          }

Grüße Uwe

uwefed:

michael_x:
Und was erwartest du ausserdem? ( ein client.print der Temperatur sehe ich nicht )

macht das nicht das

client.print(t[j]);

Ich hab ja nur gesagt, dass ich es nicht sehe :wink:
Wenn du es mir so deutlich zeigst, seh ich's auch. ( kann aber immer noch kein Problem erkennen)

Wäre interessant zu erfahren, was beim client und auf Serial ankommt.
Siehst du denn verschieden lange Tabellen mit 0 bis 9 Reihen ?

michael_x:
Ich hab ja nur gesagt, dass ich es nicht sehe :wink:
Wenn du es mir so deutlich zeigst, seh ich's auch. ( kann aber immer noch kein Problem erkennen)

Wäre interessant zu erfahren, was beim client und auf Serial ankommt.
Siehst du denn verschieden lange Tabellen mit 0 bis 9 Reihen ?

Ich hab ja auch nur gesagt wo Du es sehen könntest. :wink: :wink:

Auch ich sehe keinen Programmfehler der die Symptome erklären würden.

@ michael__k, hast Du es mal mit einem anderen Browser versucht?

Grüße Uwe

auch wenn ich die Werte vom analogen Eingang bzw. die Temperatur über die serielle Schnittstelle ausgebe, bekomme ich nur 0 zurück.

Verstehe ich das richtig ?:

Im "Original-Sketch":

int milliVolts()
{
  int mV=analogRead(A0)*(3300/1024);
  Serial.print(mV);
  Serial.println("mV");
  return mV;
}

Siehst du "0mV" im SerialMonitor, aber im "TestSketch":

int milliVolts()
{
  int mV=analogRead(A0)*(3300/1024);
  return mV;
}

void getTemp()
{
  int mVolts=milliVolts();
  int tempC=mVolts/10;
  delay(500);
  Serial.println("temperature");
  Serial.print(tempC);
  Serial.println("C");
  Serial.println();
}

funktioniert es richtig, so dass du aus z.B. "temperature20C" schliessen könntest, dass mVolts einen Wert zwischen 200 und 299 haben muss,
analogRead(A0) also was in der Größenordnung von ~ 70 geliefert hat ...

Am Rande:
Dass du statt (3300/1024) auch einfach 3 schreiben kannst, weisst du schon ...

Es ist löblich, dass du auf float -Arithmetik verzichtest, du hast aber sicher sowas im Kopf:

int mVolts = ( analogRead(A0) * 3300L ) / 1024;  // intern brauchen wir long Arithmetik