Chronomètre avec enregistrement des tours (1 de 3)

Un gros merci! voici ce que j'ai récupéré en quelques minutes...
je dois continuer a travailler le code pour que ca fasse ce que je veux mais c une bonne base! :stuck_out_tongue:

merci encore:

unsigned long tempsPrecedent = 0, tempsActuel = 0;

void setup(){
Serial.begin(9600);
}

void loop(){
tempsActuel = millis();
if (tempsActuel - tempsPrecedent > 3000) /* Si 30 ms se sont écoulées */
{

Serial.print("temps precedent: ");
Serial.println(tempsPrecedent);/* On bouge Zozor */
Serial.print("temps actuel: ");
Serial.println(tempsActuel);

tempsPrecedent = tempsActuel; /* Le temps "actuel" devient le temps "precedent" pour nos futurs calculs */
}
} :smiley:

10k ohm résistance
un sensor de pression branché dans analog 2

a chaque écrasement du sensor, il sort le temps écoulé depuis le dernier écrasement du force sensor.

**
com3: arduino : avec alimentation dans une prise de courant
com4: arduino : alimenté par usb.
com5: antennes rf

Mes 2 arduinos vont avoir le code ci dessous, puisque chacun d'eux ont un sensor de pression attaché au analog2.

Maintenant j'ai des problèmes avec la transmission RX tX, et mes antennes apc220. je ne suis pas cappable d'envoyer du premier arduino vers le deuxième, pour voir dans le serial monitor les temps du premier et du deuxième arduino.

Toute aide serait vraiment appréciée
merci!!

/*

Make Magazine - Force Sensor Demo

This simple program visually shows the amount of force placed on the sensor
There are much more efficient ways to program, this way was chosen because
it is very easy to understand.

By Marc de Vinck - Licensed under Creative Commons....whatever.


*/

// Here are the constants that we define prior to the program running

int forcePin = 2; // select the input pin for the force sensor
int val = 0; // variable to store the value coming in from the sensor
int led5=13; // defines "led5" as the number 13
unsigned long tempsPrecedent = 0, tempsActuel = 0,tempsTotal = 0; // mes variables de temps
unsigned long centitot1 = 0; // centieme to display
unsigned long secotot1 =0; // seconds to display
unsigned long minutot1 =0; // minutes to display

unsigned long inputVal =0;

// End of constant definitions

void setup() //run one time when the Arduino first powers up
{Serial.begin(9600); //starts serial communication, only used for debgugging
pinMode(led5, OUTPUT);
} // remeber led5 = pin 13, this statement sets pin 13 to output only

void loop() //This next bit of code runs continuously
{
val = analogRead(forcePin); // read the value from the sensor
//inputVal = Serial.read();
// Serial.println(inputVal, DEC);

//Serial.println(val,DEC); // print the value "val" of the sensor (used for debugging)

if (val>500){ //if the value is maxed out or greater than 250
digitalWrite(led5,HIGH); // turns on all 5 LEDs
//delay(100); //slight delay to minimize flickering

tempsTotal=tempsActuel - tempsPrecedent;
Serial.print("temps precedent: ");
Serial.println(tempsPrecedent);/* On bouge Zozor */
Serial.print("temps actuel: ");
Serial.println(tempsActuel);
Serial.print("temps total: ");
Serial.println(tempsTotal);

centitot1 = (tempsTotal%1000)/10 ; //centieme to display
secotot1 = (tempsTotal/1000)%60 ; // second to display
minutot1 = (tempsTotal/1000)/60 ; // minute to display

Serial.print("Votre temps: ");
Serial.print(minutot1);
Serial.print(":");
Serial.print(secotot1);
Serial.print(":");
Serial.println(centitot1);

tempsPrecedent = tempsActuel;
delay(1000);
}
else{
digitalWrite(led5,LOW); //turn off led 13
tempsActuel = millis();

}

}

As tu déjà consulté cette page ?

http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_113&products_id=316

Il y a un tuto en bas de page.

Autrement j'avais fait une post sur la communication entre deux arduino :

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1237119479/0

OK, je vais faire un tour sur tes liens, jusqu'a présent ils sont vraiment utiles! :smiley:

