Go Down

Topic: Ascensore comandato via bluetooth (Read 57 times) previous topic - next topic

Roger23

Salve, per la maturità devo portare un modello di un ascensore comandato da arduino a cui devo implementare dei comandi via bluetooth. L'ascensore si muove su 3 piani, con 3 finecorsa che decretano la posizione in cui si trova e la fermata di esso al piano prestabilito. Sono presenti 3 pulsanti fisici per ogni piano per la chiamata e 3 pulsanti virtuali sul tablet che comunicheranno tramite bluetooth sempre per la chiamata dell'ascensore. Il programma che ho creato è funzionante se azionato dai pulsanti fisici, però sono bloccato nell'inserire le varie stringhe di codice per il comando bluetooth. Vi allego il codice e se per favore potete aiutarmi a capire cosa inserire e dove. (il codice ve lo inserisco con solo le stringhe iniziali e del setup del bluetoot). Grazie in anticipo.
Code: [Select]
#include <SoftwareSerial.h>
#define bluetooth Serial
SoftwareSerial mySerial(0, 1); // imposto i pin per la comunicazione seriale
// Collegare i pin nel seguente modo: RX=>1 TX=>0
float tempC;


//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  6    // Finecorsa piano 1
#define Finec_P2  7    // Finecorsa piano 2

// MOTORE
const int controlPin1 = 11;                    //costanti di riferimento 
const int controlPin2 = 12;                    //ai pin 
const int accendiMotore = 13; 


void setup() {
  Serial.begin(9600);
  pinMode(TPT, INPUT_PULLUP);
  pinMode(TP1, INPUT_PULLUP);
  pinMode(TP2, INPUT_PULLUP);
  pinMode(Finec_PT, INPUT_PULLUP);
  pinMode(Finec_P1, INPUT_PULLUP);
  pinMode(Finec_P2, INPUT_PULLUP);
  digitalWrite(accendiMotore, LOW);           //inizialmente il motore sarà spento 
  // le prossime due righe servono per il posizionamento iniziale
  controllo_piano();
  Piano_chiamato = Piano ;
  bluetooth.begin(9600);
   mySerial.begin(9600); // setto la comunicazione
   delay(1000);
 
}


void loop( )
{
  controllo_piano();
  pulsanti(); // controlal chi ha chiamato

  switch (Piano_chiamato) {
    case 0 :    // chiamata dal primo piano
      aa = digitalRead(Finec_PT) ;
      break;
    case 1:    // chiamata dal secondo piano
      aa = digitalRead(Finec_P1) ;
      break;
    case 2:   // chiamata dal secondo piano
      aa = digitalRead(Finec_P2) ;
      break;
  }

  if (Piano_chiamato > Piano) // La cabina è sotto la destinazione
  {
    while (Piano_chiamato != Piano ) {

      digitalWrite(controlPin1, HIGH); 
      digitalWrite(controlPin2, LOW); 
      analogWrite(accendiMotore, 255);
      // motore gira in senso orario
      controllo_piano();
     
    }
    analogWrite(accendiMotore, 20);
  }
 
  else if (Piano_chiamato < Piano) // La cabina è sopra la destinazione
  {
    while (Piano_chiamato != Piano  ) {

      digitalWrite(controlPin1, LOW); 
      digitalWrite(controlPin2, HIGH); 
      analogWrite(accendiMotore, 100);
      // motore gira in senso Anti-orario
        controllo_piano();

    }
    analogWrite(accendiMotore, 20);
  }
}

void pulsanti() {
  if (digitalRead(TPT) == LOW) // 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) == LOW) // 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) == LOW) // 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) == LOW) // Controllo del finecorsa del Piano 0
  {
    Piano = 0 ; // Si è il piano terra
  }
  else if (digitalRead(Finec_P1) == LOW) // Controllo del finecorsa del Piano 1
  {
    Piano = 1 ; // Si è il primo piano
  }
  else if (digitalRead(Finec_P2) == LOW) // Controllo del finecorsa del Piano 2
  {
    Piano = 2 ; // Si è il secondo piano
  }
}
h)

gpb01

Il cross-posting è proibito dal regolamento e tu stai discutendo di questo argomento già QUI ...
... ti prego di continuare nel thread che hai già aperto e dove, oltretutto, ti sono state già date delle risposte. 

Grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up