Dejo mi codigo como quedo ahora con el Bounce, y dejo 2 fotos de la instalacion del proyecto, llevo semanas horas y horas tratando de hacerlo funcionar sin errores, pero siemnpre el mismo problema se resetea el ethernet o el mega nose cual de los 2, y se me quedan colgadas las app, no vuelven a conectarse sino reseteo arduino.
CODIGO:
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#include <Wire.h>
#include <Bounce2.h>
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
Bounce debouncer = Bounce();
int medida = 0;
int temp = 0;
int hum = 0;
int distancia = 0;
char dis[10];
char mess[15];
char tem[10];
int estadopin3 = 0;
int estadopin4 = 0;
int estadopin5 = 0;
int estadopin6 = 0;
int estadopin7 = 0;
int estadopin31 = 0;
int estadopin33 = 0;
int estadopin35 = 0;
int alarma = 0;
int estadoalarma = 0;
int voz = 0;
int estadovoz = 0;
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 200);
IPAddress myDns(192,168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(28);
EthernetClient client;
void setup() {
pinMode(9, INPUT_PULLUP);
debouncer.attach(9);
debouncer.interval(100); // interval in ms
pinMode(8, INPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(31, OUTPUT);
pinMode(33, OUTPUT);
pinMode(22, OUTPUT);
pinMode(33, OUTPUT);
pinMode(35, OUTPUT);
Ethernet.begin(mac, ip, myDns, gateway, subnet);
server.begin();
dht.begin();
Wire.begin(1);
Wire.onReceive(reciboEvent);
}
void loop() {
int t = dht.readTemperature();
int h = dht.readHumidity();
int value1 = debouncer.read();
debouncer.update();
EthernetClient client = server.available();
if (client) {
if (client.available() > 0) {
char c = client.read();
//Mandar estados al iniciar app
if(c == '*'){
sprintf(mess,"pin%i%i%i%i%i%i%i%i%i%i",value1,digitalRead(4),digitalRead(5),digitalRead(7),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35),digitalRead(6));
server.print(mess);
sprintf(dis,"tin%i ",115 - medida);
server.print(dis);
sprintf(tem,"tem%i %i ",t,h);
server.print(tem);
}
//PIN3
if(c == '1')
{
if(digitalRead(3) == LOW && value1 == 1)
digitalWrite(3, HIGH);
else if(digitalRead(3) == HIGH && value1 == 1)
digitalWrite(3, LOW);
}
if(c == '2')
{
if(digitalRead(3) == LOW && value1 == 0)
digitalWrite(3, HIGH);
else if(digitalRead(3) == HIGH && value1 == 0)
digitalWrite(3, LOW);
}
//PIN4
if(c == '3')
digitalWrite(4, HIGH);
if(c == '4')
digitalWrite(4, LOW);
//PIN5
if(c == '5')
digitalWrite(6, HIGH);
if(c == '6')
digitalWrite(6, LOW);
//PIN8
if(c == '7')
digitalWrite(33, HIGH);
if(c == '8')
digitalWrite(33, LOW);
//PIN31
if(c == '9')
digitalWrite(5, HIGH);
if(c == 'm')
digitalWrite(5, LOW);
//PIN33
if(c == 'n')
digitalWrite(7, HIGH);
if(c == 'b')
digitalWrite(7, LOW);
if(c == 'q')
alarma = 1;
if(c == 'w')
alarma = 0;
if(c == 'c')
voz = 1;
if(c == 'v')
voz = 0;
if(c == 'z')
digitalWrite(35, HIGH);
if(c == 'x')
digitalWrite(35, LOW);
}
}
//Cambio de estado de pin3 me manda el aviso
if(estadopin3 != value1 || estadopin4 != digitalRead(4) || estadopin5 != digitalRead(5) || estadopin6 != digitalRead(6) || estadopin7 != digitalRead(7) || estadopin31 != digitalRead(31) || estadopin33 != digitalRead(33) || alarma != estadoalarma || voz != estadovoz || estadopin35 != digitalRead(35))
{
sprintf(mess,"pin%i%i%i%i%i%i%i%i%i%i",value1,digitalRead(4),digitalRead(5),digitalRead(7),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35),digitalRead(6));
server.print(mess);
estadopin3 = value1;
estadopin4 = digitalRead(4);
estadopin5 = digitalRead(5);
estadopin6 = digitalRead(6);
estadopin7 = digitalRead(7);
estadopin31 = digitalRead(31);
estadopin33 = digitalRead(33);
estadoalarma = alarma;
estadovoz = voz;
estadopin35 = digitalRead(35);
}
//Mando cambio de distancia tanque sensor
if(distancia != medida)
{
sprintf(dis,"tin%i ",115 - medida);
server.print(dis);
distancia = medida;
}
//Mando cambio de temperatura
if(temp != t || hum != h)
{
sprintf(tem,"tem%i %i ",t,h);
server.print(tem);
temp = t;
hum = h;
}
if(digitalRead(8) == HIGH && alarma == 1)
{
server.print("ala");
alarma = 0;
}
//Fin Loop
}
void reciboEvent(int howMany)
{
while (Wire.available()) { // slave may send less than requested
int c = Wire.read();
if(medida != c)
{
medida = c;
}
}
}