Salut
Dans le concept de départ les boutons changent de fonctions selon le processus en cours. Par exemple bouton 1 sers pour départ et arrêt. Si le chrono roule le bouton ne peut pas repartir le chrono donc il sers a l'arrêter. Une fois en mode relecture des laps les boutons 2 et 3 servent à changer de lap. Si tu me donne plus de details je pourrai te souligner quel portion pourrait être utile.

En passant il y a surement moyen de reduire la grosseur du code. Ce je vais faire dans la prochaine phase du prochaine en plus d'ajouter la possibilité d'avoir le chrono de plusieurs compétiteurs en simultané.

:sunglasses: Madkart

Vraiment Kool, le dernier code que j'ai posté fonctionne très bien pour la question de chronométer j'ai ré-utilisé une petite parti de ton code pour calculer secondes,minutes et milli secondes.

la ou je suis bloqué est le rx tx des 2 arduinos, puisqu'un des arduino est branché en usb, et est supposé recevoir des pins rx tx 0 et 1.

mon module séparé envoie l'info mais je crois que le deuxième (branché usb+antenne rf) a un problème de communication usb/rx/tx. :S

:-?

Dans ce cas utilise une Mega, elle a plusieurs RxTx.

mais, c'est possible de faire ce que je veux?

  • aussi, j'ai déja acheté 2 Duemilanove :S
  • Faudrait-il que j'achète un écran lcd pour me faciliter la tache,

surement qu'un écran couterai le même prix qu'un méga, sauf que j'aurais un component de plus...

sinon je vais voir pour le rx tx.

aussi, j'avais déja vu la docum sur le apc220, comment configurer etc. Tout fonctione parfaitement avec une antenne branché sur arduino et l'autre antenne branché à l'adapteur usb, peut-etre que je pourrais acheter une autre antenne et la brancher à mon deuxième arduino pour un total de 3 antennes.

1 antenne sur chaque arduino
et 1 antennet qui recoit branché a l'adapteur usb pour apc 220.

ou la piste moins cher, de continuer à tester la transmission rx tx+usb... ::slight_smile:

la ou je suis bloqué est le rx tx des 2 arduinos, puisqu'un des arduino est branché en usb, et est supposé recevoir des pins rx tx 0 et 1.

Si je ne dis pas une bêtise, il est possible d'utiliser des E/S digitales pour faire de la communication série (j'utilise le principe pour piloter mes écrans LCD afin qu'ils ne soient pas "pollués" lors d'une connexion USB).

surement qu'un écran couterai le même prix qu'un méga, sauf que j'aurais un component de plus...

A priori, non; une version Méga est dans les 40~50? alors qu'un écran LCD 16x2 série prêt à l'emploi se trouvent couramment dans les 20~25?.
Et moins cher encore pour une version non série (avec le driver type HD44780 intégré), et enfin encore moins cher en pièce à monté soit-même -.^

Salut Castel
Pour ton problème de communication entre les arduino va voir ce lien http://absences.sofianaudry.com/en/node/10 Je crois que tu vas trouver une réponse intéressante à ta demande. Malheureusement en anglais mais il y a toujours moyen de faire un peu de traduction avec google

en gros il propose d'utiliser I2C. Tout ce que tu as besoin pour réaliser le montage est quelques résistance (1.5k), des fils et la bibliothèque Wire - Arduino Reference

Bonne chance et tient nous au courant

Madkart (devine a quoi me sert le chrono) :wink:

Madkart (devine a quoi me sert le chrono)

Pour des courses d'enclumes.... ::slight_smile:

Je vais commencer par voir a assigner des nouvelles pins avec le softwareSerial en premier et si ca marcher pas bien .. jvais continuer a consulter les liens.

(aussi prenez note que les commentaires dans mes codes plus haut sont erronés, je vais les retaper plus tard pour bien expliquer chaque ligne.

mon premier post de code est un timer
mon second post de code est un chronomètre relié a un sensor de pression lu dans analog 2... )

J'ai réussi a tout faire fonctioner:

Voici le principe que j'utilise

