Le code :
//Fin de course et position
int inSwitchbas = 11;
int inSwitchhaut = 12;
int switchbas = 0;
int switchhaut = 0;
//Position des vérins
int Position1 =0;
int Position2 =0;
// valeur analogique correspondant à la position haute et basse // Il faudra peut etre donner PB2 PH2
int PB = 300 ;
int PH = 700;
//Moteur
const int Ana1 = A5;
int D1A = 9;
int D1B = 8;
const int Ana2 = A0;
int D2A = 11;
int D2B = 13;
// Signal 12V ancienne gache
int insignalvalue = 10;
int signalvalue = 0;
//Bouton sortie "urgence"
int BP = 0;
int inBP =7;
//Montre si porte est fermée
int EtatPorte = 0;
//Mesure de la distance
const byte TRIGGER = 6;//
const byte ECHO = 5;
const byte TRIGGER2 = 4;
const byte ECHO2 = 3;
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = 8m à 340m/s
const float SOUND_SPEED = 340.0 / 1000;
void setup() {
pinMode(inSwitchbas, INPUT);
pinMode(inBP, INPUT);
pinMode(inSwitchhaut, INPUT);
pinMode(insignalvalue, INPUT);
pinMode(D1A, OUTPUT);
pinMode(D1B, OUTPUT);
pinMode(D2A, OUTPUT);
pinMode(D2B, OUTPUT);
pinMode (Ana1, INPUT);
pinMode (Ana2, INPUT);
pinMode(TRIGGER, OUTPUT);
digitalWrite(TRIGGER, LOW);
pinMode(ECHO, INPUT);
pinMode(TRIGGER2, OUTPUT);
digitalWrite(TRIGGER2, LOW);
pinMode(ECHO2, INPUT);
Serial.begin(115200);
}
void loop() {
BP = digitalRead (inBP);
switchbas = digitalRead (inSwitchbas);
switchhaut = digitalRead (inSwitchhaut);
Position1 = analogRead (Ana1);
Position2 = analogRead (Ana2);
if (switchbas == HIGH){
while (Position1<900){
Position1 = analogRead (Ana1);
Position2 = analogRead (Ana2);
moteurp();
safety1();
//safety2();
}
SynchroMoteurp ();
moteur0();
}
if (switchhaut == HIGH){
moteurn();
delay (2000);
moteur0();
}
if (BP == HIGH){
moteurp();
delay (2000);
moteurn();
delay (2000);
moteur0();
}
}
//moteur sens +
void moteurp (){
digitalWrite (D1A, HIGH);
digitalWrite (D1B, LOW);
digitalWrite (D2A, HIGH);
digitalWrite (D2B, LOW);
}
void moteur1p (){
digitalWrite (D1A, HIGH);
digitalWrite (D1B, LOW);
}
void moteur2p (){
digitalWrite (D2A, HIGH);
digitalWrite (D2B, LOW);
}
//moteur sens -
void moteurn(){
digitalWrite (D1A, HIGH);
digitalWrite (D1B, HIGH);
digitalWrite (D2A, HIGH);
digitalWrite (D2B, HIGH);
}
void moteur1n(){
digitalWrite (D1A, HIGH);
digitalWrite (D1B, HIGH);
}
void moteur2n(){
digitalWrite (D2A, HIGH);
digitalWrite (D2B, HIGH);
}
//moteur sens stop
void moteur0(){
digitalWrite(D1A,LOW);
digitalWrite(D1B,LOW);
digitalWrite(D2A,LOW);
digitalWrite(D2B,LOW);
}
float distance() {
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
long measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
float distance_mm = measure / 2.0 * SOUND_SPEED;
//Serial.println("distance ");
//Serial.print(distance_mm / 10.0, 2);
//Serial.print("cm de ");
return distance_mm ;
}
float distance2() {
digitalWrite(TRIGGER2, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER2, LOW);
long measure2 = pulseIn(ECHO2, HIGH, MEASURE_TIMEOUT);
float distance_mm2 = measure2 / 2.0 * SOUND_SPEED;
//Serial.println("distance ");
//Serial.print(distance_mm2 / 10.0, 2);
//Serial.print("cm de ");
return distance_mm2 ;
}
void safety1 () {
if ((distance()< 150.00) ){
//if ((Position1) >= 150){
//((((Position1) > 150 || (Position2) > 150))&&(((distance()< 150.00) || (distance2()< 150.00)))){
moteur0();
delay (5000);
}
}
void safety2 () {
if ((distance2()< 150.00) ){
//if ((Position1) >= 150){
//((((Position1) > 150 || (Position2) > 150))&&(((distance()< 150.00) || (distance2()< 150.00)))){
moteur0();
delay (5000);
}
}
void SynchroMoteurp () {
if ((Position1 - Position2) > 10 ){
digitalWrite(D1A,LOW);
digitalWrite(D1B,LOW);
while ( (Position1 - Position2) > 1){
Position1 = analogRead (Ana1);
Position2 = analogRead (Ana2);
moteur2p ();
}
}
if ((Position2 - Position1) > 10 ){
digitalWrite(D2A,LOW);
digitalWrite(D2B,LOW);
while ( (Position2 - Position1) > 1){
Position1 = analogRead (Ana1);
Position2 = analogRead (Ana2);
moteur1p ();
}
}
}
void SynchroMoteurn () {
if ((Position2 - Position1) > 10 ){
digitalWrite(D1A,LOW);
digitalWrite(D1B,LOW);
while ( (Position2 - Position1) > 1){
Position1 = analogRead (Ana1);
Position2 = analogRead (Ana2);
moteur2n ();
}
}
if ((Position1 - Position2) > 10 ){
digitalWrite(D2A,LOW);
digitalWrite(D2B,LOW);
while ( (Position1 - Position2) > 1){
Position1 = analogRead (Ana1);
Position2 = analogRead (Ana2);
moteur1n ();
}
}
}