bonjour à tous,
Je me permet de poster une question de méthodologie car je ne suis pas très sûr de faire les choses de la manière la plus efficace...
Au niveau du contexte, je travaille avec une Arduino duemilanove, un popolu MC33887 Motor Driver Carrier, 2 boutons et un contacteur
L'idée du prog si dessous (qui fonctionne) c'est que quand le bouton 1 est enfoncé, le moteur actionne un mécanisme qui viens rappuyer dessus (vérifier par le bouton2) avant de retourner dans sa position initiale (vérifier par le contacteur).
const int buttonPin = 2;
const int contactPin = 3;
const int buttonPin2 = 4;
const int motorPin1 = 13;
const int motorPin2 = 12;
const int motorPwm= 11;
// variables will change:
int buttonState = 0;
int contactState = 0;
int buttonState2 = 0;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPwm, OUTPUT);
pinMode(contactPin, INPUT);
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
Serial.begin(9600);
}
void loop(){
// read the state of pushbuttons values:
buttonState = digitalRead(buttonPin);
contactState = digitalRead(contactPin);
buttonState2 = digitalRead(buttonPin2);
if (buttonState == HIGH && contactState == HIGH) {
delay (300);
analogWrite(motorPwm, 255); // puissance moteur
Serial.println("action");
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay (4000);
}
/* if (buttonState2 == HIGH && contactState == LOW ) {
Serial.println("CONTACT");
analogWrite(motorPwm, 200);
digitalWrite(motorPin2, HIGH);
delay (3500);
} */
if (contactState == HIGH) {
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
}
else {
analogWrite(motorPwm, 255);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
Serial.println("back");
}
}
Déjà à ce niveau je ne suis pas sur d'être très efficace dans ma manière de coder l'ensemble...
mais surtout ce qui me pose problème c'est le retour moteur...en effet je souhaiterais utilisé la fonction PWM pour "calmer" le moteur avant qu'il touche le contacteur soit peu de temps après que le B1 et le B2 aient été enfoncés en même temps; c'est la partie fausse désactiver dans mon code.
Une suggestion?
Merci d'avance!
