Bonjour a tous,
Alors voila, comme je l'ai dit dans ma présentation je n'y connais rien, mais je veux apprendre a le faire si quelqu'un m'aide.
Je voudrais pour plus de confort améliorer une machine agricole avec des capteur qui me donnerons des infos en cabine.
J'ai fais un bout de code (avec une base que j'ai trouvé sur le net) pour afficher sur un bargraph a led la position d'une piece via un potar, ca a l'air ok, a tester sur la machine....
Je voudrais maintenant savoir quand une poulie se met en rotation.
je pense mettre un capteur inductif et ........c'est la que j'ai besoin.
j'ai fais ce code mais ca ne va pas, si la poulie est arrêté devant le capteur j'ai mon info en continu.
il me faudrait un front descendant mais je ne sais pas faire et je voudrais un code simple.
Bon vous moquez pas je débute
J'ai déplacé ton code à la racine du forum francophone.
Le bar est prévu pour les fils de discussion hors sujet Arduino.
Pour détecter un front il faut comparer l'état actuel et l'état à la précédente itération de loop.
Dans ton explication, tu parles d'un front descendant et tu fait un test sur `buttonState == HIGH` donc je suis partie sur un test du même type à savoir un front montant.
Si tu veux détecter un front descendant il suffit d'échanger HIGH et LOW dans le test
const int capteur = 12;
const int ledPin = 13;
int buttonState = 0;
int old_buttonState = 0;
void setup() {
pinMode(capteur, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(7,OUTPUT);
buttonState = digitalRead(capteur);
old_buttonState = buttonState;
}
void loop(){
buttonState = digitalRead(capteur);
if (buttonState == HIGH && old_buttonState == LOW){
digitalWrite(13,HIGH);
tone(7,50);
delay(2000);
}
else {
digitalWrite(13,LOW);
noTone(7);
}
old_buttonState = buttonState;
}
Pour le code, fait ctrl+t dans l'IDE pour qu'il soit correctement indenté. Cela permet de voir d'un coup d'œil la forme de celui-ci.
Merci, c'est tout a fait ca, a vrai dire j'avais essayé en pompant a droite a gauche avec le != mais sans y arriver.
Bon a moi de régler mon delay en fonction du nombre de tr/min pour pas qu'il n'y est de clignotement.
Y avait il une autre façon de faire ?
Le clignotement n'est pas nécessairement une mauvaise chose car cela done une information supplémentaire.
Il y a toujours plusieurs manières de faire une chose. Ce qui importe c'est que cela fasse ce que tu veux.
A noter: le delay(2000) bloque le programme pendant 2 secondes. Cela à plusieurs conséquences:
A l'issue des 2 secondes le voyant s'éteindra jusqu'au prochain déclenchement du capteur inductif. Donc tu auras toujours un bref clignotement quelque soit la durée du delay()
Ce blocage de 2 secondes pourrait t'empêcher de réaliser une autre fonction que tu pourrais vouloir faire en parallèle de cette détection de rotation.
Une autre façon de faire pourrais être:
mémoriser le moment où le capteur se déclenche, en mémorisant la valeur de millis() dans une variable. Et allumer la LED
si le temps écoulé depuis le dernier déclenchement est supérieur à une certaine valeur éteindre la LED
Ce code n'et pas bloquant et permet de faire réaliser plusieurs tâches à l'Arduino en même temps