probleme incrementation

bonjour a tous

je souhaiterais savoir comment je peut faire pour incrementer les changement d etat haut de ma led afin de pouvoir lire sur le moniteur le nombre d impultion effectuer

merci d avance

int pin = 13;

volatile unsigned long button_time = 0;
volatile unsigned long last_button_time = 0;
int debounce = 100; // debounce latency in ms

volatile int state = LOW; // déclartion d'une variable volatile
volatile int comptageImpulsion=0; // variable accessible dans la routine interruption externe 0
void setup()
{
 pinMode(pin, OUTPUT);
 attachInterrupt(0, blink, FALLING); // attache l'interruption externe n°1 à la fonction blink

}

void loop()
{
 digitalWrite(pin, state); // la LED reflète l'état de la variable
}

void blink() // la fonction appelée par l'interruption externe n°0
{
 button_time = millis();

 if (button_time - last_button_time > debounce)
 {
 state = !state; // inverse l'état de la variable
 last_button_time = button_time;
 }

}

Bonjour,

Il suffit d'incrémenter le compteur chaque fois que state passe à 1.

void blink() // la fonction appelée par l'interruption externe n°0
{
  button_time = millis();

  if (button_time - last_button_time > debounce)
  {
    state = !state; // inverse l'état de la variable
    if (state)
      comptageImpulsion++;
    last_button_time = button_time;
  }
}

maintenant ca fait ca

int pin = 13;
int compteur = 0;
volatile unsigned long button_time = 0;
volatile unsigned long last_button_time = 0;
int debounce = 100; // debounce latency in ms

volatile int state = LOW; // déclartion d'une variable volatile
volatile int comptageImpulsion=0; // variable accessible dans la routine interruption externe 0
void setup()
{
 pinMode(pin, OUTPUT);
 attachInterrupt(0, blink, FALLING); // attache l'interruption externe n°1 à la fonction blink

 Serial.begin(9600);
}

void loop()
{
 digitalWrite(pin, state); // la LED reflète l'état de la variable

}

void blink() // la fonction appelée par l'interruption externe n°0
{
 button_time = millis();

 if (button_time - last_button_time > debounce)
 {
 state = !state; // inverse l'état de la variable
 last_button_time = button_time;
 if (state)
      comptageImpulsion++;
    last_button_time = button_time;
    Serial.print("Ha ! Vous avez touche le bouton ");
    Serial.print(button_time);
    Serial.println(" fois");
 }

}

et voila ce que j ai sur le moniteur

Ha ! Vous avez touche le bouton 2237 fois
Ha ! Vous avez touche le bouton 2614 fois
Ha ! Vous avez touche le bouton 3798 fois
Ha ! Vous avez touche le bouton 4034 fois
Ha ! Vous avez touche le bouton 5286 fois
Ha ! Vous avez touche le bouton 5533 fois
Ha ! Vous avez touche le bouton 7069 fois
Ha ! Vous avez touche le bouton 7692 fois
Ha ! Vous avez touche le bouton 8682 fois
Ha ! Vous avez touche le bouton 9422 fois
Ha ! Vous avez touche le bouton 10430 fois
Ha ! Vous avez touche le bouton 11756 fois
Ha ! Vous avez touche le bouton 12549 fois
Ha ! Vous avez touche le bouton 13583 fois
Ha ! Vous avez touche le bouton 14256 fois
Ha ! Vous avez touche le bouton 14643 fois
Ha ! Vous avez touche le bouton 15675 fois
Ha ! Vous avez touche le bouton 16129 fois
Ha ! Vous avez touche le bouton 17143 fois
Ha ! Vous avez touche le bouton 17637 fois
Ha ! Vous avez touche le bouton 18546 fois
Ha ! Vous avez touche le bouton 19097 fois
Ha ! Vous avez touche le bouton 20033 fois
Ha ! Vous avez touche le bouton 20612 fois
Ha ! Vous avez touche le bouton 21988 fois
Ha ! Vous avez touche le bouton 22632 fois
Ha ! Vous avez touche le bouton 23659 fois
Ha ! Vous avez touche le bouton 24260 fois
Ha ! Vous avez touche le bouton 25465 fois
Ha ! Vous avez touche le bouton 26016 fois
Ha ! Vous avez touche le bouton 39127 fois
Ha ! Vous avez touche le bouton 39692 fois
Ha ! Vous avez touche le bouton 40535 fois
Ha ! Vous avez touche le bouton 41112 fois
Ha ! Vous avez touche le bouton 41995 fois
Ha ! Vous avez touche le bouton 42646 fois
Ha ! Vous avez touche le bouton 43638 fois
Ha ! Vous avez touche le bouton 44266 fois
Ha ! Vous avez touche le bouton 45131 fois
Ha ! Vous avez touche le bouton 45612 fois
Ha ! Vous avez touche le bouton 46061 fois
Ha ! Vous avez touche le bouton 46299 fois
Ha ! Vous avez touche le bouton 47880 fois
Ha ! Vous avez touche le bouton 48053 fois
Ha ! Vous avez touche le bouton 49121 fois
Ha ! Vous avez touche le bouton 49288 fois
Ha ! Vous avez touche le bouton 50286 fois
Ha ! Vous avez touche le bouton 50487 fois
Ha ! Vous avez touche le bouton 52175 fois
Ha ! Vous avez touche le bouton 52316 fois
Ha ! Vous avez touche le bouton 53645 fois
Ha ! Vous avez touche le bouton 53818 fois
Ha ! Vous avez touche le bouton 54618 fois
Ha ! Vous avez touche le bouton 54812 fois
Ha ! Vous avez touche le bouton 55706 fois
Ha ! Vous avez touche le bouton 55911 fois
Ha ! Vous avez touche le bouton 56953 fois
Ha ! Vous avez touche le bouton 57129 fois
Ha ! Vous avez touche le bouton 58258 fois
Ha ! Vous avez touche le bouton 58452 fois

