Arduino Chrono

Au sommaire :

[Archive 2014] Carte prototype d’expérimentation de la carte Arduino UNO 

Présentation

Cette petite carte prototype d’environ 10x10cm permet d’accueillir une carte Arduino UNO et de disposer de quatre boutons poussoirs, d’un afficheur de 4 digits de 7 segments, de 2 relais, et d’une Led rouge.

Elle permet de réaliser de multiples développements expérimentaux, en commençant par exemple, par un simple chronomètre…

Deux principales difficultés : La réalisation des soudures qui doivent être très soignées !  Et, pour la partie développement, la gestion de l’afficheur 4 digits qui est directement relié à l’Arduino, sans aucun circuit de gestion.

Je vous propose de décrire, en quelques lignes, les différentes étapes de cette réalisation, et plus particulièrement le schéma et un exemple de code.

Liste des pièces

Schéma

Rien de compliqué !  Il faut juste veiller à câbler l’afficheur correctement :

Attention :     Selon le modèle utilisé, l’afficheur 4 x 7 segments peut avoir l’Anode et la Cathode de toutes ces diodes inversées !

Mais cela ne change rien au câblage, il faudra juste inverser la logique de programmation dans les définitions des numéros.

Voici le schéma global :

Les soudures vues de prêt

Un bon fer à souder, de la soudure et des fils adaptés …. et un peu de patience :

Exemple de développement

OK ! il n’y a aucune explication …. 

				
					// -------------------- Cablage
int Aff_A = 2;
int Aff_B = 0;
int Aff_C = 6;
int Aff_D = 4;
int Aff_E = 3;
int Aff_F = 1;
int Aff_G = 5;
 
int Aff_1 = 9;
int Aff_2 = 8;
int Aff_3 = 7;
int Aff_4 = 10;
 
int Relais_1 = 11;
int Relais_2 = 12;
int led = 13;
 
int Sw_1 = A2;
int Sw_2 = A3;
int Sw_3 = A0;
int Sw_4 = A1;
 
 
// -------------------- Variables
boolean led_status = false;
 
int a = 0;
int val = 21;
int val_set = val;
int millieme;
int centaine;
int dizaine;
int unite;
 
int Val_sw1;
int Val_sw2;
int Val_sw3;
int Val_sw4;
 
unsigned long time;
unsigned long sw1_push_time;
unsigned long sw2_push_time;
unsigned long sw3_push_time;
unsigned long sw4_push_time;
unsigned long chrono_time;
 
boolean intro = true;
int temp = 100;
 
boolean Chrono = false;
boolean Commande = false;
 
 
void setup ()
{
  pinMode(led, OUTPUT);     
  pinMode(Relais_1, OUTPUT);     
  pinMode(Relais_2, OUTPUT);     
  
  pinMode(Aff_A, OUTPUT);     
  pinMode(Aff_B, OUTPUT);     
  pinMode(Aff_C, OUTPUT);     
  pinMode(Aff_D, OUTPUT);     
  pinMode(Aff_E, OUTPUT);     
  pinMode(Aff_F, OUTPUT);     
  pinMode(Aff_G, OUTPUT);     
  
  pinMode(Aff_1, OUTPUT);     
  pinMode(Aff_2, OUTPUT);     
  pinMode(Aff_3, OUTPUT);     
  pinMode(Aff_4, OUTPUT);     
 
 
  time = millis();
 
}
 
void loop ()
{
      
      // Intro
      if (intro == true) {
          digitalWrite(led, HIGH);
          digitalWrite(Aff_G, HIGH);  delay (temp); digitalWrite(Aff_G, LOW);
          digitalWrite(Aff_F, HIGH);  delay (temp); digitalWrite(Aff_F, LOW);
          digitalWrite(Aff_A, HIGH);  delay (temp); digitalWrite(Aff_A, LOW);
          digitalWrite(Aff_B, HIGH);  delay (temp); digitalWrite(Aff_B, LOW);
          digitalWrite(Aff_G, HIGH);  delay (temp); digitalWrite(Aff_G, LOW);
          digitalWrite(Aff_E, HIGH);  delay (temp); digitalWrite(Aff_E, LOW);
          digitalWrite(Aff_D, HIGH);  delay (temp); digitalWrite(Aff_D, LOW);
          digitalWrite(Aff_C, HIGH);  delay (temp); digitalWrite(Aff_C, LOW);
          digitalWrite(led, LOW);
          intro = false;
      }
          
 
      // ----------------------------- BOUTTONS ----------------------------
      Val_sw1 = analogRead (Sw_1) ;
      Val_sw2 = analogRead (Sw_2) ;
      Val_sw3 = analogRead (Sw_3) ;
      Val_sw4 = analogRead (Sw_4) ;
 
      // traitement switch 1 - PLUS
      if ( Val_sw1 < 10 && val < 9999 &&  millis() > sw1_push_time + 100 && Chrono == false ) {  
           sw1_push_time = millis(); 
           val++;  
           val_set = val;
      }
      // traitement switch 2 - MOINS
      if ( Val_sw2 < 10 && val > 0 &&  millis() > sw2_push_time + 100 && Chrono == false ) {  
           sw2_push_time = millis(); 
           val--;  
           val_set = val;
      }
      
      // traitement switch 3 - STOP
      if ( Val_sw3 < 10 &&  millis() > sw3_push_time + 1000) {  
          sw3_push_time = millis();
          if ( Commande == true ) {
              Chrono = false;
              Commande = false;
              val = val_set;
          } else {
              Commande = true;
          }
      }
      
      // traitement switch 4 - START
      if ( Val_sw4 < 10 && Chrono != true) {
            Chrono = true;  
            chrono_time = millis();
            Commande = true;
            val_set = val;
      }
 
 
      // ---------------------------- CHRONO  ------------------------------
      if ( Chrono == true &&  millis() >= chrono_time + 1000 ) {
          val--;
          chrono_time = millis();
       
          if ( val == 0 ) {
              Chrono = false;
              Commande = false;
              val = val_set;
          }
      }
 
 
      // ---------------------------- SORTIE ----------------------------
      if ( Commande == true ) {
          digitalWrite(led, HIGH);
      //    digitalWrite(Relais_1, HIGH);
          
      } else {
          digitalWrite(led, LOW);
      //    digitalWrite(Relais_1, LOW);
      }
      
      // ---------------------------- AFFICHAGE ----------------------------
      millieme = val/1000;
      centaine = (val - millieme*1000)/100;    
      dizaine  = (val - millieme*1000 - centaine*100)/10;    
      unite    = (val - millieme*1000 - centaine*100 - dizaine*10);  
    
      pickDigit(4);
      pickNumber(unite);
      pickDigit(3);
      pickNumber(dizaine);
      pickDigit(2);
      pickNumber(centaine);
      pickDigit(1);
      pickNumber(millieme);
      clearLEDs (); 
}
 
 
 
 
 
