Hallo,
ich habe gerade ein Projekt mit dem ich mein Terrarium überwachen und irgendwann auch steuern möchte.
Nach dem ich heute eine LCD Anzeige implementiert habe funktioniert das ganze nur noch direkt nach dem uploaden, sobald ich den Mega einmal vom Strom getrennt habe geht nichts mehr.
Mein Komponenten:
Arduino Mega
DHT22
Ethernet shield
20x4 I2C LCD
Im Moment sollen Temperatur und Luftfeuchtigkeit auf dem Webserver und dem Display angezeigt werden.
Nur mit dem Ethernet Shield (und dem alten Code) funktionierte es auch nach einem umstecken in z.B. ein externes Netzteil.
Hat jemand eine Idee woran das liegen könnte?
Liebe Grüße
Simon
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
//LCD
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
// Thermo & Hygrometer
#define DHTPIN 31
#define DHTTYPE DHT22
//LCD
#define I2C_ADDR 0x3F // Define I2C Address where the SainSmart LCD is
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
//DHT
DHT dht(DHTPIN, DHTTYPE);
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
dht.begin();
//LCD
lcd.begin (20,4);
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
}
void loop() {
// listen for incoming clients
float h = dht.readHumidity(); //Luftfeuchte auslesen
float t = dht.readTemperature(); //Temperatur auslesen
//Werte auf LCD ausgeben
lcd.home ();
lcd.print("Temperatur: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor ( 0, 1 );
lcd.print("Luftfeuchte: ");
lcd.print(h);
lcd.print(" %");
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
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("Connnection: 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\">");
// output the value of each analog input pin
client.println("Temperatur & Luftfeuchte Terrarium");
client.println("
");
client.println(t);
client.println(" °C"); //° zeichen ascii html
client.println("
");
client.println(h);
client.println(" %"); //% zeichen ascii html
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
Edit:
Ich sehe gerade das der Code hier einfarbig sehr unübersichtlich aussieht, vielleicht hilf diese Ansicht: http://pastebin.com/7ALikr12