dani9191
| Inviato il: 27/07/2017 11:29:38
|
CITAZIONE
Direi che va bene basta non lo metti insieme alla isteuzioni che rallentano cosi non aumenta il gap
Quindi va messo nel loop? non nel void?
CITAZIONE
Al massimo ogni 49.7 giorni la coclea rimarra ferma 1 sec in piu o uno in meno
Bo non importa
CITAZIONE
Come variabile hai cambiato nome alla procedura della coclea giusto?
Si le ho lasciate come erano se no vado in confusione
Cmq dopo ogni sensore ho dovuto riscrivere l'istruzione,perche anche bloccando i sensori quando avveniva la lettura si rallentava lo stesso,ma cosi va benissimo l'importante è che funzioni, al momento è questo
#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
unsigned long OldStartCoclea = 0;
unsigned long OldStartAccenditore = 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;
}
nexLoop(nex_listen_list);
/////////////////////////////////////////////////////////////////////////////////////////////////////
if((Vstato==1)&&(TempOk==1)){
if(temph2o<90){
if(Tfumi<allTempFumi){ // verifica se le condizioni sono vere procedo con:
t9.setText("ON");
cocleaPrimoCiclo();
sensori(100);
accensione();
////////////////////////////////////////////////////////////////////
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(millis());
n13.setValue(OldStartCoclea);
dbSerial.flush();//pulisci la seriale
Th2oMax=txh2o+6;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void cocleaPrimoCiclo(){
if(OldStartCoclea>millis()) {
OldStartCoclea=millis();
}
if(CocleaCicloON){
OldStartCoclea = millis(); //Tiene in memoria l'ultima accensione
CocleaCicloON=false;
}
if(valCoclea==1){ //se il termo è in stato di accensione(PrimoCicloON)
if ((millis() - OldStartCoclea) < 500 ){
Vcoclea=HIGH;
}else{
Vcoclea=LOW;
}
if((millis() - OldStartCoclea) > 10000){
CocleaCicloON=true;
}
}else{
if((millis() - OldStartCoclea) < TcocleaOn ){
Vcoclea=HIGH;
}else{//altrimenti se il fuoco è gia presente
Vcoclea=LOW;
}
if((millis() - OldStartCoclea) > TcocleaOff){
CocleaCicloON=true;
}}
digitalWrite(coclea, Vcoclea);
}
void accensione(){
if(OldStartAccenditore > millis()){ // se millis si resetta (dopo circa 50 gg)
OldStartAccenditore = millis();
}
if(PrimoCicloON){ // se è la prima volta che entro nello stato ON
PrimoCicloON = false;
OldStartAccenditore = millis();
valCoclea=1;
}
if((millis() - OldStartAccenditore) < 280000){ // se non sono trascorsi 3 minuti
digitalWrite(accenditore, HIGH);
t25.setText("ON");
}
else{
digitalWrite(accenditore, LOW);
valCoclea=0;
t25.setText("OFF");
}
}
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);
}
void sensori(long temp){
cocleaPrimoCiclo();
Tfumi=ktcF.readCelsius();
cocleaPrimoCiclo();
umidita = dht.readHumidity(); //leggo umidita ambiente
cocleaPrimoCiclo();
tempamb = dht.readTemperature(); //leggo temperatura ambiente
cocleaPrimoCiclo();
sensor_inhouse.requestTemperatures(); //AVVIO LETTURA TEMPERATURA DAL PRIMO SENSORE
cocleaPrimoCiclo();
sensor_outhouse.requestTemperatures(); //AVVIO LETTURA TEMPERATURA DAL SECONDO SENSORE
cocleaPrimoCiclo();
temph2o =sensor_inhouse.getTempCByIndex(0); //leggo il sensore dell'acqua del termocamino
cocleaPrimoCiclo();
tempPuffer=sensor_outhouse.getTempCByIndex(0);
}
--------------- Non è impossibile se è fattibile!
|