void pickDigit (int x) 
{
  clearLEDs ();
  
  switch (x)
    {
    case 1:
      digitalWrite (Aff_1, LOW);
      break;
    case 2:
      digitalWrite (Aff_2, LOW);
      break;
    case 3:
      digitalWrite (Aff_3, LOW);
      break;
    case 4:
      digitalWrite (Aff_4, LOW);
      break;
}
 
}
void pickNumber (int x) // define pickNumber (x), whose role is to show digital x-
{
  switch (x)
  {
    case 0:
      default:
      zero ();
      break;
    case 1:
      one ();
      break;
    case 2:
       two ();
       break;
    case 3:
       three ();
       break;
    case 4:
        four ();
        break;
    case 5:
        five ();
      break;
    case 6:
        six ();
        break;
    case 7:
        seven ();
        break;
    case 8:
      eight ();
      break;
    case 9:
      nine ();
      break;
  }
}
 
 
void clearLEDs ()  // clear the screen
{
  digitalWrite (Aff_A, LOW);
  digitalWrite (Aff_B, LOW);
  digitalWrite (Aff_C, LOW);
  digitalWrite (Aff_D, LOW);
  digitalWrite (Aff_E, LOW);
  digitalWrite (Aff_F, LOW);
  digitalWrite (Aff_G, LOW);
  digitalWrite (Aff_1, HIGH);
  digitalWrite (Aff_2, HIGH);
  digitalWrite (Aff_3, HIGH);
  digitalWrite (Aff_4, HIGH);
}
void zero () // define those figures 0:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, HIGH);
digitalWrite (Aff_E, HIGH);
digitalWrite (Aff_F, HIGH);
digitalWrite (Aff_G, LOW);
}
void one () // define those figures 1:00 cathode pin switch
{
digitalWrite (Aff_A, LOW);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, LOW);
digitalWrite (Aff_E, LOW);
digitalWrite (Aff_F, LOW);
digitalWrite (Aff_G, LOW);
}
void two () // define those figures 2:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, LOW);
digitalWrite (Aff_D, HIGH);
digitalWrite (Aff_E, HIGH);
digitalWrite (Aff_F, LOW);
digitalWrite (Aff_G, HIGH);
}
void three () // define those figures 3:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, HIGH);
digitalWrite (Aff_E, LOW);
digitalWrite (Aff_F, LOW);
digitalWrite (Aff_G, HIGH);
}
void four () // define those figures 4:00 cathode pin switch
{
digitalWrite (Aff_A, LOW);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, LOW);
digitalWrite (Aff_E, LOW);
digitalWrite (Aff_F, HIGH);
digitalWrite (Aff_G, HIGH);
}
void five () // define those figures 5:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, LOW);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, HIGH);
digitalWrite (Aff_E, LOW);
digitalWrite (Aff_F, HIGH);
digitalWrite (Aff_G, HIGH);
}
void six () // define those figures 6:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, LOW);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, HIGH);
digitalWrite (Aff_E, HIGH);
digitalWrite (Aff_F, HIGH);
digitalWrite (Aff_G, HIGH);
}
void seven () // define those figures 7:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, LOW);
digitalWrite (Aff_E, LOW);
digitalWrite (Aff_F, LOW);
digitalWrite (Aff_G, LOW);
}
void eight () // define those figures 8:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, HIGH);
digitalWrite (Aff_E, HIGH);
digitalWrite (Aff_F, HIGH);
digitalWrite (Aff_G, HIGH);
}
void nine () // define those figures 9:00 cathode pin switch
{
digitalWrite (Aff_A, HIGH);
digitalWrite (Aff_B, HIGH);
digitalWrite (Aff_C, HIGH);
digitalWrite (Aff_D, HIGH);
digitalWrite (Aff_E, LOW);
digitalWrite (Aff_F, HIGH);
digitalWrite (Aff_G, HIGH);
}