hello
veux tu charger ce code et le tester chez toi.
/***************************/
/*Variable pour le capteur*/
/*************************/
const int TRIGGER_PIN = 2;
/************************************************************************/
/* Variable pour stocker les secondes, centièmes,le temps au tour...*/
/**********************************************************************/
long temps_au_tour;
unsigned long temps_start=0;
boolean top = false;
int digit=0;
int valeur = 0;
boolean DPH = true;
boolean DPB = true;
boolean capteur_ligne = true;
unsigned long temps = 0;
unsigned long temps_total = 0;
unsigned long temps_top_ligne = 0;
unsigned long TempsHr = 0;
unsigned long TempsMn = 0;
unsigned long TempsSec = 0;
unsigned long TempsDix =0;
unsigned long TempsMil = 0;
/********************************************/
/*Variable pour déclarer les ports des leds.*/
/********************************************/
//declaration des sorties pour segments
// B C A G D F E
const char centiemes[]{30,29,28,27,26,25,24};
const char dixiemes[]{37,36,35,34,33,32,31};
const char secondes[]{44,43,42,41,40,39,38};
const char diz_secondes[]{51,50,49,48,47,46,45};
//declaration des points décimaux
const char points[]{53,52};
void setup()
{
Serial.begin(57600);
for (int f =24;f<=53;f++){pinMode (f, OUTPUT);} //passe les pin led en sortie
digit=24;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les centièmes
digit=31;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les dixièmes
digit=38;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les secondes
digit=45;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les diz_secondes
digit=52;actionDigitalpoint(digit,1,1); // allumage des DP
pinMode(TRIGGER_PIN, INPUT_PULLUP); //entrées interruptibles en entrée, pull-up validées
noInterrupts();
attachInterrupt(0, isr_ligne_franchie, FALLING); // N° interruption0,routine, flanc descendant
temps_start = millis();
interrupts();
//_____________________________________________________________________________________________________
//il y a 00:00 à l'affichage; les DP clignotent au rythme des secondes
//le while ci dessous attend que le capteur de passage soit actionné
//le while est neutralisé pour le débugage
//_____________________________________________________________________________________________________
/* while( capteur_ligne == true)//attente de la 1ere interruption
{
if (millis()> (temps_start+1000)){DPH!=DPH;DPB!=DPB;digit=52;actionDigitalpoint(digit,DPH,DPB);temps_start = millis();}
}
*/
capteur_ligne = true;
temps_total = millis();
temps_start = millis();
}
void loop()
{ controle_si_interruption();
if (millis()> (temps_total+1000)) //toutes les secondes on inverse les DP
{
DPH=!DPH;DPB=!DPB;digit=52;actionDigitalpoint(digit,DPH,DPB);temps_total = millis();
//Serial.print(("DPH "));Serial.println(DPH);Serial.print(("DPB "));Serial.println(DPB);
} //accolade à rétablir après le débugage__________________________________________________________
temps = (millis() - temps_start);init_h_m_s();affichage();
}
//}//accolade à supprimer après le débugage______________________________________________________________
void controle_si_interruption()
{
if (capteur_ligne == false) // oui, il y a eu interruption "partiel"
{
temps_top_ligne = millis(); //relevé du temps au tour
temps = (millis() - temps_start);init_h_m_s();
while( (millis() < (temps_top_ligne + 5000))) //pendant 5 secondes
{
affichage();
capteur_ligne = true;
}
}
}
void init_h_m_s ()
{
TempsHr = (temps /3600000)%60;
TempsMn = (temps /60000)%60;
TempsSec = (temps /1000)%60;
TempsMil = (temps %1000 );
TempsDix = TempsMil/10;
}
void affichage()
{
//on extrait le rang de chaque chiffre à afficher pour connaitre le digit concerné
if (TempsMn >= 10 )
{digit=0;valeur=(TempsMn/10);/*aiguillage();*/Serial.print(F("TempsMn>10 = "));Serial.println(valeur);}//chiffre significatif pour dizaines de minutes
else
{digit=0;valeur=0;/*aiguillage();*/Serial.print(("TempsMn>>10 =0 = "));Serial.println(valeur);} //dizaines de minutes valent zero
if (TempsMn < 10 )
{digit=0;valeur=(TempsMn);/*aiguillage();*/Serial.print(F("TempsMn<10 = "));Serial.println(valeur);}//chiffre significatif pour minutes
else
{digit=0;valeur=0;/*aiguillage();*/Serial.print(("TempsMn<<10 =0 = "));Serial.println(valeur);} // minutes valent zero
if (TempsSec >= 10)
{digit=45;valeur=((TempsSec/10));aiguillage();Serial.print(("TempsSec>10 = "));Serial.println((valeur));} //chiffre significatif pour dizaines de secondes
else
{digit=45;valeur=0;aiguillage();Serial.print(("TempsSec>>10 =0 = "));Serial.println(valeur);} //dizaines de secondes valent zero
if (TempsSec <= 9 )
{digit=38;valeur=(TempsSec);aiguillage();Serial.print(F("TempsSec<10 = "));Serial.println(valeur);} //chiffre significatif pour secondes
else
{digit=38;valeur=(TempsSec-((TempsSec/10)*10));aiguillage();Serial.print(("TempsSec<<0 =0 = "));Serial.println(valeur);} //secondes valent zero
if (TempsMil >= 100 )
{digit=31;valeur=(TempsMil/100);aiguillage();Serial.print(("Tempsdx = "));Serial.println(valeur);}// chiffre significatif pour dixièmes de secondes
else
{digit=31;valeur=0;aiguillage();Serial.print(("Tempsdx =0 = "));Serial.println(valeur);}// dixièmes de secondes valent zero
if ((TempsMil < 100 ) &(TempsMil > 9 ))
{digit=24;valeur=((TempsMil/10)-((TempsMil/100)*10));Serial.print(("Tempscent = "));Serial.println(valeur);aiguillage();}//chiffre significatif pour centièmes de secondes
else
{digit=24;valeur=0;aiguillage();Serial.print(("Tempscent =0 = "));Serial.println(valeur);}//centièmes de secondes valent zero
Serial.println((" = "));
}
void aiguillage()
{
switch (valeur)
{
case 0:// B C A G D F E //chiffre 0
actionDigital(digit,1,1,1,0,1,1,1);
break ;
case 1:// B C A G D F E //chiffre 1
actionDigital(digit,1,1,0,0,0,0,0);
break ;
case 2:// B C A G D F E //chiffre 2
actionDigital(digit,1,0,1,1,1,0,1);
break ;
case 3:// B C A G D F E //chiffre 3
actionDigital(digit,1,1,1,1,1,0,0);
break ;
case 4:// B C A G D F E //chiffre 4
actionDigital(digit,1,1,0,1,0,1,0);
break ;
case 5:// B C A G D F E //chiffre 5
actionDigital(digit,0,1,1,1,1,1,0);
break ;
case 6:// B C A G D F E //chiffre 6
actionDigital(digit,0,1,1,1,1,1,1);
break ;
case 7:// B C A G D F E //chiffre 7
actionDigital(digit,1,1,1,0,0,0,0);
break ;
case 8:// B C A G D F E //chiffre 8
actionDigital(digit,1,1,1,1,1,1,1);
break ;
case 9:// B C A G D F E //chiffre 9
actionDigital(digit,1,1,1,1,1,1,0);
break ;
default:
break;
}
}
// B C A G D F E
void actionDigital(int digit,byte un,byte deux,byte trois,byte quatre,byte cinq,byte six,byte sept)
{
digitalWrite(digit+6, un); //Segment B
digitalWrite(digit+5, deux); //Segment C
digitalWrite(digit+4, trois); //Segment A
digitalWrite(digit+3, quatre); //Segment G
digitalWrite(digit+2, cinq); //Segment D
digitalWrite(digit+1, six); //Segment F
digitalWrite(digit, sept); //Segment E
}
// DPH DPB
void actionDigitalpoint(int digit,byte pointhaut,byte pointbas)
{
digitalWrite(digit+1, pointbas); //Segment point bas
digitalWrite(digit, pointhaut); //Segment point haut
}
void isr_ligne_franchie() // routine d'interruption 0
{
capteur_ligne = false;
}
void calculdistance()
{
}