Ciao @brunello22 ho visto che avevi fatto questo potresti spiegarmelo per favore
#include <Stepper.h>
//VARIABILI//
byte aa ;
byte Piano = 0; //Piano attuale
byte Piano_chiamato = 0; // Piano chiamato
//TASTI//
const byte TPT = 2; // Tasto piano terra
const byte TP1 = 3; // Tasto piano 1
const byte TP2 = 4; // Tasto piano 2
// FINECORSA//
#define Finec_PT 5 // Finecorsa piano terra
#define Finec_P1 11 // Finecorsa piano 1
#define Finec_P2 6 // Finecorsa piano 2
// MOTORE
#define stp_rev 32
#define IN1 7
#define IN2 8
#define IN3 9
#define IN4 10
Stepper myStepper(stp_rev, IN1, IN3, IN2, IN4); // Pin su cui è collegato il motore
void setup() {
Serial.begin(9600);
pinMode(TPT, INPUT);
pinMode(TP1, INPUT);
pinMode(TP2, INPUT);
pinMode(Finec_PT, INPUT);
pinMode(Finec_P1, INPUT);
pinMode(Finec_P2, INPUT);
myStepper.setSpeed(500); // Velocita motore. Forse arriva fino a 1000
// le prossime due righe servono per il posizionamento iniziale
controllo_piano();
Piano_chiamato = Piano ;
}
void loop( )
{
controllo_piano();
pulsanti(); // controlal chi ha chiamato
switch (Piano_chiamato) {
case 0 : // chiamata dal primo piano
aa = Finec_PT ;
break;
case 1: // chiamata dal secondo piano
aa = Finec_P1 ;
break;
case 2: // chiamata dal secondo piano
aa = Finec_P2 ;
break;
}
if (Piano_chiamato > Piano) // La cabina è sotto la destinazione
{
while ( digitalRead(aa) != HIGH ) {
myStepper.step(1); // motore gira in senso orario
}
}
else if (Piano_chiamato < Piano) // La cabina è sopra la destinazione
{
while ( digitalRead(aa) != HIGH ) {
myStepper.step(-1); // motore gira in senso Anti-orario
}
}
}
void pulsanti() {
if (digitalRead(TPT) == HIGH) // Controlla se il piano da cui è stato chiamato l'ascensore è il Piano 0
{
Piano_chiamato = 0; // Si è stato chiamato dal Piano 0
}
else if (digitalRead(TP1) == HIGH) // Controlla se il piano da cui è stato chiamato l'ascensore è il Piano 1
{
Piano_chiamato = 1; // Si è stato chiamato dal Piano 1
}
else if (digitalRead(TP2) == HIGH) // Controlla se il piano da cui è stato chiamato l'ascensore è il Piano 2
{
Piano_chiamato = 2; // Si è stato chiamato dal Piano 2
}
}
void controllo_piano() {
//CONTROLLO PIANO ATTUALE//
if (digitalRead(Finec_PT) == HIGH) // Controllo del finecorsa del Piano 0
{
Piano = 0 ; // Si è il piano terra
}
else if (digitalRead(Finec_P1) == HIGH) // Controllo del finecorsa del Piano 1
{
Piano = 1 ; // Si è il primo piano
}
else if (digitalRead(Finec_P2) == HIGH) // Controllo del finecorsa del Piano 2
{
Piano = 2 ; // Si è il secondo piano
}
}