Problema Domotica

Giorno a tutti, ho alcuni problemi con questo programma e volevo sapere se qualcuno di voi avesse qualche suggerimento
Grazie mille

#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal.h>
#include <math.h>
#define LED1 12
#define LED2 11
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int TempI= A0;
double v;/voltaggio tra 0 e 1023/
double volt;/* voltaggio reale tra o e 5 volt*/
double Rt;/* resistenza del termistore*/
double R1=10000;/valore resistenza in ohm che abbiamo messo noi (sia per termostato da 5 che da 10 k)/
double temp;/* temperatura in Kelvin*/
double Temperatura;
int stato =0;
byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip = { 192, 168, 1, 68 };
byte gateway = { 192, 168, 1, 1 };
byte subnet = { 255, 255, 255, 0 };
EthernetServer server(9000);
String readString;
String newValue;

void setup() {
lcd.begin(16, 2);
Serial.begin(9600);

pinMode(8, OUTPUT);
pinMode(13, OUTPUT);

Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
}

void loop() {
v=analogRead(TempI);/leggiamo il valore della tensione ai capi di R1/
volt=5v/1023;// riportiamo la tensine tra 0 e 5 volt con una proporzione
Rt=R1
(5/volt-1);//resistenza del termistore
temp=1/(0.001319+(0.000234125log(Rt))+(0.0000000876741log(Rt)*log(Rt)*log(Rt)));/calcolo la temperatura con la formula di Steinhart-Hart/
Temperatura=temp-273.15;// gradi Chelsius

if(Temperatura>20){
digitalWrite(LED1, HIGH);}
if(Temperatura<19){
digitalWrite(LED2, LOW);}

lcd.setCursor(0, 0);
lcd.print("Temp: ");

lcd.print(Temperatura);/stampo il valore della teperatura/
delay(1000);/ritardo di un secondo/

EthernetClient client = server.available();
while (client.connected()) {
if (client.available()) {
readString=client.readStringUntil(’\n’);
}

if (readString=="?button8on" ){
digitalWrite(8, HIGH);
}
if (readString=="?button8off" ){
digitalWrite(8, LOW);
}
if (readString=="?button13on" ){
digitalWrite(13, HIGH);
}
if (readString=="?button13off" ){
digitalWrite(13, LOW);
}
}
newValue="";
readString="";
}

ciao, devi racchiudere il codice nei tag code e poi devi indicare che problema hai altrimenti non si riesce ad aiutarti

Dovrebbe accendere, con if i led1 e 2 in base alla temperatura e dovrebbe accendere due led controllati dal telefonino, ma in entrambi i casi i led non si accendono corretemento, nel senso che nel caso della temperatura, si accende il led che dovrebbe accendersi inizialmente poi al variare della temperatura si accendono entrambi, mentre nel caso del controllo dal telefonino un led resta accesso indifferentemente dal comando che gli do dal telefono e l’altro resta sempre spento

#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal.h>
#include <math.h>
#define LED1 12
#define LED2 11
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int TempI= A0;
double v;/*voltaggio tra 0 e 1023*/
double volt;/* voltaggio reale tra o e 5 volt*/
double Rt;/* resistenza del termistore*/
double R1=10000;/*valore resistenza in ohm che abbiamo messo noi (sia per termostato da 5 che da 10 k)*/
double temp;/* temperatura in Kelvin*/
double Temperatura;
int stato =0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192, 168, 1, 68 };                     
byte gateway[] = { 192, 168, 1, 1 };                   
byte subnet[] = { 255, 255, 255, 0 };                 
EthernetServer server(9000);                               
String readString;
String newValue;

void setup() {
   lcd.begin(16, 2);
   Serial.begin(9600);
   
   pinMode(8, OUTPUT);
   pinMode(13, OUTPUT);
   
   Ethernet.begin(mac, ip, gateway, subnet);
   server.begin();
  }

void loop() {
  v=analogRead(TempI);/*leggiamo il valore della tensione ai capi di R1*/
  volt=5*v/1023;// riportiamo la tensine tra 0 e 5 volt con una proporzione
  Rt=R1*(5/volt-1);//resistenza del termistore
  temp=1/(0.001319+(0.000234125*log(Rt))+(0.0000000876741*log(Rt)*log(Rt)*log(Rt)));/*calcolo la temperatura con la formula di Steinhart-Hart*/
  Temperatura=temp-273.15;// gradi Chelsius
 
  if(Temperatura>20){
  digitalWrite(LED1, HIGH);}
  if(Temperatura<19){
  digitalWrite(LED2, LOW);}
 
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
 
  lcd.print(Temperatura);/*stampo il valore della teperatura*/
  delay(1000);/*ritardo di un secondo*/
   
  EthernetClient client = server.available();
    while (client.connected()) {   
      if (client.available()) {
         readString=client.readStringUntil('\n');   
          }         
                   
             if (readString=="?button8on" ){
              digitalWrite(8, HIGH);
            }           
           if (readString=="?button8off" ){
              digitalWrite(8, LOW);
           }           
             if (readString=="?button13on" ){
              digitalWrite(13, HIGH);
            }           
           if (readString=="?button13off" ){
              digitalWrite(13, LOW);
           }         
             }                       
            newValue="";
          readString=""; 
      }

ho alcuni problemi

Troppo generico....

Ti consiglio di cercare un altro esempio, mancano alcuni pezzi e la parte ethernet è tutta sbagliata. Poi non hai specificato l'hardware che possiedi.

prova a mettere così, in questo modo spegni uno e accendi l’altro in base alla temperatura

if(Temperatura>20){
  digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
}
  if(Temperatura<19){
digitalWrite(LED2, HIGH);
  digitalWrite(LED1, LOW);}

per l’altro problema non saprei indicarti una soluzione così a occhio, aspetta qualcuno più esperto di me.

Posso suggerirti di controllare se è corretto il comando inviato dal telefonino

Dead94: Giorno a tutti,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Il problema con la temperatura è risolta grazie Doppiozero. Sto usando un arduino uno

pablos: mancano alcuni pezzi e la parte ethernet è tutta sbagliata.

Scusa quali sarebberò le parti mancanti e sbagliate?

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 68 };                    
byte gateway[] = { 192, 168, 1, 1 };                  
byte subnet[] = { 255, 255, 255, 0 };

se fai un server tutti questi param non servono

double v;/*voltaggio tra 0 e 1023*/
double volt;/* voltaggio reale tra o e 5 volt*/
double Rt;/* resistenza del termistore*/
double R1=10000;/*valore resistenza in ohm che abbiamo messo noi (sia per termostato da 5 che da 10 k)*/
double temp;/* temperatura in Kelvin*/
double Temperatura;

con arduino il double non si usa

manca la negoziazione tra client e server HTTP 200 OK

manca la lettura da clientread e la copia dei char su readString

EthernetServer server(9000);

perchè porta 9000?

manca la chiusura del server alla fine della trasmissione

Usi il pin 13 ... non hai specificato che arduino hai, su una scheda puoi usarlo su un altra no Non hai specificato che ethernet hai

manca il set dei pin CS

Non hai specificato dove si trova la pagina web ?button13on questa GET non si sa da dove arriva

…con arduino il double non si usa…

Io uso long, ma il double ha lo stesso significato tranne per la DUE.