PDA

Visualizza la versione completa : Programmazione ARDUINO per acquario


marco3020
15-11-2015, 14:55
Buongiorno mi servirebbe una mano per programmare il mio arduino 2560 per creare un menu che mi faccia fare il cambio acqua, e la sospensione per 10 minuti della pompa come posso fare? per ora ho questo:

[CODE] #include
#include
#include
#include
#include
#include
#include
#include
#include
#include

int rele5 = 43; // pin a cui č connesso il LED
boolean acceso = false;

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip( 192, 168, 1, 6 );
EthernetServer server(80);



PCF8574_HD44780_I2C lcd(0x3F, 20, 4);

long Pompa_Accesa_in_data=0;
const unsigned long quanto_tempo_deve_restare_accesa_la_pompa = 300000;
long inizio_accensione_arduino= 0;
unsigned long quanto_tempo_deve_restare_spento_skim_avvio_arduin o = 300000;
int pompa_spenta =0;

int oraAlba = 9;
int minAlba = 10;
long albas;
int durataAlbas = 720;
int oraTramonto = 17;
int minTramonto = 10;
long tramontos;
int durataTramontos = 720;
long nows;
int delayR = 0;
int delayG = 120;
int delayB = 240;
int delayUV = 360;
int delayW = 360;

//LED
int pinR = 2;
int pinG = 3;
int pinB = 4;
int pinW = 5;
int pinUV = 6;

//RELE
float rele1 = 35;
float rele2 = 37;
int rele3 = 39;
int rele4 = 41;

int rele6 = 45;
int rele7 = 47;


//menu

int Menu=0; // VARIABILE CHE IDENTIFICA IL MENU' IN USO

const int buttonPingiu = 22; // pin Giu
const int buttonPinsu= 24; // pin Su
const int buttonPinok = 26; // pin OK
const int buttonPinPiu = 30; // pin modifica pių
const int buttonPinMeno = 32; // pin modifica meno

int lastButtonokState = LOW; // the previous reading from the Enter input pin
int lastButtongiuState = LOW; // the previous reading from the Esc input pin
int lastButtonsuState = LOW; // the previous reading from the Left input pin
int lastButtonPiuState = LOW; //
int lastButtonMenoState = LOW; //

long lastEnterDebounceTime = 0; // the last time the output pin was toggled
long lastEscDebounceTime = 0; // the last time the output pin was toggled
long lastLeftDebounceTime = 0; // the last time the output pin was toggled
long lastRightDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 500; // the debounce time

//Variabili del menu
MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);

void menuUseEvent(MenuUseEvent used)
{

Serial.println("menuUseEvent found Dealy (D)");
}



void menuChangeEvent(MenuChangeEvent changed)
{
Serial.print("Menu change ");
Serial.print(changed.from.getName());
Serial.print(" ");
Serial.println(changed.to.getName());
}


// MENU' IMPOSTAZIONI
MenuItem menu1Item3 = MenuItem("Item3");
MenuItem menuData=MenuItem("Data/Ora");
MenuItem menuOra=MenuItem("Ora");



char buffer1[20];
char buffer2[20];

//ALLARMI
float riscaldatore = 22.0; // allerta temperatura acqua bassa
float alertacqua = 27.0; // ventola tangenziale
float alertplafo = 44.0; // alerta plafoniera temperatura troppo alta
float tempSoglia = 38.0; //temperatura ventole plafo

#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tmp_address;
float temp0=0;
float temp1=0;
int numberOfDevices;




void setup() {

pinMode(rele1,OUTPUT);
pinMode(rele2, OUTPUT);
pinMode(rele3, OUTPUT);
pinMode(rele4,OUTPUT);
pinMode(rele5,OUTPUT);
pinMode(rele6,OUTPUT);
pinMode(rele7,OUTPUT);

digitalWrite(rele1,LOW);
digitalWrite( rele2, LOW);
digitalWrite( rele3, HIGH );
digitalWrite(rele4, LOW);
digitalWrite(rele5,0);
digitalWrite(rele6, LOW);
digitalWrite(rele7, LOW);

//BUTTON
pinMode(buttonPinMeno, INPUT);
pinMode(buttonPinPiu, INPUT);
pinMode(buttonPinok, INPUT);
pinMode(buttonPinsu, INPUT);




Serial.begin(9600);

Wire.begin();

sensors.begin();
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus() != timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");

lcd.init(); // LCD Initialization
lcd.backlight( ); // Backlight ON
lcd.clear(); // Clear the display

numberOfDevices = 1;

pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinW, OUTPUT);
pinMode(pinUV, OUTPUT);



