You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
2.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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 darrê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