Je suis en pleine programmation et j'ai un soucis : ce que j'ai écris jusqu'à présent fonctionne correctement, mais j'aimerais poursuivre en ajoutant une autre partie et quoi que j'écrive ça fait "sauter" les trucs d'avant, cela ne fonctionne plus.
Voici le code initial qui fonctionne :
const int sensorPin = A0 ; // Capteur effet hall sur une roue dentée
const int compteurVitesse = 3; // vers voltmètre galva 5V
int etatSensor;
int ancien_etatSensor = 0;
long chrono = 0;
long chrono_depart = 0;
long duree_test = 1000; // 1000 = 1 seconde
int nb_chgt = 0;
const int vitesseMax = 10; // nbe chgt état max par test
int vitesseAffichee ;
int bonneVitesse = 0;
const int led = 0;
void setup() {
pinMode (sensorPin,INPUT);
pinMode(compteurVitesse,OUTPUT);
pinMode (led,OUTPUT); // led bonne vitesse
chrono_depart = millis ();
}
void loop() {
etatSensor = digitalRead (sensorPin);
if (millis() - chrono_depart < duree_test)
{
if (etatSensor != ancien_etatSensor)
{
nb_chgt = nb_chgt + 1;
ancien_etatSensor = etatSensor ;
}
}
else
{
vitesseAffichee = (nb_chgt * 255) / vitesseMax ; // 255 = vitesseMax
if (vitesseAffichee >= 255) {vitesseAffichee == 255; }
analogWrite (compteurVitesse, vitesseAffichee) ;
if (vitesseAffichee >= 50 && vitesseAffichee <= 220)
{ bonneVitesse = HIGH ; }
else { bonneVitesse = LOW; }
digitalWrite (0,bonneVitesse);
delay (100);
chrono_depart = millis() ;
nb_chgt = 0 ;
}
}
Donc, quand on pédale, la vitesse s'affiche sur le cadran du voltmètre et si on pédale juste à la bonne vitesse, la led s'allume. Ca, ça fonctionne.
Sauf qu'il faut que j'ajoute un moteur qui fonctionne en fonction de comment on pédale.
Où dois je écrire ?
J'ai commencé par mettre
Petite news dans mes recherches :
Donc, cela ne fonctionne pas parce que la fonction Moteur.step(200); est une action bloquante, donc plus rien ne se passe pendant que mon moteur fonctionne.
Pour palier à cela, j'ai téléchargé la librairie AccelStepper. Après de longues recherches sur des pages en anglais, j'ai finalement réussi à paramétrer mon moteur.
Problème suivant : réussir à le passer en demi pas, parce que en speed à 1 pour un tour à 200 pas, bah je fais le tour en 3,33 min et il faudrait que je le fasse en plus que ça.
tu comptes deux fois chaque top du capteur à effet hall.
il y avait une erreur de signe entre la comparaison "if toto ==10" et "toto=10"
(j'ai corrigé)
pour ton moteur, as tu regardé dans les exemples donnés avec la librairie?
const int sensorPin = A0 ; // Capteur effet hall sur une roue dentée
const int compteurVitesse = 3; // vers voltmètre galva 5V
int etatSensor;
int ancien_etatSensor = 0;
long chrono = 0;
long chrono_depart = 0;
long duree_test = 1000; // 1000 = 1 seconde
int nb_chgt = 0;
const int vitesseMax = 10; // nbe chgt état max par test
int vitesseAffichee ;
int bonneVitesse = 0;
const int led = 0;
void setup() {
pinMode (sensorPin,INPUT);
pinMode(compteurVitesse,OUTPUT);
pinMode (led,OUTPUT); // led bonne vitesse
chrono_depart = millis ();
}
/*
on compte les tops pendant 1 seconde
chaque top effet hall est compté 2 fois
1ere fois lorsqu'il passe de haut à bas
2eme fois lorsqu'il repasse en bas à haut
*/
void loop() {
etatSensor = digitalRead (sensorPin);//on surveille le capteur a effet hall en permanence
if (millis() - chrono_depart < duree_test)//si nous sommes dans la seconde
{
if (etatSensor != ancien_etatSensor)//si le capteur hall à changé ( passé de bas à haut ou inverse)
{
nb_chgt = nb_chgt + 1; //le compteur s'incrémente
ancien_etatSensor = etatSensor ; //état sensor prend l'état actuel du sensor
}
}
else
{
vitesseAffichee = (nb_chgt * 255) / vitesseMax ; // 255 = vitesseMax
//if (vitesseAffichee >= 255) {vitesseAffichee == 255; } //ici, il ne faut qu'un signe =
if (vitesseAffichee >= 255) {vitesseAffichee = 255; } //ici, il ne faut qu'un signe =
analogWrite (compteurVitesse, vitesseAffichee) ;
if (vitesseAffichee >= 50 && vitesseAffichee <= 220)
{ bonneVitesse = HIGH ; }
else { bonneVitesse = LOW; }
digitalWrite (0,bonneVitesse);
delay (100);
chrono_depart = millis() ;
nb_chgt = 0 ;
}
}