#define MOTORMIN 90 #define MOTORMAX 250 #define MOTORSTART 200 int motorPin = 9; int speedUpPin = 7; int speedDownPin = 6; int speed; int ledoutPin=5; int emergencyPin=2; /* ------------------------------------------------------------------ * Démarre le moteur en commençant pas envoyer * une impulsion un peu forte sinon il n'y a pas assez de puissance * pour lancer la machine. Une fois lancé, il est possible de limiter * la puissance et donc la vitesse * ------------------------------------------------------------------ */ void motorSet(int value) { if ( value < MOTORSTART ) { analogWrite(motorPin, MOTORSTART); delay(50); } analogWrite(motorPin, value); } // // Demarre le moteur avec un signal PWM permettant de fixer la vitesse // void motorSet(int value) { // analogWrite(motorPin, value); // } // Arret le moteur void motorStop() { analogWrite(motorPin,0); } // nouveau setup void setup() { pinMode(motorPin, OUTPUT); pinMode(speedUpPin, INPUT_PULLUP); pinMode(speedDownPin, INPUT_PULLUP); pinMode(ledoutPin, OUTPUT); pinMode(emergencyPin, INPUT); speed = MOTORMIN; motorStop(); pinMode(ledoutPin, OUTPUT); pinMode(emergencyPin, INPUT); digitalWrite(emergencyPin, HIGH); // force internal pullup attachInterrupt(0,emergencyStop,FALLING); clearEmergencyLed(); Serial.begin(9600); } void setEmergencyLed() { digitalWrite(ledoutPin,HIGH); } void clearEmergencyLed() { digitalWrite(ledoutPin,LOW); } /* ------------------------------------------------------------------ * Interruption déclenchée par l'appuie sur le bouton d’arrêt d'urgence * ------------------------------------------------------------------ */ void emergencyStop() { motorStop(); speed = MOTORMIN; setEmergencyLed(); } // // Arduino Setup // void setup() { // pinMode(motorPin, OUTPUT); // motorStop(); // Serial.begin(9600); // motorSet(64); // } // Arduino loop void loop() { if ( digitalRead(speedUpPin) == LOW ) { clearEmergencyLed(); speed += 10; if ( speed > MOTORMAX ) speed = MOTORMAX; motorSet(speed); Serial.print("UP "); Serial.println(speed); } if ( digitalRead(speedDownPin) == LOW ) { clearEmergencyLed(); speed -=10; if ( speed <= MOTORMIN ) { speed = MOTORMIN; motorStop(); } else { motorSet(speed); } Serial.print("DOWN "); Serial.println(speed); } delay(500); // delay(1000); } // Essayez le programme en remplaçant XXX par les valeurs 220, 150, 64. Essayez éventuellement de lancer le moteur à la main. Que constatez-vous? // 220 Il tourne comme une horloge // 150 Il faut le lancer mais c'est bon // 64 Meme en lancant, il veut pas#define MOTORMIN 80 // Maintenant, essayez de nouveaux avec des valeurs 200, 80, 64 . Que constatez-vous ? // jusque 80 ca passe