je voudrais que l incrementation apparaise sur le moniteur mai juste de 1 en 1 et seulement sur l impulsion et pas au relachement du bouton

aider moi s il vous plait

le nombre d'appui ce n'est pas button_time mais comptageImpulsion.

   Serial.print(comptageImpulsion);

Remarque: le traitement d'interruption doit être le plus court possible. En particulier il est déconseillé d'utiliser Serial en interruption.

merci ca fonctionne

le seul souci est que j ai le comptage qui compte en double

Ha ! Vous avez touche le bouton 1 fois
Ha ! Vous avez touche le bouton 1 fois
Ha ! Vous avez touche le bouton 2 fois
Ha ! Vous avez touche le bouton 2 fois
Ha ! Vous avez touche le bouton 3 fois
Ha ! Vous avez touche le bouton 3 fois
Ha ! Vous avez touche le bouton 4 fois
Ha ! Vous avez touche le bouton 4 fois
Ha ! Vous avez touche le bouton 5 fois
Ha ! Vous avez touche le bouton 5 fois
Ha ! Vous avez touche le bouton 6 fois
Ha ! Vous avez touche le bouton 6 fois
Ha ! Vous avez touche le bouton 7 fois
Ha ! Vous avez touche le bouton 7 fois

il compte 1 a l enclenchement et encore 1 au declanchement de mon contacteur

et je souhaiterais savoir si je peut faire en sorte d enregistrer un nombre d impulsion en determinant le debut d enregistrement en enclanchant un interupteur et en indiquant la fin de l enregistrement en coupan ce meme interupteur

adventisse:
le seul souci est que j ai le comptage qui compte en double

Oui il faudrait n’afficher que quand on incrémente comme ceci

void blink() // la fonction appelée par l'interruption externe n°0
{
  button_time = millis();

  if (button_time - last_button_time > debounce)
  {
    state = !state; // inverse l'état de la variable
    last_button_time = button_time;
    if (state)
    {
      comptageImpulsion++;
      last_button_time = button_time;
      Serial.print("Ha ! Vous avez touche le bouton ");
      Serial.print(button_time);
      Serial.println(" fois");
    }
  }
}

adventisse:
et je souhaiterais savoir si je peut faire en sorte d enregistrer un nombre d impulsion en determinant le debut d enregistrement en enclanchant un interupteur et en indiquant la fin de l enregistrement en coupan ce meme interupteur

Oui, on peut. Il suffit de tester l’état de l’interrupteur avant de compter

ca ne vas pas ca me donne ca

Ha ! Vous avez touche le bouton 1263 fois
Ha ! Vous avez touche le bouton 2854 fois
Ha ! Vous avez touche le bouton 4505 fois
Ha ! Vous avez touche le bouton 5916 fois
Ha ! Vous avez touche le bouton 7407 fois
Ha ! Vous avez touche le bouton 8964 fois
Ha ! Vous avez touche le bouton 10651 fois

