Programma per ascensore

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
}
}

Buongiorno e benvenuto :slight_smile: ,

essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO

... poi, in conformità al suddetto regolamento, punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.

Inolte, così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE). Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:
P.P.S.: Ho separato io questo tuo post dal thread dove lo avevi attaccato dato che NON era pertinete ed indicato a cosa ti riferivi.