arduino1 -transmitter, peut envoyer un signal mais en recoit pas, stand alone - branché sur batterie 9 volt. tout ce qu'il fait c'est capter avec un force sensor et transmet le chiffre 2 au arduino reciever si qqn a écrasé son sensor.

arduino2- reviever. est branché par usb a un ordinateur, recoit du signal et c'est lui qu a le chronomètre intégré.

// ********** setup du arduino 1 - le transmitter par Sylvain Castel
// antenne apc 220 avec un cable qui relie la pin RX au tx1 du arduino ,le rest de l'antenne est connecté au ground et 5 volts
// un sensor de pression relié au analog2 ( et il y a une résistance de 10kohm entre le ground et le sensor)
// une led relié a la pin digital 13

int signalGo = 2;// juste un chiffre que j'ai choisi pour dire que qqn a passé sur le sensor du arduino transmitter
int forcePin = 2; // select the input pin for the force sensor
int val = 0; // variable pour définir la valeur qui vien du force sensor - variable to store the value coming in from the sensor
int led5=13; // je definit le terme led5 au chiffre 13 - defines "led5" as the number 13

void setup() //run one time when the Arduino first powers up
{Serial.begin(9600); //starts serial communication, only used for debgugging
pinMode(led5, OUTPUT); // j'assigne la led5 comme un output pour y envoyer ou pas l'électricité a ma led - setting the led5, as usable
}

void loop() // boucle continue - This next bit of code runs continuously
{

val = analogRead(forcePin); // lecture de la valeur qui vient du sensor de pression - read the value from the sensor
if (val>500){ // si la valeur lue est plus que 500, alors exécute le code ci dessous entre{ } - if the value is maxed out or greater than 500

digitalWrite(led5,HIGH); // allume ma led car le sensor est écrasé- turns on LED 13 sensor is pressed
Serial.println(signalGo);// on envoie un signal(le chiffre 2) a l'autre arduino (arduino2 - reciever) - send a rf signal (value 2) to the second arduino (arduino2 receiver)
delay(1000); //attend une seconde, ce qui fait qu'on peut pas écraser 2 fois rapidement le sensor - wait for a second, so that you can't press super fast the sensor 2 times in a row
}
else{
digitalWrite(led5,LOW); // éteint la led du arduino 1 - turn off led 13 on transmitter
}
}

// ********** setup du arduino 2 - le reciever par Sylvain Castel
// antenne apc 220 avec un cable qui relie la pin TX au RX0 du arduino ,le rest de l'antenne est connecté au ground et 5 volts
// un sensor de pression relié au analog2 ( et il y a une résistance de 10kohm entre le ground et le sensor)
// une led relié a la pin digital 13

// section pour définir la communication rf
int incomingByte = 0; // valeur recu par l'antenne rf - value recieved by rf transmission

// section de définitions pour le chronomètre - defenitions for the chronometer
unsigned long tempsPrecedent = 0, tempsActuel = 0,tempsTotal = 0; // mes variables de temps
unsigned long centitot1 = 0; // centieme to display
unsigned long secotot1 =0; // seconds to display
unsigned long minutot1 =0; // minutes to display

// définitons pour composantes hardware
int led5=13; // je definit le terme led5 au chiffre 13 - defines "led5" as the number 13select the input pin for the force sensor
int forcePin = 2; // pin analogue relie au force sensor - select the input pin for the force sensor
int val = 0; // variable représentant la valeur du force sensor -variable to store the value coming in from the sensor

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
pinMode(led5, OUTPUT); // j'assigne la led5 comme un output pour y envoyer ou pas l'électricité a ma led - setting the led5, as usable
}

