Bonjour, je réalise un projet que je dois absolument finir cette semaine et j'ai besoin d'aide.
Je veux piloter mon moteur à l'aide de deux boutons on et off physiques et d'un curseur sur une appli en bluetooth pour faire varier la vitesse de ce dernier.
Ici mon problème est que j'ai beau bouger mon curseur, le moteur ne prend pas la valeur demandée. En fait, si je met le curseur sur 0 le moteur s’arrête (logique) mais quand le curseur passe à 1 il accélère d'un coup et toutes les autres valeurs (jusqu’à 255) font tourner le moteur à la même vitesse...
Voici mon code
#include <LedControlMS.h>
byte max_units = 1;
LedControl lc=LedControl(8,10,9,max_units); //Brancher din sur 8, clk 10 cs sur 9
int Data;
int pinButton = 2; //On déclare le bouton On sur la broche 8
int pinButton2 = 5; //On déclare le bouton Off sur la broche 9
int stateMOT = 0; //On initialise l'etat du moteur à 0
int stateButtonOff = 0; //On initialise l'etat du bouton Off à 0
int stateButtonOn = 0; //On initialise l'etat du bouton On à 0
int pwm_a = 3; //La vitesse du moteur se controle via la broche 3
int dir_a = 12; //La direction du moteur se controle via la broche 12
int detectV=A5; //Fil barrage relié à 8
int LEDV=4; //led relié à 4
int detectR=A0; //Fil barrage relié à 9
int etatdetectV=0; //declaration de la variable etatdetectV
int etatdetectR=0; //declaration de la variable etatdetectR
int detection=0;
unsigned long tempsDebut, tempsFin;
unsigned long delaytime=1;
int distance = 100;//Declaration de la distance separant R1 et R2 en mm
byte A[] = { B00000000,B00000000,B00000000,B11011111,B11011111,B00000000,B00000000,B00000000};
byte B[] = { B00011000,B00100100,B01011010,B01011010,B10000001,B10011001,B10000001,B01111110};
void setup() {
pinMode(pinButton, INPUT); //Déclare le bouton On comme une entrée
pinMode(pinButton2, INPUT); //Déclare le bouton Off comme une entrée
pinMode(pwm_a, OUTPUT); //Declare la vitesse du moteur comme une sortie
pinMode(dir_a, OUTPUT); //Declare la direction du moteur comme une sortie
pinMode(detectV,INPUT_PULLUP); //capteur, entrée
pinMode(LEDV,OUTPUT); //led, sortie
pinMode(detectR,INPUT_PULLUP); //capteur, entrée
Serial.begin(9600);
Serial.println("En attente de passage...");
Serial.println("La distance initialisée entre les deux capteurs est de ");
Serial.print(distance);
Serial.print(" mm");
}
void Attention() {
lc.setRow(0,0,A[0]);
lc.setRow(0,1,A[1]);
lc.setRow(0,2,A[2]);
lc.setRow(0,3,A[3]);
lc.setRow(0,4,A[4]);
lc.setRow(0,5,A[5]);
lc.setRow(0,6,A[6]);
lc.setRow(0,7,A[7]);
delay(3000);
}
void set_unit(byte number_of_unit){
lc.shutdown(number_of_unit-1,false);
lc.setIntensity(number_of_unit-1,1);
lc.clearDisplay(number_of_unit-1);
}
void loop() {
if(stateMOT == 1) { //Si il est pressé
while(Serial.available()) {
Data= Serial.read();
Serial.print(Data);
digitalWrite(pwm_a,Data); //On allume le moteur
}
}
stateButtonOn = digitalRead(pinButton); //Controle l'etat du bouton On
if(stateButtonOn == HIGH) { //Si il est pressé
digitalWrite(pwm_a,60); //On allume le moteur
stateMOT = 1; //On change l'etat du moteur à Allumé
}
stateButtonOff = digitalRead(pinButton2); //Controle de l'etat du bouton Off
if(stateButtonOff == HIGH) { //Si il est pressé
digitalWrite(pwm_a,0); //On eteint le moteur
stateMOT = 0;//On change l'etat du moteur à Eteint
}
etatdetectV = digitalRead(detectV); //On affecte à la varialble etatdetect la valeur de detectV
etatdetectR = digitalRead(detectR); //On affecte à la varialble etatdetect la valeur de detectR
if (etatdetectV == LOW) //si le détection
{
tempsDebut=millis();
Serial.println(" Top depart");
delay(500);
}
else //sinon
{
}
if (etatdetectR == LOW) //si le détection
{
detection=HIGH;
tempsFin = millis();
Serial.println(" Top final");
}
else //sinon
{
}
if (detection ==HIGH)
{
float dt = (float)( (float)tempsFin - (float)tempsDebut) / 1000. ;
float vitesse = (float)distance/(float)dt;
if ((float)vitesse>50){
Attention();
for(byte i=1;i<6;i++)
{
set_unit(i);
}
}
float VKMN = 0.0; // Variable vitesse en N
VKMN = ((float)vitesse * 160.0);
Serial.println("La temps est de: ");
Serial.print((float)dt);
Serial.print("La vitesse est de: ");
Serial.print((float)vitesse);
Serial.println(" mm/s");
Serial.print("La vitesse à l'echelle N est de: ");
Serial.print(((float)VKMN)/1000*3.6);
Serial.println(" km/h");
delay(1000);
detection=LOW;
}
}
Merci de votre aide
PS: J'ai rajouté la ligne Serial.print(Data); pour vérifier si les valeurs étaient bien reçues correctement et c'est effectivement le cas...