c est moin bien qu avant

Oups! Je suis repartit du mauvais code. C'est ceci que je voulais faire:

void blink() // la fonction appelée par l'interruption externe n°0
{
 button_time = millis();

 if (button_time - last_button_time > debounce)
 {
   state = !state; // inverse l'état de la variable
   last_button_time = button_time;
   if (state)
   {
     comptageImpulsion++;
     last_button_time = button_time;
     Serial.print("Ha ! Vous avez touche le bouton ");
     Serial.print(comptageImpulsion);
     Serial.println(" fois");
   }
 }
}

merci ca marche comme je le veut

maintenant je doit passer a l enregistrement tu me dit que je doit tester l etat de l interupteur avant de compter ca je pense avoir compris mai comment enregister surtout que je veut que cette enregistrement doit rester en memoire en cas de coupure electrique et je doit pouvoir le reutiliser pour gerer la fin de course de mon moteur

void blink() // la fonction appelée par l'interruption externe n°0
{
 button_time = millis();

 if (button_time - last_button_time > debounce)
 {
   state = !state; // inverse l'état de la variable
   last_button_time = button_time;
   if (state)
   {
     comptageImpulsion++;
     last_button_time = button_time;
     Serial.print("Ha ! Vous avez touche le bouton ");
     Serial.print(comptageImpulsion);
     Serial.println(" fois");
   }
   if (interFinDeCourse, HIGH)
     memoire = comptageImpultion;
 }
}

Tu peux l'enregister en eeprom par exemple.

et je vais pouvoir effacer et réenregistrer un nouveau paramétrage si la fin de course venais a ne plus etre bonne avec le Temp?

et surtout comment fait on pour enregistrer sur eeprom - combien d impulsion peut elle garder en mémoire

desole mai la je suis en terrain inconnue

oui, tu peux effacer et reenregistrer, mais le nombre d'écriture est limité à 100000 environ.

Tu gardes le nombre d'impulsion que tu veux car ce que tu enregistres c'est une (ou plusieurs variables) Dans ton cas par exemple:

EEPROM.put(0, comptageImpulsion);

Voir ici.

bonjour

faut il que je rentre tous cela dans mon code pour enregistrer sur l eeprom

#include <EEPROM.h>

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void setup() {

  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  float f = 123.456f;  //Variable to store in EEPROM.
  int eeAddress = 0;   //Location we want the data to be put.


  //One simple call, with the address first and the object second.
  EEPROM.put(eeAddress, f);

  Serial.println("Written float data type!");

  /** Put is designed for use with custom structures also. **/

  //Data to store.
  MyObject customVar = {
    3.14f,
    65,
    "Working!"
  };

  eeAddress += sizeof(float); //Move address to the next byte after float 'f'.

  EEPROM.put(eeAddress, customVar);
  Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
}

void loop() {
  /* Empty loop */
}

Bonjour,

Non, si tu veux enregistrer uniquement le compteur, tu utilises la ligne que je t'ai donnée.

comment je fait pour recuperer ce qui est enregistre afin de l exploite par la suite et comment puis je faire pour écraser cette mémoire en cas de reparamétrage de mes fin de course

Tu utilises get dans ton setup

EEPROM.get(0, comptageImpulsion);

Quand tu vas réécrire ça va écraser l'ancienne valeur. Après c'est à toi de définir la façon dont tu entres en fonctionnement normal ou en mode étalonnage.

désolé pour toute ces questions mai je début dans la programmation

et cette ligne je doit la mettre dans les variable ce qui fait qu a chaque fois qu un comptage vas ce faire il vas écraser l ancien , non ? ou peut être que je peut le mettre dans une ligne avec "if" ?

du genre

if(button_finDeCourse, HIGH)
EEPROM.get(0, comptageImpulsion);

il faut que tu ais deux modes de fonctionnement

  • un mode étalonnage → met a jour comptageImpulsion
  • un mode fonctionnement normal → utilises comptageImpulsion

donc la ligne que tu m as donner sert a mettre a jour comptageImpultion mai comment je fait pour juste lire comptageImpultion

donc la ligne if que je vient de donner Précédemment serait bonne pour la mise a jour