inizio_accensione_arduino= millis();

}

void loop()
{

if (millis() >= (quanto_tempo_deve_restare_spento_skim_avvio_ardui no + inizio_accensione_arduino)) {
digitalWrite(rele3, LOW);
}






case 0:
if ( digitalRead( buttonMeno ) == HIGH || ( digitalRead( buttonPiu )) == HIGH) {
time = millis();
}


// prendo ora attuale
DateTime now = RTC.get();
sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(0,0);
lcd.print( buffer1 );

sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());
lcd.setCursor(0,1);
lcd.print( buffer2 );
Serial.println(buffer1);
Serial.println(buffer2);

// Richiesta temperatura
sensors.requestTemperatures(); // Comando per misurare la temp.
temp0 = sensors.getTempCByIndex(0);
lcd.setCursor(0,2); // Colonna 0, Riga 2
lcd.print("acqua:");
lcd.setCursor (6, 2);
lcd.print(temp0);

temp1 = sensors.getTempCByIndex(1);
lcd.setCursor (0,3); //Colonna 0, Riga 3
lcd.print("plafo:");
lcd.setCursor (6,3);
lcd.print(temp1);

lcd.setCursor(12,1); // Colonna 0, Riga 0
lcd.print("feed:");

lcd.setCursor(12,2); // Colonna 0, Riga 0
lcd.print("cambio:");

/* if (millis()>=(Pompa_Accesa_in_data + quanto_tempo_deve_restare_accesa_la_pompa))
{
digitalWrite(rele5,0);
Pompa_Accesa_in_data = millis();
{
*/

//pompa_Spenta ==digitalRead (rele5);

