1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
| #include <Wire.h>
#include <AFMotor.h>
// la bonne si tout va bien
AF_DCMotor Moteur(1,MOTOR12_64KHZ);
// Entrées sélection étage
const int btEtage0 = 53;
const int btEtage1 = 51;
const int btEtage2 = 49;
// Entrées fin de course étage
const int finEtage0 = 45;
const int finEtage1 = 43;
const int finEtage2 = 41;
/* Broches des différents segments de l'afficheur */
const byte led1 = 21;
const byte led2 = 23;
const byte led3 = 25;
const byte led4 = 27;
const byte led5 = 29;
const byte led6 = 31;
const byte led7 = 33;
const byte led8 = 35;
void versEtage(int etage);
void setup()
{
Serial.begin(9600);//pour lecture sur la console (Optionnel)
Moteur.setSpeed(255);
pinMode(btEtage0, INPUT);
pinMode(btEtage1, INPUT);
pinMode(btEtage2, INPUT);
pinMode(finEtage0, INPUT);
pinMode(finEtage1, INPUT);
pinMode(finEtage2, INPUT);
// Afficheur
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
versEtage(0);
}
void loop()
{
if (digitalRead(btEtage0) == LOW)
{
versEtage(0);
}
if (digitalRead(btEtage1) == LOW)
{
versEtage(1);
}
if (digitalRead(btEtage2) == LOW)
{
versEtage(2);
}
delay(200); // antirebond interrupteur
static byte chiffre = 0;
static byte etat_dp = 0;
}
void versEtage(int etage)
{
switch(etage)
{
case 0:
// démarrer moteur en descente car forcément en 1 ou 2
while (digitalRead(finEtage0) == HIGH) // tant que l'ascenseur n'est pas à l'étage 0
{ Moteur.run(FORWARD);
Serial.println("vers etage 0");
}
// arret moteur
Moteur.run(RELEASE);
/* Affiche le chiffre */
//************ 0 *************
digitalWrite(led1, LOW); // fixe la led comme allumée
digitalWrite(led2, LOW); // fixe la led comme allumée
digitalWrite(led3, LOW); // fixe la led comme allumée
digitalWrite(led4, LOW); // fixe la led comme allumée
digitalWrite(led5, LOW); // fixe la led comme allumée
digitalWrite(led6, LOW); // fixe la led comme allumée
digitalWrite(led7, HIGH); // fixe la led comme eteinte
digitalWrite(led8, LOW); // fixe la led comme allumée
break;
case 1:
// où est l'ascenseur ?
// démarrer moteur en montée si 0 ou en descente si 2eme
if (digitalRead(finEtage0) == LOW)
{
while (digitalRead(finEtage1) == HIGH) // n'est pas à l'étage 1
{ Moteur.run(BACKWARD);
Serial.println("vers etage 1 depuis 0");
}}
if (digitalRead(finEtage2) == LOW)
{
while (digitalRead(finEtage1) == HIGH) // n'est pas à l'étage 1
{ Moteur.run(FORWARD);
Serial.println("vers etage 1 depuis 2");
}
}
// arret moteur
Moteur.run(RELEASE);
//************ 1 *************
digitalWrite(led1, HIGH); // fixe la led comme éteinte
digitalWrite(led2, HIGH); // fixe la led comme éteinte
digitalWrite(led3, LOW); // fixe la led comme allumée
digitalWrite(led4, LOW); // fixe la led comme allumée
digitalWrite(led5, HIGH); // fixe la led comme éteinte
digitalWrite(led6, HIGH); // fixe la led comme éteinte
digitalWrite(led7, HIGH); // fixe la led comme allumé
digitalWrite(led8, HIGH); // fixe la led comme éteinte
break;
case 2:
// démarrer moteur en montée (car forcément en 0 ou 1)
while (digitalRead(finEtage2) == HIGH) // n'est pas à l'étage 2
{ Moteur.run(BACKWARD);
Serial.println("vers etage 2");
}
// arret moteur
Moteur.run(RELEASE);
//************ 2 *************
digitalWrite(led1, HIGH); // fixe la led comme eteinte
digitalWrite(led2, LOW); // fixe la led comme allumée
digitalWrite(led3, LOW); // fixe la led comme ellumée
digitalWrite(led4, HIGH); // fixe la led comme eteinte
digitalWrite(led5, LOW); // fixe la led comme allumée
digitalWrite(led6, LOW); // fixe la led comme allumée
digitalWrite(led7, LOW); // fixe la led comme allumée
digitalWrite(led8, HIGH); // fixe la led comme éteinte
break;
}
delay(200);
} |