dani9191
| Inviato il: 26/07/2017 10:16:01
|
Si ho provato anche impostando 100 resta acceso sempre (quasi 2 secondi),questo è il codice praticamente ho solo aggiunto il tuo. Ripeto se lo provo da solova benissimo insieme si sballa tutto.Se provi con la seriale capisci meglio cosa voglio dire..
long MillsON = 0;
long MillsOFF = 0;
long MillsAVVIO = 0;
#include "DHT.h" // DHT & AM2302 library
#include "Nextion.h" //librearia nextion
#include <SoftwareSerial.h> //libreria seriale
#include <OneWire.h> //libreria per ds18b20
#include <DallasTemperature.h> //libreria per conversione valore
#include "max6675.h"
int ktcSO = 52; //sonda fumi max6675
int ktcCS = 53;
int ktcCLK = 51;
int CktcSO = 47; //sonda camera max6675
int CktcCS = 49;
int CktcCLK = 45;
MAX6675 ktcF(ktcCLK, ktcCS, ktcSO);
MAX6675 ktcC(CktcCLK, CktcCS, CktcSO);
#define ONE_WIRE_BUS_1 12 // Il terminale data del sensore H2O TERMO è connesso alla porta 12 di Arduino
#define ONE_WIRE_BUS_2 3 // Il terminale data del sensore H2O PUFFER è connesso alla porta 12 di Arduino
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define aspiratore 4 //imposto il pin 4 per l'aspiratore
#define coclea 5 //imposto il pin 5 per la coclea
#define circolatore 6 //imposto il pin 6 per il circolatore
#define ventola 7 //imposto il pin 7 per la ventola
#define accenditore 8 //imposto il pin 8 per l'accenditore
#define DHTPIN 9
SoftwareSerial HMISerial(10, 11);// Nextion TX to pin 10 and RX to pin 11 of Arduino`
OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);
DallasTemperature sensor_inhouse(&oneWire_in);
DallasTemperature sensor_outhouse(&oneWire_out);
DHT dht(DHTPIN, DHTTYPE);
int txh2o; //temperatura di soglia termocamino
int Th2oMax; //temperatura di soglia + 6 si massima
int Tfumi; //temperatura rilevata fumi
int Tcamera; //temperatura rilevata camera combustione
int umidita; //umidità rilevata
int tempamb; //temperatura rilevata ambiente
int temph2o; //temperatura acqua rilevata
int tempPuffer; //temperatura rilevata puffer
int allTempFumi=200; //allarme temperatura fumi
int percentuale; //percentuale aspiratore
int pwmfumi; //variabile per l'aspiratore
int Vcoclea=LOW; //variabile velocita coclea
int Vstato=0; //lettura stato interrutore ON/OFF
int TcocleaOn; //variabile per mandata pellet ON
int TcocleaOff; //variabile per mandata pellet Off
int valCoclea=1; //variabile per capire se in stato di accensione
int TempOk=1; //variabile per conoscere lo stato dell'acqua
int ciclo=0;
long OldStartCoclea = 0;
unsigned long VarMillis = 0;
unsigned long OldStartAccenditore = 0;
unsigned long DeltaRestartMillis = 0;
unsigned long DeltaRestartMillis1 = 0;
boolean PrimoCicloON = true;
boolean CocleaCicloON =true ;
void t8PopCallback(void *ptr); //ambiente page home 0
void t9PopCallback(void *ptr); //ambiente page home 0
void n0PopCallback(void *ptr); //ambiente page home 0
void n1PopCallback(void *ptr); //fumi page home 0
void n4PopCallback(void *ptr); //fumi page home 0
void n2PopCallback(void *ptr); //T.CAMERA COMBUSTIONE page home 0
void n3PopCallback(void *ptr); //acqua page home 0
void n5PopCallback(void *ptr); //UMIDITA page home 0
void n6PopCallback(void *ptr); //TEMPERATURA RILEVATA PUFFER
void n30PopCallback(void *ptr); //bagno page bagno 2
void b31PopCallback(void *ptr); //bagno - page bagno 2
void b0PopCallback(void *ptr); //INTERRUTTORE ON/OFF
void b32PopCallback(void *ptr); //bagno + page bagno 2
NexNumber n0 = NexNumber(0, 1, "n0"); // ambiente
NexNumber n1 = NexNumber(0, 5, "n1"); // fumi
NexNumber n2 = NexNumber(0, 20, "n2"); // T.CAMERA COMBUSTIONE
NexNumber n3 = NexNumber(0, 3, "n3"); //acqua temp rilevata
NexNumber n4 = NexNumber(0, 8, "n4"); //aspiratore
NexNumber n5 = NexNumber(0, 11, "n5");//UMIDITA
NexNumber n6 = NexNumber(0, 13, "n6");//H2O PUFFER
NexNumber n30 = NexNumber(1, 3, "n30");//acqua temp impostata
NexButton b0 = NexButton(0, 22, "b0");//INTERRUTTORE ON/OFF
NexButton b31 = NexButton(1, 1, "b31");//set acqua
NexButton b32 = NexButton(1, 2, "b32");//set acqua
NexText t8 = NexText(0, 11, "t8");
NexText t9 = NexText(0, 14, "t9");
NexText t25 = NexText(2, 8, "t25");//CANDELETTA ON/OFF
NexText t26 = NexText(2, 9, "t26");//VENTOLA ON/OFF
NexText t27 = NexText(2, 10, "t27");//POMPA ON/OFF
NexText t28 = NexText(2, 11, "t28");//COCLEA ON/OFF
NexText t29 = NexText(2, 12, "t29");//aspiratore ON/OFF
NexNumber n12 = NexNumber(2, 19, "n12"); // MILLIS
NexNumber n13 = NexNumber(2, 21, "n13"); // TEMPO COCLEA
NexNumber n14 = NexNumber(2, 23, "n14"); // TEMPO CANDELETTA
char buffer[100] = {0};
NexTouch *nex_listen_list[] =
{
&t8,
&t9,
&t25,
&t26,
&t27,
&t28,
&t29,
&n0,
&n1,
&n2,
&n3,
&n4,
&n5,
&n6,
&n12,
&n13,
&n14,
&n30,
&b0,
&b31,
&b32,
NULL
};
void t8PopCallback(void *ptr)
{
}
void t9PopCallback(void *ptr)
{
}
void t25PopCallback(void *ptr)
{
}
void t26PopCallback(void *ptr)
{
}
void t27PopCallback(void *ptr)
{
}
void t28PopCallback(void *ptr)
{
}
void t29PopCallback(void *ptr)
{
}
void n0PopCallback(void *ptr)
{
}
void n1PopCallback(void *ptr)
{
}
void n2PopCallback(void *ptr)
{
}
void n3PopCallback(void *ptr)
{
}
void n4PopCallback(void *ptr)
{
}
void n5PopCallback(void *ptr)
{
}
void n6PopCallback(void *ptr)
{
}
void n12PopCallback(void *ptr)
{
}
void n13PopCallback(void *ptr)
{
}
void n14PopCallback(void *ptr)
{
}
void n30PopCallback(void *ptr)
{
}
void b0PopCallback(void *ptr) //h2o termocamino
{
dbSerial.flush();
if(Vstato==0){
Vstato=1;
b0.setText("ON");
}
else{
Vstato=0;
b0.setText("OFF");
}
}
void b31PopCallback(void *ptr) //h2o termocamino
{
dbSerial.flush();
txh2o -= 1;
n30.setValue(txh2o);
delay(500);
}
void b32PopCallback(void *ptr) //h2o termocamino
{
dbSerial.flush();
txh2o += 1;
n30.setValue(txh2o);
delay(500);
}
void setup(void)
{
attachInterrupt(2, interruptDepressostato, RISING);
attachInterrupt(3, interruptTermostato, RISING);
attachInterrupt(4, interruptPressostato, RISING);
Serial.begin(9600);
HMISerial.begin(9600);
dht.begin();
sensor_inhouse.begin(); //AVVIO IL PRIMO DS18B20
sensor_outhouse.begin(); //AVVIO IL SECONDO DS18B20
txh2o=60; //temperatura di soglia acqua termocamino
nexInit();
t8.attachPop(t8PopCallback);
t9.attachPop(t9PopCallback);
t25.attachPop(t25PopCallback);
t26.attachPop(t26PopCallback);
t27.attachPop(t27PopCallback);
t28.attachPop(t28PopCallback);
t29.attachPop(t29PopCallback);
n0.attachPop(n0PopCallback);
n1.attachPop(n1PopCallback);
n2.attachPop(n2PopCallback);
n3.attachPop(n3PopCallback);
n4.attachPop(n4PopCallback);
n5.attachPop(n5PopCallback);
n6.attachPop(n6PopCallback);
n12.attachPop(n12PopCallback);
n13.attachPop(n13PopCallback);
n14.attachPop(n14PopCallback);
n30.attachPop(n30PopCallback);
b0.attachPop(b0PopCallback);
b31.attachPop(b31PopCallback);
b32.attachPop(b32PopCallback);
pinMode(aspiratore,OUTPUT);
pinMode(coclea,OUTPUT);
pinMode(circolatore,OUTPUT);
pinMode(ventola,OUTPUT);
pinMode(accenditore,OUTPUT);
delay(1000);
}
void loop(void){
if(Vstato==0){
Vstato=1;
}
accensioneONOFF(1000,10);
nexLoop(nex_listen_list);
Th2oMax=txh2o+6;
Tfumi=ktcF.readCelsius();
Tcamera=ktcC.readCelsius();
umidita = dht.readHumidity(); //leggo umidita ambiente
tempamb = dht.readTemperature(); //leggo temperatura ambiente
sensor_inhouse.requestTemperatures(); //AVVIO LETTURA TEMPERATURA DAL PRIMO SENSORE
sensor_outhouse.requestTemperatures(); //AVVIO LETTURA TEMPERATURA DAL SECONDO SENSORE
temph2o =sensor_inhouse.getTempCByIndex(0); //leggo il sensore dell'acqua del termocamino
tempPuffer=sensor_outhouse.getTempCByIndex(0);
/////////////////////////////////////////////////////////////////////////////////////////////////////
if(OldStartAccenditore > VarMillis){ // se millis si resetta (dopo circa 50 gg)
DeltaRestartMillis = 4294967295 - OldStartAccenditore;
OldStartAccenditore = 0;
}
if(OldStartCoclea > VarMillis){ // se millis si resetta (dopo circa 50 gg)
DeltaRestartMillis1 = 4294967295 - OldStartCoclea;
OldStartCoclea = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
if((Vstato==1)&&(TempOk==1)){
if(temph2o<90){
if(Tfumi<allTempFumi){ // verifica se le condizioni sono vere procedo con:
t9.setText("ON");
VarMillis = millis();
/////////////////////////////////////////////////////////////////////
if(PrimoCicloON){ // se è la prima volta che entro nello stato ON
PrimoCicloON = false;
OldStartAccenditore = VarMillis;
DeltaRestartMillis = 0;
}
/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
if(VarMillis + DeltaRestartMillis - OldStartAccenditore < 5000){ // se non sono trascorsi 3 minuti
digitalWrite(accenditore, HIGH);
t25.setText("ON");
}
else{
digitalWrite(accenditore, LOW);
valCoclea=0;
t25.setText("OFF");
}
////////////////////////////////////////////////////////////////////////
if (temph2o<txh2o){
t8.setText("LAVORO");
pwmfumi=255;
TcocleaOn=500;
TcocleaOff=10000;
}
else if(temph2o>txh2o+6){
pwmfumi=50;
TcocleaOn=1000;
TcocleaOff=1500;
t8.setText("RIPOSO");
}
else if(temph2o>txh2o+10){
TempOk=0;
t8.setText("STANDBY TEMP");
}
else{
pwmfumi=127;
TcocleaOn=500;
TcocleaOff=500;
t8.setText("LAVORO MODULA");
}
////////////////////////////////////////////////////////////////////
percentuale = map(pwmfumi,0,254,0, 100);
digitalWrite(circolatore,HIGH);
digitalWrite(ventola,HIGH);
analogWrite(aspiratore,pwmfumi);
///////////////////////////////////////////////////////////////////////////////////////////
}else{
t9.setText("ALLARME TEMP FUMI");
digitalWrite(aspiratore,LOW);
digitalWrite(circolatore,HIGH);
digitalWrite(ventola,LOW);
digitalWrite(accenditore,LOW);
digitalWrite(coclea,LOW);
percentuale =0;
}
}
else{
t8.setText("ALLARME TEMP H2O");
digitalWrite(aspiratore,LOW);
digitalWrite(circolatore,HIGH);
digitalWrite(ventola,LOW);
digitalWrite(accenditore,LOW);
digitalWrite(coclea,LOW);
percentuale =0;
}
}
////////////////////////////////////////////////////////////////////////////////////////////
else if((Vstato==0) || (TempOk==0)){
if(Tfumi<40){
t9.setText("OFF");
t8.setText("SPENTO");
digitalWrite(aspiratore,LOW);
digitalWrite(circolatore,LOW);
digitalWrite(ventola,LOW);
digitalWrite(accenditore,LOW);
digitalWrite(coclea,LOW);
PrimoCicloON = true;
CocleaCicloON = true;
TempOk=1;
percentuale=0;
}
else{
t8.setText("SPEGNIMENTO");
digitalWrite(accenditore,LOW);
digitalWrite(circolatore,HIGH);
digitalWrite(ventola,HIGH);
digitalWrite(coclea,LOW);
analogWrite(aspiratore,255);
percentuale=100;
}}
n0.setValue(tempamb);
n5.setValue(umidita);
n6.setValue(tempPuffer);
n1.setValue(Tfumi);
n2.setValue(Tcamera);
n4.setValue(percentuale);
n3.setValue(temph2o);
n30.setValue(txh2o);
n12.setValue(VarMillis);
n13.setValue(OldStartCoclea);
dbSerial.flush();//pulisci la seriale
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void accensioneONOFF(long tempoon , long tempooff)
{ if ((millis() - MillsON) > tempoon){
MillsON = millis();
if (ciclo==0){
Serial.println("ACCENSIONE ON");
digitalWrite(coclea,HIGH);
}
if (ciclo > 0){
Serial.println("SPEGNIMENTO OFF");
digitalWrite(coclea,LOW);
}
// MillsON = millis();
ciclo = ciclo +1;
if (ciclo >= tempooff) ciclo = 0;
}
}
void interruptDepressostato(){
t8.setText("MANCA DEPRESSIONE");
digitalWrite(coclea, LOW);
digitalWrite(aspiratore, LOW);
digitalWrite(circolatore, LOW);
digitalWrite(ventola, LOW);
digitalWrite(accenditore, LOW);
}
void interruptTermostato(){
t8.setText("ALLARME TEMPERATURA");
digitalWrite(coclea, LOW);
digitalWrite(aspiratore, LOW);
digitalWrite(circolatore, HIGH);
digitalWrite(ventola, LOW);
digitalWrite(accenditore, LOW);
}
void interruptPressostato(){
t8.setText("MANCA PRESSIONE");
digitalWrite(coclea, LOW);
digitalWrite(aspiratore, LOW);
digitalWrite(circolatore, LOW);
digitalWrite(ventola, LOW);
digitalWrite(accenditore, LOW);
}
--------------- Non è impossibile se è fattibile!
|