// Vengono ascoltati nuovi client
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// Finisce una richiesta HTTP
boolean currentLineIsBlank = true;
String postText ="";
while (client.connected()) {
if (client.available()) {
char c = client.read();
if(postText.length()

SJoplin
17-11-2015, 18:01
E' una domanda un po' difficilotta per un forum di acquari.
Magari prova a scrivere il titolo un po' meglio, specificando a che linguaggio/controller ti riferisci.
Qualcuno che sa fare sta roba, qua, c'č stato di sicuro.
Tutto sta a vedere se legge la tua discussione ;-)

alegiu
17-11-2015, 18:57
arduino giusto?

Potrebbe esserti di aiuto SirNino

SirNino
18-11-2015, 00:56
Ci sono tante cose che non capisco in questo listato ma preferisco non chiedere...

Qua ci sono pių errori (mancano tutte le parentesi graffe) e non viene impostato il systemtime sull'RTC

...
if(timeStatus() != timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");



Sul metodo di costruzione del menų credo che qua (https://forum.arduino.cc/index.php?topic=359075.0) ti stiano giā provando ad aiutare (segui il link che ti hanno dato, prova e studia gli esempi) quindi, visto che non conosco questa libreria preferirei non aggiungere altro.

Per quel che riguarda il sistema per tener spenta la pompa per 10 minuti č semplice:

- converti i minuti di spegnimento in millis()
- salvi questo valore in una variabile long
- e lo paragoni ai millis() correnti


void setup(){
...

unsigned long inizio_sospensione;
unsigned long quanto_tempo_deve_restare_spenta_la_pompa = 600000;
}



Alla relativa voce del menų inserisci


inizio_sospensione = millis();


nel loop inserisci


if((inizio_sospensione + quanto_tempo_deve_restare_spenta_la_pompa) >= millis()){
digitalWrite(n°uscita, HIGH);
}else{
digitalWrite(n°uscita, LOW);


Ovviamente sostituisci n°uscita con il relativo numero di uscita utilizzato.



@Mod: per favore potreste inserire quel listato tra i TAG CODE (altrimenti č illeggibile la pagina)



Ciao

marco3020
18-11-2015, 08:52
Grazie SirNino ora provo quella libreria e vediamo cosa combino

Inviato dal mio LG-D855 utilizzando Tapatalk

marco3020
18-11-2015, 22:16
Buona sera a tutti ho provato a caricare quella libreria ma non va perche ha bisogno della libreria liquidcrytal e io invece ho la : #include <PCF8574_HD44780_I2C.h> quindi mi da erori su errori, ho provato a caricarla cosi:


//The full code is in library example file Quick_tour.ino
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <PCF8574_HD44780_I2C.h>
#include <buttons.h>
#include <MENWIZ.h>
#include <EEPROM.h>

PCF8574_HD44780_I2C lcd(0x3F, 20, 4);

// DEFINE ARDUINO PINS FOR THE NAVIGATION BUTTONS
#define UP_BOTTON_PIN 9
#define DOWN_BOTTON_PIN 10
#define LEFT_BOTTON_PIN 7
#define RIGHT_BOTTON_PIN 8
#define CONFIRM_BOTTON_PIN 12
#define ESCAPE_BOTTON_PIN 11

menwiz tree;
// create lcd obj using LiquidCrystal lib


int list,sp=110;

void setup(){
_menu *r,*s1,*s2;

Serial.begin(9600);
tree.begin(PCF8574_HD44780_I2C lcd(0x3F, 20, 4);); //declare lcd object and screen size to menwiz lib

lcd.init(); // LCD Initialization
lcd.backlight( ); // Backlight ON
lcd.clear(); // Clear the display

r=tree.addMenu(MW_ROOT,NULL,F("Root"));
s1=tree.addMenu(MW_SUBMENU,r, F("Node1"));
s2=tree.addMenu(MW_VAR,s1, F("Node3"));
s2->addVar(MW_LIST,&list);
s2->addItem(MW_LIST, F("Option1"));
s2->addItem(MW_LIST, F("Option2"));
s2->addItem(MW_LIST, F("Option3"));
s2=tree.addMenu(MW_VAR,s1, F("Node4"));
s2->addVar(MW_AUTO_INT,&sp,0,120,10);
s1=tree.addMenu(MW_VAR,r, F("Node2"));
s1->addVar(MW_ACTION,myfunc);
tree.navButtons(UP_BOTTON_PIN,DOWN_BOTTON_PIN,LEFT _BOTTON_PIN,RIGHT_BOTTON_PIN,ESCAPE_BOTTON_PIN,CON FIRM_BOTTON_PIN);
}

void loop(){
tree.draw();
}

void myfunc(){
Serial.println("ACTION FIRED");
}








e questo č lo'erroere

Arduino:1.6.5 (Windows 7), Scheda:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

quick_tour.ino: In function 'void setup()':
quick_tour:30: error: expected primary-expression before 'lcd'
quick_tour:30: error: expected primary-expression before ')' token
quick_tour:30: error: expected ';' before ')' token
expected primary-expression before 'lcd'

SirNino
18-11-2015, 23:05
Questo non č un listato funzionante ma un esempio, un estratto.
Mancano delle parentesi, manca il setup().
Prova ad aprire qualche esempio incluso nella libreria e modificarlo per capire come funziona.

Inviato dal mio H60-L04 utilizzando Tapatalk

marco3020
18-11-2015, 23:08
ciao Nino l'ho modifica l'originale č questo:


/The full code is in library example file Quick_tour.ino
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <buttons.h>
#include <MENWIZ.h>
#include <EEPROM.h>

// DEFINE ARDUINO PINS FOR THE NAVIGATION BUTTONS
#define UP_BOTTON_PIN 9
#define DOWN_BOTTON_PIN 10
#define LEFT_BOTTON_PIN 7
#define RIGHT_BOTTON_PIN 8
#define CONFIRM_BOTTON_PIN 12
#define ESCAPE_BOTTON_PIN 11

menwiz tree;
// create lcd obj using LiquidCrystal lib
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int list,sp=110;

void setup(){
_menu *r,*s1,*s2;

Serial.begin(19200);
tree.begin(&lcd,20,4); //declare lcd object and screen size to menwiz lib

r=tree.addMenu(MW_ROOT,NULL,F("Root"));
s1=tree.addMenu(MW_SUBMENU,r, F("Node1"));
s2=tree.addMenu(MW_VAR,s1, F("Node3"));
s2->addVar(MW_LIST,&list);
s2->addItem(MW_LIST, F("Option1"));
s2->addItem(MW_LIST, F("Option2"));
s2->addItem(MW_LIST, F("Option3"));
s2=tree.addMenu(MW_VAR,s1, F("Node4"));
s2->addVar(MW_AUTO_INT,&sp,0,120,10);
s1=tree.addMenu(MW_VAR,r, F("Node2"));
s1->addVar(MW_ACTION,myfunc);
tree.navButtons(UP_BOTTON_PIN,DOWN_BOTTON_PIN,LEFT _BOTTON_PIN,RIGHT_BOTTON_PIN,ESCAPE_BOTTON_PIN,CON FIRM_BOTTON_PIN);
}

void loop(){
tree.draw();
}

void myfunc(){
Serial.println("ACTION FIRED");
}

marco3020
27-11-2015, 18:38
Ciao SirNino non č che potresti spiegarmi come sistemare sketch e aggiungere il menu?

Inviato dal mio LG-D855 utilizzando Tapatalk

marco3020
29-11-2015, 13:46
Nessuno mi spiega :(

Inviato dal mio LG-D855 utilizzando Tapatalk

marco3020
02-12-2015, 10:15
Up

Inviato dal mio LG-D855 utilizzando Tapatalk

SJoplin
03-12-2015, 17:39
E' una domanda un po' difficilotta per un forum di acquari.
Magari prova a scrivere il titolo un po' meglio, specificando a che linguaggio/controller ti riferisci.

il suggerimento resta sempre valido ;-)

marco3020
04-12-2015, 02:05
fatto mo vediamo se qualcuno mia aiuta

SJoplin
05-12-2015, 13:41
te l'ho sistemato io il titolo. per il resto purtroppo non posso esserti d'aiuto :-(

marco3020
05-12-2015, 13:49
Grazie mille, speriamo qualcuno mi aiuti :(

Inviato dal mio LG-D855 utilizzando Tapatalk

marco3020
23-12-2015, 10:32
Up

Inviato dal mio LG-D855 utilizzando Tapatalk

dr.jekyll
23-12-2015, 20:18
ciao, io ho scritto un menų che va bene per gli lcd abbinato ad una pulstatiera a 5 pin:

m-gNjeDb6kQ



Vedi un po' se riesci a copiarti il menu che viene gestito con dei while

la funzione doso l'avevo scritta per far partire una dosometrica e fermare la pompa di mandata sump per un tempo variabile. Dovrebbe essere adatta al tuo scopo. Anche se nel video che ho caricato viene usato un lcd pių piccolo il programma č stato scritto per un 20x4



// DR.JEKYLL ENRICOVELA@GMAIL.COM





#include <LiquidCrystal.h>

int meno=53;
int piu=52;
int dx=51;
int enter=50;
int sx=49;




LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//VARIAIBLI bool




//VARIBILI tempo
short int s=35;
short int m=03;
short int h=23;
short int ktime=1;
short int day=3;


//VARIABILI neon
short int neon_cond=0; //!!!!!!!!!!!!!!!!!! NON MODIFICARE!!!!!!!!!!!!!!!!!

short int m_on=0;
short int h_on=0;
short int m_off=0;
short int h_off=0;


//VARIABILI doso
short int doso_cond=0; //!!!!!!!!!!!!!!!!!! NON MODIFICARE!!!!!!!!!!!!!!!!!

short int tempo_doso=0;
short int m_stop=0;
short int h_stop=0;
short int m_period=0;
short int h_period=0;
float ml=0;



//VARIABILI controller

boolean pinsx;
boolean pindx;
boolean pinp;
boolean pinm;
boolean pinenter;
short int cas=0;
short int cas1=0;
short int cas2=0;













void menucontroll(boolean,boolean,boolean,boolean,boole an,int,int){
pinp=digitalRead(piu);
pinm=digitalRead(meno);
pindx=digitalRead(dx);
pinenter=digitalRead(enter);
pinsx=digitalRead(sx);

if (pindx==HIGH){cas1=cas1+1;bounc(); lcd.begin(20,4); if (cas1==5){cas1=1;}}
if (pinsx==HIGH){cas1=cas1-1; lcd.begin(20,4); if (cas1==0){cas1=4;}bounc();}
if (pinenter==HIGH){cas2=1; bounc(); lcd.begin(20,4);}
if(pinp==HIGH){bounc();cas1=0; lcd.begin(20,4);}
if (pinm==HIGH){bounc();cas1=0; lcd.begin(20,4);}

}

void allread(boolean,boolean,boolean,boolean,boolean){

pinp=digitalRead(piu);
pinm=digitalRead(meno);
pindx=digitalRead(dx);
pinenter=digitalRead(enter);
pinsx=digitalRead(sx);
}
















// STAMPA ORARIO variabili: ore, minuti, secondi
void printime(int,int,int){

if(day==0){lcd.setCursor(0, 0);lcd.print("Lun");}
if(day==1){lcd.setCursor(0, 0);lcd.print("Mar");}
if(day==2){lcd.setCursor(0, 0);lcd.print("Mer");}
if(day==3){lcd.setCursor(0, 0);lcd.print("Gio");}
if(day==4){lcd.setCursor(0, 0);lcd.print("Ven");}
if(day==5){lcd.setCursor(0, 0);lcd.print("Sab");}
if(day==6){lcd.setCursor(0, 0);lcd.print("Dom");}
lcd.setCursor(4, 0); lcd.print(h);
lcd.setCursor(6, 0);lcd.print(":");
lcd.setCursor(7, 0);lcd.print(m);
lcd.setCursor(9, 0);lcd.print(":");
lcd.setCursor(10, 0);lcd.print(s);
lcd.setCursor(14, 0);lcd.print("T:");
lcd.setCursor(16, 0);lcd.print(temperatura);


lcd.setCursor(0, 4);
lcd.print("mod");
lcd.setCursor(4, 4);
lcd.print("mod");
lcd.setCursor(8, 4);
lcd.print("set");


}

// SET NEON h_on, s, m_on, h_off, m_off

void setneonprint_M_ON(int,int,int,int,int){

lcd.setCursor(0, 0);lcd.print("Inzio Fotoperio ") ;
lcd.setCursor(1, 1);lcd.print(h_on) ;
lcd.setCursor(2, 1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(4, 1);lcd.print(m_on);}
if((s%2)!=0){ lcd.setCursor(4, 1);lcd.print(" ");}

lcd.setCursor(0, 2);lcd.print("Fine Fotoperiodo ") ;
lcd.setCursor(0, 3);lcd.print(h_off) ;
lcd.setCursor(2, 3); lcd.print(":");
lcd.setCursor(3, 3);lcd.print(m_off);
}

void setneonprint_H_ON(int,int,int,int,int){

lcd.setCursor(0, 0);lcd.print("Inzio Fotoperiodo ") ;
if((s%2)==0){ lcd.setCursor(10, 0);lcd.print(h_on);}
if((s%2)!=0){ lcd.setCursor(10, 0);lcd.print(" ");}
lcd.setCursor(12, 0); lcd.print(":");
lcd.setCursor(13, 0);lcd.print(m_on);
lcd.setCursor(15, 0);lcd.print("<");
lcd.setCursor(0, 1);lcd.print("Fine ") ;
lcd.setCursor(10, 1);lcd.print(h_off) ;
lcd.setCursor(12, 1); lcd.print(":");
lcd.setCursor(13, 1);lcd.print(m_off);
}


void setneonprint_M_OFF(int,int,int,int,int){

lcd.setCursor(0, 0);lcd.print("Inzio Fotoperido ") ;
lcd.setCursor(10, 0);lcd.print(h_on) ;
lcd.setCursor(12, 0); lcd.print(":");
lcd.setCursor(13, 0);lcd.print(m_on);
lcd.setCursor(15, 1);lcd.print("<");
lcd.setCursor(0, 1);lcd.print("Fine ") ;
lcd.setCursor(10, 1);lcd.print(h_off) ;
lcd.setCursor(12, 1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(13, 1);lcd.print(m_off);}
if((s%2)!=0){ lcd.setCursor(13, 1);lcd.print(" ");}


}

void setneonprint_H_OFF(int,int,int,int,int){

lcd.setCursor(0, 0);lcd.print("Inzio Fotoperio ") ;
lcd.setCursor(10, 0);lcd.print(h_on) ;
lcd.setCursor(12, 0); lcd.print(":");
lcd.setCursor(13, 0);lcd.print(m_on);
lcd.setCursor(15, 1);lcd.print("<");
lcd.setCursor(0, 1);lcd.print("Fine ") ;
if((s%2)==0){ lcd.setCursor(10, 1);lcd.print(h_off);}
if((s%2)!=0){ lcd.setCursor(10, 1);lcd.print(" ");}
lcd.setCursor(12, 1); lcd.print(":");
lcd.setCursor(13, 1);lcd.print(m_off);


}


// STAMPA SET M ORARIO variabili: ore, minuti, secondi
void setprintime_M(int, int, int){
lcd.setCursor(13, 0);lcd.print("SetTime") ;
if(day==0){lcd.setCursor(0, 1);lcd.print("Lun");}
if(day==1){lcd.setCursor(0, 1);lcd.print("Mar");}
if(day==2){lcd.setCursor(0, 1);lcd.print("Mer");}
if(day==3){lcd.setCursor(0, 1);lcd.print("Gio");}
if(day==4){lcd.setCursor(0, 1);lcd.print("Ven");}
if(day==5){lcd.setCursor(0, 1);lcd.print("Sab");}
if(day==6){lcd.setCursor(0, 1);lcd.print("Dom");}
lcd.setCursor(4, 1); lcd.print(h);
lcd.setCursor(6, 1);lcd.print(":");
if((s%2)==0){ lcd.setCursor(7, 1);lcd.print(m);}
if((s%2)!=0){ lcd.setCursor(7, 1);lcd.print(" ");}

lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("OK");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("- +");
}


// STAMPA SET H ORARIO variabili: ore, minuti, secondi
void setprintime_H(int, int, int){
lcd.setCursor(13, 0);lcd.print("SetTime") ;
if(day==0){lcd.setCursor(0, 1);lcd.print("Lun");}
if(day==1){lcd.setCursor(0, 1);lcd.print("Mar");}
if(day==2){lcd.setCursor(0, 1);lcd.print("Mer");}
if(day==3){lcd.setCursor(0, 1);lcd.print("Gio");}
if(day==4){lcd.setCursor(0, 1);lcd.print("Ven");}
if(day==5){lcd.setCursor(0, 1);lcd.print("Sab");}
if(day==6){lcd.setCursor(0, 1);lcd.print("Dom");}
lcd.setCursor(7, 1); lcd.print(m);
lcd.setCursor(6, 1);lcd.print(":");
if((s%2)==0){ lcd.setCursor(4, 1);lcd.print(h);}
if((s%2)!=0){ lcd.setCursor(4, 1);lcd.print(" ");}

lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("OK");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("- +");
}



// STAMPA SET DOSO START STOP H s, h_start, m_start

void setprintdoso_stop_H(int, int, int){

lcd.setCursor(0, 0);lcd.print("Set time stop ");
if((s%2)==0){ lcd.setCursor(0, 1);lcd.print(h_stop);}
if((s%2)!=0){ lcd.setCursor(0, 1);lcd.print(" ");}
lcd.setCursor(2,1); lcd.print(":");
lcd.setCursor(3,1);lcd.print(m_stop);

}

// STAMPA SET DOSO START M h_start, s, m_start,



void setprintdoso_stop_M(int, int, int){

lcd.setCursor(0, 0);lcd.print("Set time stop ");
lcd.setCursor(0,1);lcd.print(h_stop);
lcd.setCursor(2,1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(3, 1);lcd.print(m_stop);}
if((s%2)!=0){ lcd.setCursor(3, 1);lcd.print(" ");}
}


// SET DOSO PERIODO H s, h_period, m_period


void setprintdoso_period_H(int, int, int){

lcd.setCursor(0, 0);lcd.print("Set period ");
if((s%2)==0){ lcd.setCursor(0, 1);lcd.print(h_period);}
if((s%2)!=0){ lcd.setCursor(0, 1);lcd.print(" ");}
lcd.setCursor(2,1); lcd.print(":");
lcd.setCursor(3,1);lcd.print(m_period);

}


// SET DOSO PERIODO M h_period, s, m_period


void setprintdoso_period_M(int, int, int){

lcd.setCursor(0, 0);lcd.print("Set period");
lcd.setCursor(0,1);lcd.print(h_period);
lcd.setCursor(2,1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(3, 1);lcd.print(m_period);}
if((s%2)!=0){ lcd.setCursor(3, 1);lcd.print(" ");}

}



// SET DOSO ML

void setprintdoso_ML(int, float){

lcd.setCursor(0, 0);lcd.print("Set ml per day ");
if((s%2)==0){ lcd.setCursor(0, 1);lcd.print(ml);}
if((s%2)!=0){ lcd.setCursor(0, 1);lcd.print(" ");}
}








// OROLOGIO vaiabili: millis, ktime, secondi, muniti, ore

void clock(int, int, int, int){
long ctime=millis()/1000;

if (ctime-(ktime*1)==0){ s++; ktime++;}
if(s==60){ lcd.begin(20, 4); m++; s=00;}
if(m==60){ lcd.begin(20, 4); h++; m=0;}
if(m==-1){ lcd.begin(20, 4); m=59;}
if(h==24){lcd.begin(20, 4); day=day+1; h=0;}
if(day==7){day=0; }
if(h==-1){lcd.begin(20, 4); h=23;}

}

//SET VARIABILI TEMPO

void h24(int, int){
if (m_on==-1)
{m_on=59;}
if (h_on==-1)
{h_on=23;}

}





//ELIMINA IN RIMBALZO DEI TASTI
void bounc(){
for (int bounc=0; bounc==0; bounc++){ delay(150);};
}




//NEON

void neon(){
if(h_on==h && m_on==m ){analogWrite(A5, 128);}

if(h_off==h && m_off==m ){analogWrite(A5, 0);}
}

//DOSO

void doso(){
if(m==m_stop && h==h_stop){
analogWrite(A4, 0);}
if(h==h_stop && m==(m_stop+1)){

if(s==0){
analogWrite(A3,128);
if (s==tempo_doso){
analogWrite(A3,0);
}
}
}


if(m==(m_stop+m_period) && h==(h_stop+h_period)){
analogWrite(A4,128);
}
}



void setup() {

// controller
pinMode(52, INPUT); // +
pinMode(53, INPUT); // -
pinMode(51, INPUT); // destra
pinMode(50, INPUT); // sinistra
lcd.begin(20,4);


//relč




}




void loop() {







lcd.setCursor(0, 0);
printime(h, m, s);
clock(ktime, s, m, h);

pindx=digitalRead(enter);
if(pindx==HIGH){cas1=1; bounc(); lcd.begin(20,4);}


neon();
doso();



/*SET TIME*/ while (cas1==1){

lcd.setCursor(4, 0);
lcd.print("Set time(1/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
clock(ktime, s, m, h);
neon();


menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,c as2);

while(cas2==1){

clock(ktime, s, m, h);
neon();
setprintime_M(h, m, s);

allread(pinp,pinm,pindx,pinenter,pinsx);
if(pinsx==HIGH){bounc();cas2=cas2-1; lcd.begin(20,4);}
if(pinenter==HIGH){bounc();cas2=0; lcd.begin(20,4);}
if (pindx==HIGH){bounc();cas2=cas2+1; lcd.begin(20,4);}
if(pinp==HIGH){bounc();m=m+1; lcd.begin(20,4);}
if (pinm==HIGH){bounc();m=m-1; lcd.begin(20,4);}







while(cas2==2){
clock(ktime, s, m, h);
neon();

setprintime_H(h, m, s);
allread(pinp,pinm,pindx,pinenter,pinsx);
if(pinsx==HIGH){bounc();cas2=cas2-1; lcd.begin(20,4);}
if (pindx==HIGH){bounc();cas2=cas2+1; lcd.begin(20,4);}

if (pinsx==HIGH){cas2=cas2-1; lcd.begin(20,4);}
if(pinp==HIGH){h=h+1;bounc();}
if(pinm==HIGH){h=h-1;bounc();}
if (pindx==HIGH){bounc();cas2=cas2+1; lcd.begin(20,4);}
if(h-h_on>=0 && h-h_off<=0){

neon_cond++;
}
}
}

}



/*SET NEON*/ while (cas1==2){

clock(ktime, s, m, h);
neon();

lcd.setCursor(4, 0);
lcd.print("Set neon(2/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,c as2);

/*m on */ while(cas2==1){
clock(ktime,s,m,h);
neon();

setneonprint_M_ON(h_on,s,m_on,h_off,m_off);

if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
if(pinp==HIGH){m_on=m_on+1;bounc();}
if(pinm==HIGH){m_on=m_on-1;bounc();}
if (m_on==-1){m_on=59;}
if (m_on==60){m_on=0;}

if (pindx==HIGH){bounc();cas2=2; lcd.begin(20,4);}

/*h on*/ while(cas2==2){
clock(ktime, s, m, h);
neon();

setneonprint_H_ON(s,h_on,m_on,h_off,m_off);

if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
if(pinp==HIGH){h_on=h_on+1;bounc();}
if(pinm==HIGH){h_on=h_on-1;bounc();}
if (h_on==-1){h_on=23;}
if (h_on==24){h_on=00;}
if (pindx==HIGH){bounc();cas1=3; lcd.begin(20,4);}

/*m off*/ while(cas2==3){
clock(ktime,s,m,h);
neon();

setneonprint_M_OFF(h_on,m_on,h_off,s,m_off);

if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){m_off=m_off+1;bounc();}
if(pinm==HIGH){m_off=m_off-1;bounc();}
if (m_off==-1){m_off=59;}
if (m_off==60){m_off=0;}
if (pindx==HIGH){bounc();cas2=4; lcd.begin(20,4);}

/*h off*/ while(cas2==4){
clock(ktime,s,m,h);
neon();

setneonprint_H_OFF(h_on,m_on,s,h_off,m_off);

if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
if(pinp==HIGH){h_off=h_off+1;bounc();}
if(pinm==HIGH){h_off=h_off-1;bounc();}
if (h_off==-1){h_off=23;}
if (h_off==24){h_off=00;}
if (pindx==HIGH){bounc();cas2=1; lcd.begin(16,2);}
}
}
}
}
}





/*SET DOSO*/ while (cas1==3){
clock(ktime, s, m, h);
neon();

lcd.setCursor(4, 0);
lcd.print("Set doso(3/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,c as2);

/*m stop */ while(cas1==1){
clock(ktime,s,m,h);
neon();

setprintdoso_stop_M(h_stop, s, m_stop);

if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
if(pinp==HIGH){m_stop=m_stop+1;bounc();}
if(pinm==HIGH){m_stop=m_stop-1;bounc();}
if (m_on==-2){m_stop=59;}
if (pindx==HIGH){bounc();cas1=2; lcd.begin(20,4);}


/*h sto*/ while(cas2==2){
clock(ktime, s, m, h);
neon();

setprintdoso_stop_H(s,h_stop, m_stop);

if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
if(pinp==HIGH){h_stop=h_stop+1;bounc();}
if(pinm==HIGH){h_stop=h_stop-1;bounc();}
if (h_stop==-1){h_stop=23;}
if (pindx==HIGH){bounc();cas2=3; lcd.begin(20,4);}
/*period m*/

while(cas2==3){
clock(ktime,s,m,h);
neon();

setprintdoso_period_M(h_period,s,m_period);

if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
if(pinp==HIGH){m_period=m_period+1;bounc();}
if(pinm==HIGH){m_period=m_period-1;bounc();}
if (m_period==-1){m_period=59;}
if (pindx==HIGH){bounc();cas2=4; lcd.begin(20,4);}
/*period h*/

while(cas2==4){
clock(ktime,s,m,h);
neon();

setprintdoso_period_H(s, h_period, m_period);

if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
if(pinp==HIGH){h_period=h_period+1;bounc();}
if(pinm==HIGH){h_period=h_period-1;bounc();}
if (h_period==-1){h_period=23;}
if (pindx==HIGH){bounc();cas1=5; lcd.begin(20,4);}


while(cas2==5){
clock(ktime,s,m,h);
neon();

setprintdoso_ML(s, ml);

if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
if(pinp==HIGH){ml=ml+0.25;bounc();}
if(pinm==HIGH){ml=ml-0.25;bounc();}
/* REGOLA ML MAX */ if (ml==-2){ml=10;}
if (pindx==HIGH){bounc();cas2=1; lcd.begin(20,4);
tempo_doso=(ml*10); //calcolare tempi dosometrica
}
}


}
}


}
}




/*SET TEMPERATURA*/ while (cas1==4){
clock(ktime, s, m, h);
neon();

lcd.setCursor(4, 0);
lcd.print("Set temp(4/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,c as2);
}


}
}

SirNino
24-12-2015, 20:50
Gran lavoro!
L'unico appunto fattibile (ma č solo ed esclusivamente gusto personale).
A me non piace leggere l'ora

3: 5 :6

preferisco

03:05:06

quindi aggiungerei in fase di stampa orario

if (m < 10){
Serial.print('0');
Serial.print(m);}

e lo stesso ovviamente con ore e secondi. Ho usato serial perché non ricordo le posizioni sul tua lcd [emoji27]

Ma ripeto č solo gusto personale e ribadisco i miei complimenti :42:

dr.jekyll
25-12-2015, 00:07
Ciao Nino, mi fa veramente molto piacere che tu abbia apprezzato il mio codice :-)

Sė hai ragione esce una cosa pių sistemata aggiungendo quell'if. Appena ho tempo modifico il codice

Inviato dal mio GT-I9505 utilizzando Tapatalk