Questo è quasi tutto il programma, non ho messo la parte finale che è semplicemente una ripetizione di "i==" che cambia da 1 a 29. Ogni valore di i compreso in quella soglia di valori accenderà un singolo led specifico, questo mi serve per il circuito che ho montato. Riguardo invece i valori che assumono i bottoni, sto usando un display lcd keypad shield che sfrutta un circuito partitivo resistivo per assegnare ad ogni bottone un range di valori.
#include <Wire.h>
int pin1=22;
int pin2=23;
int pin3=24;
int pin4=25;
int pin5=26;
int pin6=27;
int pin7=28;
int pin8=29;
int pin9=30;
int pin11=31;
int pin12=32;
int pin13=33;
int pin14=34;
int pin15=35;
int pin16=36;
int pin17=37;
int pin18=38;
int pin19=39;
int pin21=40;
int pin22=41;
int pin23=42;
int pin24=43;
int pin25=44;
int pin26=45;
int pin27=46;
int pin28=47;
int pin29=48;
int i;
#include<LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(29, OUTPUT);
pinMode(30, OUTPUT);
pinMode(31, OUTPUT);
pinMode(32, OUTPUT);
pinMode(33, OUTPUT);
pinMode(34, OUTPUT);
pinMode(35, OUTPUT);
pinMode(36, OUTPUT);
pinMode(37, OUTPUT);
pinMode(38, OUTPUT);
pinMode(39, OUTPUT);
pinMode(40, OUTPUT);
pinMode(41, OUTPUT);
pinMode(42, OUTPUT);
pinMode(43, OUTPUT);
pinMode(44, OUTPUT);
pinMode(45, OUTPUT);
pinMode(46, OUTPUT);
pinMode(47, OUTPUT);
pinMode(48, OUTPUT);
for (int a = 0; a < 5; a++) {
lcd.print(".");
delay(500);
}
i=1;
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Comando carico");
lcd.setCursor(0, 1);
lcd.print("Posto");
lcd.setCursor(6, 1);
lcd.print(i);
int val = analogRead(A0);
if(val>=500 && val<=750){
if(i!=1 && i!=11 && i!=21){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Rilascio carico");
lcd.setCursor(0, 1);
for (int a = 0; a < 5; a++) {
lcd.print(".");
delay(500);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Rilascio carico");
lcd.setCursor(0, 1);
for (int a = 0; a < 5; a++) {
lcd.print(".");
delay(500);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Carico lasciato");
delay(500);
}
}
if(val>=500 && val<=750 && (i==1 || i==11 || i==21)){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Uso ascensore?");
lcd.setCursor(0, 1);
lcd.print("si o no");
delay(200);
if(val>=0 && val<=50){
i=i;
}
if(val>=300 && val<=150){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("salgo o scendo?");
delay(200);
while(val>=0 && val<=50 || val>=300 && val<=500){
if(val>=0 && val<=50){
i=i+10;
}
if(val>=300 && val<=500){
i=i-10;
}
}
}
}
if(val>=150 && val<=300){
if(i!=1 && i!=4 && i!=7 && i!=11 && i!=14 && i!=17 && i!=21 && i!=24 && i!=27){
i=i-1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sposto carico");
lcd.setCursor(0, 1);
for (int a = 0; a < 5; a++) {
lcd.print(".");
delay(200);}
}
}
if(val>=50 && val<=150){
if(i!=3 && i!=6 && i!=9 && i!=13 && i!=16 && i!=19 && i!=23 && i!=26 && i!=29){
i=i+1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sposto carico");
lcd.setCursor(0, 1);
for (int a = 0; a < 5; a++) {
lcd.print(".");
delay(200);}
}
}
if(val>=0 && val<=50){
if(i!=7 && i!=8 && i!=9 && i!=17 && i!=18 && i!=19 && i!=27 && i!=28 && i!=29){
i=i+3;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sposto carico");
lcd.setCursor(0, 1);
for (int a = 0; a < 5; a++) {
lcd.print(".");
delay(200);}
}
}
if(val>=300 && val<=500){
if(i!=1 && i!=2 && i!=3 && i!=11 && i!=12 && i!=13 && i!=21 && i!=22 && i!=23){
i=i-3;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sposto carico");
lcd.setCursor(0, 1);
for (int a = 0; a < 5; a++) {
lcd.print(".");
delay(200);}
}
}
if(i==1){
digitalWrite(22, HIGH);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
digitalWrite(30, LOW);
digitalWrite(31, LOW);
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
digitalWrite(36, LOW);
digitalWrite(37, LOW);
digitalWrite(38, LOW);
digitalWrite(39, LOW);
digitalWrite(40, LOW);
digitalWrite(41, LOW);
digitalWrite(42, LOW);
digitalWrite(43, LOW);
digitalWrite(44, LOW);
digitalWrite(45, LOW);
digitalWrite(46, LOW);
digitalWrite(47, LOW);
digitalWrite(48, LOW);
}