Nyní mám Arduino MEGA + kouřový senzor, rele, DHT22, senzor otevřeného ohně, ethernet modul, diplay a dvě tlačítka
Jakmile jsem tam neměl připojený ethernet modul, tak vše běželo krásně, okamžitě to detekovalo senzory, reakce na tlačítka (které nastavují nastavenou teplotu dle které se spína rele) vše jelo krásně, ale jakmile jsem napojil ethernet modul, tak vše špatně... reakce, třeba 10 sekund..
Vím co teď uvidíte, tak je hrozný balast v kódu a tak bych chtěl někoho poprosit, kdo mi mi v tom trošku udělal pořádek a hlavně aby mi to reagovalo jako bez ethernet modulu
Kód: Vybrat vše
#include <DHT.h>
#include <LiquidCrystal.h>
#include <SPI.h>
#include <UIPEthernet.h>
// inicializace pinu, lze vyměnit za jiné volné
LiquidCrystal lcd(23, 22, 5, 4, 3, 24);
#define pinDHT 48
#define analogPin A0
#define digitalPin 35
const int dOut = 49;
const int aOut = A1;
DHT mySensor(pinDHT, DHT22);
int teplota;
int analog = 0;
int analog_kour = 0;
unsigned long cas = 0;
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 50);
char serverName[] = "xxxxxxx.eu"; // webserver
#define BUFF_DELKA 255
char buffer[BUFF_DELKA];
EthernetClient client;
void prerus_ohen() {
// pokud je aktivován digitální vstup,
// vypiš hlášku o detekci ohně
Serial.println("Detekovan ohen!");
delay(500);
}
void prerus_kour(){
// vypiš varovnou hlášku, pokud je aktivován digitální vstup
// a senzor byl ústálen alespoň po dobu 180s = 3 minut
if(millis()>180000){
Serial.println("Prekonana hranice plynu v okoli!");
delay(1000);
}
}
void setup()
{
Serial.begin(115200);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Aktualni:");
lcd.setCursor(0,1);
lcd.print("Nastaveni: ");
pinMode(33, INPUT_PULLUP); // pin 33 nastaven jako vstup
pinMode(34, INPUT_PULLUP); // pin 34 nastaven jako vstup
pinMode(32, OUTPUT);
pinMode(analogPin, INPUT); //ohen
pinMode(digitalPin, INPUT); //ohen
attachInterrupt(digitalPinToInterrupt(digitalPin), prerus_ohen, FALLING);
pinMode(dOut, INPUT); //kour
pinMode(aOut, INPUT); //kour
attachInterrupt(digitalPinToInterrupt(dOut), prerus_kour, FALLING);
Ethernet.begin(mac, ip);
Serial.print("Server je na IP adrese: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
if(client.connect(serverName, 80)){
delay(100);
client.print(F("GET http:/xxxx.eu/aaaaa/reset"));
client.println(F(".php"));
client.println(F("Host: xxxx.eu"));
client.println(F("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"));
client.println(F("Connection: close"));
client.println();
delay(100);
int inBuffer = 0;
for(int i = 0; i < BUFF_DELKA; i++){ //vyprázdní buffer
buffer[i] = '\\0'; //nastaví všechny prvky buffer na znak konce řetězce
}
while(client.available()){
buffer[inBuffer] = client.read();
inBuffer++;
}
if(buffer[0] == '1'){
digitalWrite(4, HIGH);
Serial.print("Posledni stav = ");
}
if(buffer[0] == '0'){
digitalWrite(4, LOW);
Serial.print("Posledni stav = ");
}
client.stop();
}
Serial.println(buffer[0]);
delay(100);
//OHEN
// načtení napětí ze vstupu senzoru do proměnné
int napetiSenzor = analogRead(analogPin);
// přepočtení celého rozsahu 0-1024 na hodnoty 0-3
int prepocet = map(napetiSenzor, 0, 1024, 0, 3);
// nastavení stavu dle hodnoty přepočtené ze vstupu
switch (prepocet) {
case 0:
Serial.println("Detekovan ohen ve vzdalenosti do 20 cm!");
break;
case 1:
Serial.println("Detekovan ohen ve vzdalenosti od 20 do 80 cm!");
break;
case 2:
Serial.println("Zadny ohen neni detekovan.");
break;
}
// KOUR
analog_kour = analogRead(aOut);
Serial.print("Analogova hodnota: ");
Serial.print(analog_kour);
Serial.print(", v procentech: ");
// přepočet hodnoty analogového vstupu z 1024
// na 100 procent pomocí funkce map
Serial.print(map(analog_kour, 0, 1023, 0, 100));
Serial.println("%");
//
float tep = mySensor.readTemperature();
lcd.setCursor(10,0);
lcd.print(" ");
lcd.setCursor(10,0);
lcd.print(tep);
Serial.println(tep);
lcd.setCursor(14,0);
lcd.print((char)223);
lcd.print("C");
if (digitalRead(33) == LOW){
teplota = (teplota+5);
Serial.println(teplota);
lcd.setCursor(11,1);
lcd.print(" ");
}
if (digitalRead(34) == LOW){
teplota = (teplota-5);
Serial.println(teplota);
lcd.setCursor(11,1);
lcd.print(" ");
}
Serial.println(teplota);
lcd.setCursor(11,1);
lcd.print(teplota);
lcd.setCursor(14,1);
lcd.print((char)223);
lcd.print("C");
if (tep > (teplota + 2)) digitalWrite(32, LOW);
if (tep < (teplota - 2)) digitalWrite(32, HIGH);
delay (200);
}