void loop() {
val = analogRead(forcePin); // lecture de la valeur qui vient du sensor de pression - read the value from the sensor

//début de section chronomètre relié au sensor analog2 -section start for chonometer with force sensor arduino2
if (val>500){ // si la valeur lue est plus que 500, alors exécute le code ci dessous entre{ } - if the value is maxed out or greater than 500
digitalWrite(led5,HIGH); // allume ma led car le sensor est écrasé- turns on LED 13 sensor is pressed

tempsTotal=tempsActuel - tempsPrecedent;
Serial.print("temps precedent: "); // here we print some text
Serial.println(tempsPrecedent);// here we print the preceding time
Serial.print("temps actuel: ");// here we print some text
Serial.println(tempsActuel);// here we print the actual time when the sensor was pressed
Serial.print("temps total: ");// here we print some text
Serial.println(tempsTotal);// here we print the total time in millis(tempsTotal=tempsActuel - tempsPrecedent;)

centitot1 = (tempsTotal%1000)/10 ; //centieme to display
secotot1 = (tempsTotal/1000)%60 ; // second to display
minutot1 = (tempsTotal/1000)/60 ; // minute to display

Serial.print("Votre temps: ");// here we print some text
Serial.print(minutot1);// we display minutes
Serial.print(":");// we sepate the minutes with :
Serial.print(secotot1);// we display seconds
Serial.print(":"); //we sepate the seconds with :
Serial.println(centitot1);// we display hundreds seconds

tempsPrecedent = tempsActuel; // ici on update la valeur de la variable temps précédent pour la prochain fois qu'on rentre dans le void loop -once we get our timing done, we update the value of the present time for the next time we go thru the void loop
delay(1000); //on attend une seconde pour éliminer les erreurs de double pression sur le sensor
}
else{ // si on a pas écrasé le sensor de pression
digitalWrite(led5,LOW); //éteint ma led - turn off led 13
tempsActuel = millis();// je defini la variable temps actuel a la fin

}

// fin section chronomèetre relié au sensor analog2 - end of chronometer lind to the sensor

if (Serial.available() > 0) {// ici on set pour recevoir de l'info - here we set up to recieve rf data

incomingByte = Serial.read();// definit une variable pour dire qu'on lit - variable to say we read or recieve data
if (incomingByte == 50){ // ici le chiffre 50 définit la valeur décimale du ''2'' envoyé en signal rf par la transmitter (aruidno1)

//debut du chronomèetre relié a la reception du signal - start of chrnometer with using the rf data as en event starter for chrono

digitalWrite(led5,HIGH);

tempsTotal=tempsActuel - tempsPrecedent;
Serial.print("temps precedent: ");
Serial.println(tempsPrecedent);
Serial.print("temps actuel: ");
Serial.println(tempsActuel);
Serial.print("temps total: ");
Serial.println(tempsTotal);

centitot1 = (tempsTotal%1000)/10 ; //centieme to display
secotot1 = (tempsTotal/1000)%60 ; // second to display
minutot1 = (tempsTotal/1000)/60 ; // minute to display

Serial.print("Votre temps: ");
Serial.print(minutot1);
Serial.print(":");
Serial.print(secotot1);
Serial.print(":");
Serial.println(centitot1);

tempsPrecedent = tempsActuel;
delay(500); // small pause so we dont hit twice in a row the sensor by mistake
}
else{
digitalWrite(led5,LOW); // on éteint la led 13 -turn off led 13
tempsActuel = millis();

// fin de section chronomètre relié a la reception d'un signal rf provenant du transmitter
}
// ici on a une section qui permet de debug les valeurs qui nous sont envoyées par les antennes rf
// here is a section where you can debug, and print the values recieved by your rf antenna

// say what rf antennas recieved:
//Serial.print("I received: ");
//example withSerial.println(incomingByte);
//Serial.println(tempsPrecedent, DEC);
}
}

VOICI LA VIDÉO !!!!!!!!!!

Bravo.... :slight_smile:

merci! c'est mon premier projet arduino! c trop le top! hehe

comment on fait pour poster du code et qui soit colorié comme dans le logiciel arduino??

Bravo
C'est le fun ton truc. Pour poster il y a dans le compilateur une fonction exporter pour forum. J'ai hate de voir le detail.

Madkart [smiley=cool.gif]
(Trippeux d'encume qui roule a 120km)

g trouvé qu'a 9600 bps le signal se rend a environ 400-500 metres, en descendant a 2400 bps, le signal se rend a une distance incroyable.

  • je vais faire des boitiers ajd, et bientot je vais poster des video du chronometre avec des descendes de longboard :slight_smile:

aussi c quoi des courses d'enlumes??