AcquaPortal Forum Acquario Dolce e Acquario Marino

AcquaPortal Forum Acquario Dolce e Acquario Marino (http://www.acquariofilia.biz/forum.php)
-   Tecnica marino (http://www.acquariofilia.biz/forumdisplay.php?f=57)
-   -   Programmazione ARDUINO per acquario (http://www.acquariofilia.biz/showthread.php?t=500201)

marco3020 15-11-2015 14:55

Programmazione ARDUINO per acquario
 
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

Quote:

Originariamente inviata da marco3020 (Messaggio 1062697485)
...
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 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

codice:

void setup(){
...

unsigned long inizio_sospensione;
unsigned long quanto_tempo_deve_restare_spenta_la_pompa = 600000;
}


Alla relativa voce del menų inserisci

codice:

inizio_sospensione = millis();
nel loop inserisci

codice:

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:

codice:

//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,CONFIRM_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:

codice:

/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,CONFIRM_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

Quote:

Originariamente inviata da SJoplin (Messaggio 1062698228)
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:

Clicca per vedere il video su YouTube Video



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



codice:

// 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,boolean,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,cas2);
                                         
                                          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,cas2);
 
  /*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,cas2);
 
  /*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,cas2);
                                                }


                              }
 }


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

codice:

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


Tutti gli orari sono GMT +2. Attualmente sono le 01:44.

Powered by vBulletin versione 3.8.9
Copyright ©: 2000 - 2024, Jelsoft Enterprises Ltd.
Traduzione italiana Team: AcquaPortal
User Alert System provided by Advanced User Tagging v3.2.5 Patch Level 2 (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Copyright Zero Pixel Srl

Page generated in 0,13472 seconds with 13 queries