trochu se trápím s programem, který by při zvýšení teploty nad 28°C zapnul relé a na webu obarvil rele1 na zeleno
Kód: Vybrat vše
if (digitalRead(2)){
client.print("<a href='http://192.168.0.150?rele1=0'><button style='background:red;width:20%;height:30px'>RELE 1 VYPNUTO</button></a>");
}else{
client.print("<a href='http://192.168.0.150?rele1=1'><button style='background:green;width:20%;height:30px'>RELE 1</button></a>");
}
ale stále mi to neběží nedaří se mi to rozchodit
Teplotu mi to ukazuje správnou, ale když ji zvýším relé se nezapne, když teplota klesne také se nic nestane chybu ...nevím, jak to správně zapsat, aby to fungovalo.
Kód: Vybrat vše
/*
if(buffer.indexOf("rele1=1")>=0)
digitalWrite(2,HIGH);
else if(buffer.indexOf("rele1=0")>=0)
digitalWrite(2,LOW);
*/
if (28 > teplota1){
digitalWrite(2,HIGH);
} else {
digitalWrite(2,LOW);
}
Jediné co mi funguje je, že když kliknu na ostatní tlačítka, tak se mi dané relé obarví a po opětovném kliknutí se relé vypne a barva tlačítka změní, což je skvělé, jen bych to ještě potřeboval u prvního tlačítka změnit ne na kliknutí, ale na ovládání teplotou.
Můžete mi někdo s tím kódem pomoct?
Níže ho přikládám celý a předem děkuji za případnou pomoc.
Kód: Vybrat vše
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h> //knihovna pro teplomer
// zde si upravte podle sebe
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// IP adresa
IPAddress ip(192,168,0, 150);
// port
EthernetServer server(80);
OneWire ds_1(7); // on pin 10 (a 4.7K resistor is necessary) teplomer v zavorce pin teplomeru
int ledPin = 13;
float teplota1 = teplomer1();
//--------------------------------zacatek teplomeru_1
float teplomer1() {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius_1, fahrenheit_1;
if ( !ds_1.search(addr)) {
// Serial.println("No more addresses.");
Serial.println();
ds_1.reset_search();
delay(250);
//return;
}
//Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
//Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
// return;
}
ds_1.reset();
ds_1.select(addr);
ds_1.write(0x44, 1); // start conversion, with parasite power on at the end
//delay(5000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds_1.reset();
ds_1.select(addr);
ds_1.write(0xBE); // Read Scratchpad
//Serial.print(" Data = ");
//Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds_1.read();
//Serial.print(data[i], HEX);
Serial.print(" ");
}
//Serial.print(" CRC=");
//Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
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);
// at lower res, the low bits are undefined, so let's zero them
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_1 = (float)raw / 16.0;
fahrenheit_1 = celsius_1 * 1.8 + 32.0;
/*Serial.print("Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");*/
float stupne_1 = celsius_1;
return stupne_1;
}
//------------------------------------konec teplomeru_1
void setup()
{
// inicalizace sítě
Ethernet.begin(mac, ip);
// inicializace serveru
server.begin();
// nastavíme pin 2 jako výstup pro rele
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
Serial.begin(9600);
pinMode(ledPin, OUTPUT); //pro ledku ke kouri zakladni nastaveni je vypnuta
}
void loop()
{
Serial.print("Teplota-1: ");
Serial.println(teplota1);
// Serial.println(teplomer1());
// když je připojen klient, zjistíme, zda jsou odeslána data
// od klienta směrem k nám
EthernetClient client = server.available();
String buffer = "";
// dokud je klient připojen
while (client.connected()) {
// čti data od něj dokud nenarazíš na znak nového řádku
if (client.available()) {
char c = client.read();
buffer = buffer + c;
if (c == '\n') {
/*
if(buffer.indexOf("rele1=1")>=0)
digitalWrite(2,HIGH);
else if(buffer.indexOf("rele1=0")>=0)
digitalWrite(2,LOW);
*/
if (28 > teplota1){
digitalWrite(2,HIGH);
} else {
digitalWrite(2,LOW);
}
if(buffer.indexOf("rele2=1")>=0)
digitalWrite(3,HIGH);
else if(buffer.indexOf("rele2=0")>=0)
digitalWrite(3,LOW);
if(buffer.indexOf("rele3=1")>=0)
digitalWrite(4,HIGH);
else if(buffer.indexOf("rele3=0")>=0)
digitalWrite(4,LOW);
if(buffer.indexOf("rele4=1")>=0)
digitalWrite(5,HIGH);
else if(buffer.indexOf("rele4=0")>=0)
digitalWrite(5,LOW);
// odešle klasickou hlavičku HTML stránky
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
// zde již klasická html data
client.println("<html>");
client.println("<head>");
// Název stránky
client.println("<title>Arduinio Server - Rele control</title>");
client.println("</head>");
client.println("<body>");
client.print("<h3 align=center>Program pro ovladani rele</h3>");
client.println("</br>");
// vygeneruje formulář
if (digitalRead(2)){
client.print("<a href='http://192.168.0.150?rele1=0'><button style='background:red;width:20%;height:30px'>RELE 1 VYPNUTO</button></a>");
}else{
client.print("<a href='http://192.168.0.150?rele1=1'><button style='background:green;width:20%;height:30px'>RELE 1</button></a>");
}
client.println(" rizeno teplotnim cidlem ds1");
client.println("</br>");
if (digitalRead(3)){
client.print("<a href='http://192.168.0.150?rele2=0'><button style='background:red;width:20%;height:30px'>RELE 2 VYPNUTO</button></a>");
}else{
client.print("<a href='http://192.168.0.150?rele2=1'><button style='background:green;width:20%;height:30px'>RELE 2</button></a>");
}
client.println(" tlacitko pro kotel 2");
client.println("</br>");
if (digitalRead(4)){
client.print("<a href='http://192.168.0.150?rele3=0'><button style='background:red;width:20%;height:30px'>RELE 3 VYPNUTO</button></a>");
}else{
client.print("<a href='http://192.168.0.150?rele3=1'><button style='background:green;width:20%;height:30px'>RELE 3</button></a>");
}
client.println(" tlacitko pro kotel 3");
client.println("</br>");
if (digitalRead(5)){
client.print("<a href='http://192.168.0.150?rele4=0'><button style='background:red;width:20%;height:30px'>RELE 4 VYPNUTO</button></a>");
}else{
client.print("<a href='http://192.168.0.150?rele4=1'><button style='background:green;width:20%;height:30px'>RELE 4</button></a>");
}
client.println(" tlacitko pro kotel 4");
client.println("</br>");
client.println("</br>");
client.println("</br>");
client.println("Teplota:");
client.println("</br>");
client.println(teplomer1());
client.print("<meta http-equiv=\"refresh\" content=\"10\">"); //stránka se načte automaticky jednou za 3 s
client.println("</body>");
client.println("</html>");
//ukončí přenos
client.stop();
Serial.println(buffer);
}
}
}
}