Bonjour,
Voici l'intégralité de mon code , celui-ci constitue un test par rapport à mon code complet. J'utilise donc parfois un switch dans ce cas ci pour simuler un fonctionnement:
//Fin de course et position
int inSwitchbas = 53;
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 = 30;
const byte ECHO2 = 31;
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);
Serial.println (Position1);
Serial.println (Position2);
if (switchbas == HIGH){
while (Position1<900 || Position2<900){ || switchhaut == LOW ){
Position1 = analogRead (Ana1);
Position2 = analogRead (Ana2);
//safety1();
moteurp();
//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){
if ((((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 ();
}
}
}
Mes variables sont juste "INPUT" mais le pull up est fait sur ma breadboard.
Je me déplace dans le sens positif. (fonction : moteurp, effectivement plus facile avec l intégralité du code).
Mon switchbas permet dans ce cas ci (utiliser dans ce code comme actionneur mais dans le but de faire un test) d'actionner la montée des vérins. Je veux que mes moteurs s'arretent de tourner dans le sens positif dans le cas ou une des postions (1 ou2) est dépassée ou alors si le switchhaut est à l'état haut (utilisé comme un fin de course).