#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
//motore cabina
int avm = 13; // Motore marcia avanti
int inm = 12; // Motore marcia indietro
//motore porta cabina
int po = 11; // Apertura porte
int pc = 10; // Chiusura porte
//finecorsa
int fp4 = 9; // Finecorsa piano 4
int fp3 = 8; // Finecorsa piano 3
int fp2 = 7; // Finecorsa piano 2
int fp1 = 6; // Finecorsa piano 1
//tasti piano
int tp4 = 5; //Tasto piano 4
int tp3 = 4; //Tasto piano 3
int tp2 = 3; //Tasto piano 2
int tp1 = 2; //Tasto piano 1
//dichiaro variabili
int P = 0;
int PT = 0;
int c = 0;
int d = 1;
int e = 0;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 = 0;
int val7 = 0;
int val8 = 0;
String readString; //string
boolean LEDON = false; //LED status flag
void setup()
{
//configuarazione pin
pinMode(avm, OUTPUT);
pinMode(inm, OUTPUT);
pinMode(po, OUTPUT);
pinMode(pc, OUTPUT);
pinMode(fp4, INPUT);
pinMode(fp3, INPUT);
pinMode(fp2, INPUT);
pinMode(fp1, INPUT);
pinMode(tp4, INPUT);
pinMode(tp3, INPUT);
pinMode(tp2, INPUT);
pinMode(tp1, INPUT);
Serial.begin(9600);
}
void loop( )
{
//inizio programma
finecorsa:
val1 = digitalRead(fp1);
val2 = digitalRead(fp2);
val3 = digitalRead(fp3);
val4 = digitalRead(fp4);
if (val1 == HIGH) { //controllo finecorsa piano 1
PT = 1 ;
goto pulsante; //si PIANO=1
}else if (val2 == HIGH) { //controllo finecorsa PIANO=2
PT = 2 ;
goto pulsante;
}else if (val3 == HIGH) {
PT = 3 ;
goto pulsante;
}else if (val4 == HIGH) {
PT = 4 ;
goto pulsante;
}else
goto finecorsa;
//fine controllo piani
pulsante:
if (c == 0 && PT>0){
P = PT;
c = 1;
}else
val5 = digitalRead(tp1);
val6 = digitalRead(tp2);
val7 = digitalRead(tp3);
val8 = digitalRead(tp4);
if (val5 == HIGH) { //controllo tasto piano 1
P = 1 ;
e = 1;
goto motore; //si PIANO=1
}else if (val6 == HIGH) { //no controllo tasto PIANO=2
P = 2 ;
e = 1;
goto motore;
}else if (val7 == HIGH) {
P = 3 ;
e = 1;
goto motore;
}else if (val8 == HIGH) {
P = 4 ;
e = 1;
goto motore;
//fine controllo tasti piani
}
motore: //avvio motore
if (P < PT) { //ascensore sotto alla destinazione
digitalWrite(avm, LOW);
digitalWrite(inm, HIGH);
d = 1; //cabina sale
goto porte;
}else if (P > PT) { //ascensore sopra alla destinzione
digitalWrite(inm, LOW);
digitalWrite(avm, HIGH); //cabina scende
d = 1;
goto porte;
}else if (P == PT) { //ascensore a destination
digitalWrite(avm, LOW); //motore spento
digitalWrite(inm, LOW);
d = d+1;
goto porte;
} //fine avvio motore
porte: //apertura porte
if (d == 2 && e == 1) {
digitalWrite(po, HIGH);
delay(500);
digitalWrite(po, LOW);
delay(3000);
digitalWrite(pc, HIGH);
delay(500);
digitalWrite(pc, LOW);
delay(500);
e=0;
}else goto finecorsa;
}