Bonjour à tous,
Je suis actuellement sur un projet de maquette de voiture miniature pour mon Lycée : le but étant de mesurer la vitesse d'une voiture sur un moteur pour ensuite afficher un panneau attention si elle va trop vite.
Aujourd'hui je suis face à un problème. Quand je simule passage de la voiture, la valeur calculée de la vitesse est enormement arrondie si bien qu'elle ne prend que les valeurs 100 , 50 ou 0 et cela me pose un problème pour la mise e,n place du projet...
Voila 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 pinButton = 2; //On déclare le bouton On sur la broche 8
int pinButton2 = 7; //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
int vitesse = distance /((tempsFin - tempsDebut)/1000);
byte A[] = { B00011000,B00011000,B00011000,B00011000,B00011000,B00000000,B00011000,B00011000};
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,B[0]);
lc.setRow(0,1,B[1]);
lc.setRow(0,2,B[2]);
lc.setRow(0,3,B[3]);
lc.setRow(0,4,B[4]);
lc.setRow(0,5,B[5]);
lc.setRow(0,6,B[6]);
lc.setRow(0,7,B[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() {
stateButtonOn = digitalRead(pinButton); //Controle l'etat du bouton On
if(stateButtonOn == HIGH) { //Si il est pressé
if(stateMOT == 1){ //Si le moteur est allumé
digitalWrite(pwm_a,85); //On ne change rien
}
if(stateMOT == 0){ //Si le moteur est eteint
digitalWrite(pwm_a,85); //On allume le moteur
stateMOT = 1; //On change l'etat du moteur à Allumé
}
}
if(stateButtonOn == LOW) { //Si il n'est pas pressé (Bouton ON)
if(stateMOT == 1){ //Si le moteur est allumé
digitalWrite(pwm_a,85); //On ne change rien
}
if(stateMOT == 0){ //Si le moteur est éteint
digitalWrite(pwm_a,0); //On ne change rien
}
}
stateButtonOff = digitalRead(pinButton2); //Controle de l'etat du bouton Off
if(stateButtonOff == HIGH) { //Si il est pressé
if(stateMOT == 1){ //Si le moteur est allumé
digitalWrite(pwm_a,0); //On eteint le moteur
stateMOT = 0;//On change l'etat du moteur à Eteint
}
if(stateMOT == 0){//Si le moteur est eteint
digitalWrite(pwm_a,0);//On ne change rien
}
}
if(stateButtonOff == LOW) { //Si il n'est pas pressé (Bouton OFF)
if(stateMOT == 1){//Si le moteur est allumé
digitalWrite(pwm_a,85);//On ne change rien
}
if(stateMOT == 0){//Si le moteur est éteint
digitalWrite(pwm_a,0);//On ne change rien
}
}
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)
{
}
Serial.println("La temps est de: ");
Serial.print(tempsFin - tempsDebut);
Serial.print("La vitesse est de: ");
Serial.print(distance /((tempsFin - tempsDebut)/1000));
Serial.println(" mm/s");
delay(1000);
detection=LOW;
}
}
Il me faut aussi la consigne d'afficher le signe sur la matrice que je pensais introduirte avec cette fonction :
if (((tempsFin - tempsDebut)/1000)>50){
Attention();
for(byte i=1;i<6;i++)
{
set_unit(i);
}
Mais le signe ne s'affiche malheureusement jamais.
Merci de votre aide.