[Horloge à billes] gestion du temps sous arduino

Bonjour à tous,

Je précise que je suis encore novice dans l'utilisation des arduino.

J'ai récemment récupéré un horloge à bille dans un vide-grenier

Ce genre de sal****ie -> https://www.amazon.fr/Horloge-à-billes-cadeau-design/dp/B00C4UGTUO

Et là, surprise ça fonctionne pas super : le capteur déclenchant la prise de la bille déconne... normal pour un objet "vide-grenier"

J'ouvre le bazar, et découvre que le capteur en question est capteur magnétique et blabla blabla... On s'en fout ! j'ai pris une pince et dégagé tout ce matériel merdique en plastique usé.

J'ai monté une arduino uno pour piloter le moteur et le bras prise de bille ainsi que le pauvre capteur de position.

Ça fonctionne nickel ! le bras prends la bille fait un tour complet puis revient à sa base !

Mais c'est là que j'ai un pépin : le réglage...

Comment compter le temps de prise de bille et de manipulation dans la minute en cours ?

J'aimerais faire afficher le temps dans le moniteur pour identifier la différence entre 2 prises de billes pour régler au mieux la tempo...

Est-ce possible ? quelqu'un a une idée ?

Voici le code :

 int moteur = 10;
int inter = 8;
boolean capt = false;


void setup() {
  // put your setup code here, to run once:
  pinMode (inter,INPUT); //Lecture capteur bras de bille
  pinMode (moteur,OUTPUT); //Pilotage moteur
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.begin(9600);
do
{
  analogWrite(moteur,255);
  if(digitalRead(inter) == false) capt = true;
  Serial.print("BOUCLE");
  Serial.print("--> Moteur = fonctionne // capteur = ");  
  Serial.print(capt);
  Serial.print("\n");
  
}while(capt == false);
delay(500);
analogWrite(moteur,0);
capt = false;

delay(10000);// Délai à régler pour que le cycle =1 minute


  Serial.print("LOOP");
  Serial.print("--> Moteur = arrêt// capteur = ");  
  Serial.print(capt);
  Serial.print("\n");
}

Orbital_Verbose:
Comment compter le temps de prise de bille et de manipulation dans la minute en cours ?

Le principe de la gestion du temps sur arduino est de tirer parti du fait que la loop s'exécute en boucle et dure très peu de temps.

Disons pour fixer les idées que la loop dure 20 ms. Tous les 20 ms tu sais donc que ce temps s'est écoulé. Si tu veux faire une action tous les 2 secondes, il te suffit de compter 100 exécutions de la loop pour lancer ensuite cette action.

Ça c'est le principe. Dans les faits c'est un peu différent. On va utiliser une fonction qui compte les ms écoulées depuis le lancement du programme. C'est la fonction millis ()

Comme ce nombre peut être très grand, on stocke sa valeur dans une variable de type unsigned long. A chaque exécution de la loop on regarde de combien à changé cette fonction et si cette valeur dépasse un certain seuil, par exemple 2000 ms, on lance l'action.

Dans ton cas, il fait que tu décides de ton timing. Quelles actions faut il lancer à quels moments ? Une fois que ce timing est connu, il suffit de coder...

D'abord tu définis des variables 'chrono' pour suivre le temps.

unsigned long chrono = 0;

Puis tu lances le chrono, à la fin du setup

chrono = millis () ;

Et dans la loop, tu compares l'avancement du chrono avec ton timing

if (millis () - chrono > timing) {
 chrono = millis () ;
 action_a_lancer ;
}

Tu peux faire ça autant de fois que nécessaire, il suffit de créer plusieurs chronos avec des noms différents

Salut !

Bah ça c'est génial !

C'est pile-poil ce dont j'avais besoin.