ok. è un' pò lungo ma lo posto tutto!
#include <LCD.h>
#include <LiquidCrystal.h>
#include <buttons.h>
#include <MENWIZ.h>
#include <EEPROM.h>
#define UP_BOTTON_PIN 26 //definizione pin
#define DOWN_BOTTON_PIN 28
#define LEFT_BOTTON_PIN 30
#define RIGHT_BOTTON_PIN 32
#define CONFIRM_BOTTON_PIN 34
#define ESCAPE_BOTTON_PIN 36
#define led1 53
#define led2 51
#define led3 49
#define led4 47
#define sensdx 14
#define senssx 15
#define conv 180
#define conv1 1
#define su A8
#define giu A9
#define destra A10
#define sinistra A11
#define avanti A12
#define indietro A13
#define rele7 A14
#define rele8 A15
menwiz tree;
LiquidCrystal lcd(12, 11, 6, 5, 4, 3); //creato oggetto lcd
boolean attiva = true;
boolean attiva1= true;
int statodx;
int statosx;
int x = 0;
int i = 0;
int w = 0;
int altezza = 80;
int larghezza = 300;
int npassate = 5;
int ppassate = 5;
int count = 0;
int senstras;
float tempo = conv * altezza;
float dist = conv1 * count;
float numpas = altezza / ppassate;
int valore = 0;
boolean led=true;
void setup(){
pinMode(destra, OUTPUT);
pinMode(sinistra, OUTPUT);
pinMode(su, OUTPUT);
pinMode(giu, OUTPUT);
pinMode(avanti, OUTPUT);
pinMode(indietro, OUTPUT);
pinMode(rele7, OUTPUT);
pinMode(rele8, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(senssx, INPUT);
pinMode(sensdx, INPUT);
digitalWrite (destra,HIGH);
digitalWrite (sinistra,HIGH);
digitalWrite (su,HIGH);
digitalWrite (giu,HIGH);
digitalWrite (avanti,HIGH);
digitalWrite (indietro,HIGH);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
attachInterrupt(0,proximity,RISING);
_menu *r,*s1,*s2;
Serial.begin(9600);
tree.begin(&lcd,16,2); //declare lcd object and screen size to menwiz lib
r=tree.addMenu(MW_ROOT,NULL,F(" TERZAGO GLS37"));
s1=tree.addMenu(MW_VAR,r, F("LARGHEZZA"));
s1->addVar(MW_AUTO_INT,&larghezza,0,1000,5 );
s1=tree.addMenu(MW_VAR,r, F("ALTEZZA"));
s1->addVar(MW_AUTO_INT,&altezza,0,400,5 );
s1=tree.addMenu(MW_VAR,r, F("NUMERO PASSATE"));
s1->addVar(MW_AUTO_INT,&npassate,0,1000,1 );
s1=tree.addMenu(MW_VAR,r, F("PROF. PASSATA"));
s1->addVar(MW_AUTO_INT,&ppassate,0,400,1 );
s1=tree.addMenu(MW_VAR,r, F("CONTROLLO DATI"));
s1->addVar(MW_ACTION,controllo);
s1->setBehaviour(MW_ACTION_CONFIRM,false);
s1=tree.addMenu(MW_VAR,r, F("INIZIO CICLO"));
s1->addVar(MW_ACTION,ciclo);
s1->setBehaviour(MW_ACTION_CONFIRM,true);
tree.navButtons(UP_BOTTON_PIN,DOWN_BOTTON_PIN,LEFT_BOTTON_PIN,RIGHT_BOTTON_PIN,ESCAPE_BOTTON_PIN,CONFIRM_BOTTON_PIN);
tree.addSplash("TERZAGO GLS37",5000);
}
void loop(){
tree.draw();
if (senstras==HIGH)
{
count++;
senstras=LOW;
}
if(led == true){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW );
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH );
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW );
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW );
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW );
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH );
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW );
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW );
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW );
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW );
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
led =false;
}
}
void controllo(){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH );
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
lcd.clear();
lcd.print("LARGHEZZA:");
lcd.setCursor(0,1);
lcd.print(larghezza);
lcd.print("mm");
delay(3000);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW );
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
lcd.clear();
lcd.print("ALTEZZA:");
lcd.setCursor(0,1);
lcd.print(altezza);
lcd.print("mm");
delay(3000);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH );
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
lcd.clear();
lcd.print("N PASSATE:");
lcd.setCursor(0,1);
lcd.print(npassate);
delay(3000);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW );
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
lcd.clear();
lcd.print("PROF PASSATA:");
lcd.setCursor(0,1);
lcd.print(ppassate);
lcd.print("mm");
delay(3000);
}
void proximity()
{
senstras=HIGH;
}
void ciclo() {
lcd.clear();
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH );
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
while (i <= npassate)
{
Serial.println ("passate:");
Serial.print(i);
lavorazioni();
i++;
}
}
void lavorazioni(){
valore = floor(numpas);
while (x <= valore)
{
movimento();
Serial.print("valore x:");
Serial.print(x);
}
digitalWrite(destra,HIGH);
digitalWrite(sinistra,HIGH);
delay(200);
while (w <= 15){
Serial.print("w:");
Serial.print(w);
traslazione();
}
}
void movimento(){
statodx = digitalRead(sensdx);
statosx = digitalRead(senssx);
if(statosx == HIGH && attiva == true){
attiva = false;
attiva1 = true;
Serial.println("destra");
vaidestra() ;
x++;
}
if (statodx == HIGH && attiva1 == true){
attiva1 = false;
attiva = true;
Serial.println("sinistra");
vaisinistra();
x++;
}
}
void vaidestra(){
Serial.print("lavorazione a destra");
digitalWrite (destra,HIGH);
digitalWrite (sinistra,HIGH);
float passata = conv * ppassate;
float tempo = conv1*altezza;
float dist = count*conv;
digitalWrite (su,LOW);
digitalWrite (giu,HIGH);
delay(passata);
digitalWrite(su,HIGH);
delay(200);
digitalWrite (destra,LOW);
digitalWrite (sinistra,HIGH);
}
void vaisinistra(){
Serial.print ("lavorazione a sinistra");
float passata = conv * ppassate;
digitalWrite (destra,HIGH);
digitalWrite (sinistra,HIGH);
float tempo = conv1*altezza;
float dist = count*conv;
digitalWrite (su,LOW);
digitalWrite (giu,HIGH);
delay(passata);
digitalWrite(su,HIGH);
delay(200);
digitalWrite (destra,LOW);
digitalWrite (sinistra,HIGH);
}
void traslazione(){
Serial.println("traslazione");
digitalWrite(avanti,LOW);
digitalWrite(indietro,HIGH);
w++;
}
l' ho azzerato all' inizio