Salut à tous,
je débute totalement et je suis en train de creer une serie de programmes qui à terme se retrouverons fusionnés dans une interface sous processing.
aujourd'hui j'ai fait un programme qui mesure un angle sur une plage bien precise, je m'explique.
j'ai un arbre tournant qui comprend 4 cames et qui actionne un seul et unique interrupteur.
j'ai 8 plages parcourues par l'interrupteur, la premiere desactive l'interrupteur, la suivante l'active, etc etc ...
et j'ai besoin de connaitre l'angle des 4 plages qui desactives l'interrupteur.
à savoir :
plage 1 : x°
plage 2 : x°
plage 3 : x°
plage 4 : x°
pour cela j'ai donc créé un programme qui compte le temps où l'interrupteur est ouvert ou fermé sur chaque plages.
j'additionne tout ces temps et ce total est équivalent à 360°
et donc, si je veux connaitre l'angle d'une plage je fais une règle de 3 (c'est le cas de la plage n°2 que j'observe)
vu que je ne suis pas faignant j'ai tenté ce programme de moi meme sachant que ça ne fait que 3 jours que je suis sur ce language.
je post ce programme ici pour que vous me disiez si il y a plus simple, si il est optimisé où si j'ai des erreurs.
le programme semble fonctionner, ma crainte c'est que je ne suis pas certain qu'il ne faille pas un interrupt ou un truc du genre pour être certain que le programme attente l'etat suivant afin de correctement comptabiliser le temps total sur un tour d'arbre
j’espère que je suis clair, je suis très à l'ecoute
merci d'avance
const byte PIN_SIGNAL = 2;
int buttonState = 0;
int lastButtonState = 0;
long temps_total = 0;
int angle2 = 0;
const int angle_total = 360;
long p1 = 0;
long p2 = 0;
long p3 = 0;
long p4 = 0;
long p5 = 0;
long p6 = 0;
long p7 = 0;
long p8 = 0;
/** Fonction setup() */
void setup() {
/* Initialise le port série */
Serial.begin(115200);
/* Met la broche en entrée */
pinMode(PIN_SIGNAL, OUTPUT);
}
/** Fonction loop() */
void loop() {
// lit l'état actuel du bouton poussoir et le mémorise dans la variable
buttonState = digitalRead(PIN_SIGNAL);
// compare l'état actuel du bouton poussoir à l'état précédent mémorisé
if (buttonState != lastButtonState) {
/* Mesure la durée de la période */
p1 = pulseIn(PIN_SIGNAL, LOW);
Serial.print("p1: ");
Serial.println(p1);
if (buttonState != lastButtonState){
p2 = pulseIn(PIN_SIGNAL, HIGH);
Serial.print("p2: ");
Serial.println(p2);}
if (buttonState != lastButtonState){
p3 = pulseIn(PIN_SIGNAL, LOW);
Serial.print("p3: ");
Serial.println(p3);}
if (buttonState != lastButtonState){
p4 = pulseIn(PIN_SIGNAL, HIGH);
Serial.print("p4: ");
Serial.println(p4);}
if (buttonState != lastButtonState){
p5 = pulseIn(PIN_SIGNAL, LOW);
Serial.print("p5: ");
Serial.println(p5);}
if (buttonState != lastButtonState){
p6 = pulseIn(PIN_SIGNAL, HIGH);
Serial.print("p6: ");
Serial.println(p6);}
if (buttonState != lastButtonState){
p7 = pulseIn(PIN_SIGNAL, LOW);
Serial.print("p7: ");
Serial.println(p7);}
if (buttonState != lastButtonState){
p8 = pulseIn(PIN_SIGNAL, HIGH);
Serial.print("p8: ");
Serial.println(p8);}
//affiche le temps total
temps_total = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;
Serial.print("temps total: ");
Serial.println(temps_total);
//affiche l'angle inter fermé
angle2 = (p2 * angle_total) / (temps_total) ;
Serial.print("angle 2: ");
Serial.println(angle2);
}
delay(100);
}