Je suis assez nouveau dans l'arduino du coup j'ai encore beaucoup de mal à réaliser mes projets...
Mon projet actuel est assez simple, j'ai un vélo de contre la montre et un casque de contre la montre avec une visière dans laquelle j'aimerais intégrer un système de vision tête haute comme dans les avions de chasse.
Le projet ce divise en deux parties, la première utilise une carte mega 2560 qui recois des infos de deux capteurs à effet hall situer sur le vélo (un pour la vitesse et l'autre pour la cadance de pédalage RPM) et qui doit en déduire la vitesse et la cadence et s'occuper de gérer l'affichage sur la visière,
L'autre partie est une carte uno avec un shield audio qui est sencé fonctionner comme un assistant vocale et m'indiquer certaine information utile ou non dans mes écouteurs.
Les deux étant censé communiquer l'un avec l'autre par le biais d'une liaison par fil en utilisant la librayrie "Wire.h".
Pour l'instant toute la partie mécanique est réalisé et fonctionnelle.
J'ai deux GROS problème avec ce projet.
Le premier c'est que je n'arrive pas à calculer correctement la vitesse et la cadence.... même en affinant les réglage j'ai de grosses incohérence dans les valeur donnée en plus des bonnes valeurs...
Donc si quelqu'un pouvait me montrer comment puis-je régler cela...
Mon deuxième problème est assez étrange car lorsque j'utilise la librayrie Wire dans mon programme utilisant le shield audio tout plante et la liaison série ne fait que m'afficher des symboles bizarre... aucune piste audio ne se lit alors que dès que je sort la ligne "#include "Wire.h"" le programme se remmer à marcher correctement...
please help me, je vais finir par sauter par ma fenêtre si ça continue !!! en plus je sais que j'y suis presque !!!

- Code: Tout sélectionner
#include "Wire.h";
char dizaine = 0; // variable pour affichage des dizaines
char unite = 0; // variable pour affichage des unité
int bidon = 500;
int cadens = 0; // valeur de la cadence
boolean x = 0; //
int vit = 0; //signal d'entré du capteur hall de la vitesse
int temps1_vit = 0; //temps pris au premier passage
int temps2_vit = 0; //temps pris au deuxième passage
int temps_vit = 0; //temps entre les deux passages
int vitesse_actuel = 0; //vitesse
int vitesse_precedente = 4;
unsigned int ecart = 0;
int cad = 0; //valeur signal capteur hall de la cadence
boolean y = 0;
int temps1_cad = 0; //premiers passage
int temps2_cad = 0; //deuxième passage
int temps_cad = 0; //entre les deux passages
boolean temps_vit_affichage = 0; //varialble de clignotement dans l'affichage
boolean temps_cad_affichage = 0; //varialble de clignotement dans l'affichage
boolean temps_bidon_affichage = 0; //varialble de clignotement dans l'affichage
int transmission = 0; //connexion filaire avec l'autre carte
int km = 0; //kilomètre parcourue
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
// Wire.begin();
Serial.begin(9600);
pinMode(A1, INPUT); // entré capteur boisson
pinMode(A2, INPUT); // entré compteur vitesse
pinMode(A3, INPUT); // entré compteur cadence
pinMode(A4, INPUT); // entré capteur pulse
pinMode(6, OUTPUT); // sortie 7 afficheur sept segments
pinMode(7, OUTPUT); // sortie 6 afficheur sept segments
pinMode(9, OUTPUT); // sortie 5 afficheur sept segments
pinMode(10, OUTPUT); // sortie 4 afficheur sept segments
pinMode(11, OUTPUT); // sortie 3 afficheur sept segments
pinMode(12, OUTPUT); // sortie 2 afficheur sept segments
pinMode(13, OUTPUT); // sortie 1 afficheur sept segments
pinMode(49, OUTPUT); // sortie 1 cadence
pinMode(51, OUTPUT); // sortie 2 cadence
pinMode(27, OUTPUT); // sortie 3 cadence
pinMode(29, OUTPUT); // sortie 4 cadence
pinMode(31, OUTPUT); // sortie 1 vitesse
pinMode(33, OUTPUT); // sortie 2 vitesse
pinMode(35, OUTPUT); // sortie 3 vitesse
pinMode(37, OUTPUT); // sortie 4 vitesse
pinMode(39, OUTPUT); // sortie 1 bidon
pinMode(41, OUTPUT); // sortie 2 bidon
pinMode(43, OUTPUT); // sortie 3 bidon
pinMode(45, OUTPUT); // sortie 4 bidon
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(49, LOW);
digitalWrite(51, LOW);
digitalWrite(27, LOW);
digitalWrite(29, LOW);
digitalWrite(31, LOW);
digitalWrite(33, LOW);
digitalWrite(35, LOW);
digitalWrite(37, LOW);
digitalWrite(39, LOW);
digitalWrite(41, LOW);
digitalWrite(43, LOW);
digitalWrite(45, LOW);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
vitesse();
cadence();
affichage();
Serial.println(vitesse_actuel);
Serial.println();
// Serial.println(cadens);
}
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
void vitesse()
{
vit = analogRead(A2);
// si la valeur du capteur dépasse 1021
if(vit > 1021)
{
x = 1 - x; // on change une fois sur deux x pour que prendre deux mesures de temps et ainsi avoir un temps entre deux passage de l'aimant
km = km + 2.12;
if(x == 1) // premier passage
{
temps1_vit = millis();
delay(15); //delay pour ne pas mesurer deux fois le même passage
}
if(x == 0) //deuxième passage
{
temps2_vit = millis();
delay(15);
}
}
if((temps1_vit != 0) && (temps2_vit != 0))
{
temps_vit = (temps2_vit - temps1_vit);
vitesse_actuel = ((2.12 * 3600) / temps_vit); //calcul de la vitesse
temps1_vit = 0; // on remet à zéros
temps2_vit = 0;
//filtre();
dizaine = vitesse_actuel / 10; // pour affichage
unite = vitesse_actuel - (dizaine * 10);
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void cadence()
{
cad = analogRead(A3);
if(cad > 1000)
{
y = 1 - y; //même chose que pour la vitesse mais avec des delay plus long car l'aimant passe plus lentement devant le capteur
if(y == 1)
{
temps1_cad = millis();
delay(150);
}
if(y == 0)
{
temps2_cad = millis();
delay(150);
}
}
if((temps1_cad != 0) && (temps2_cad != 0))
{
temps_cad = (temps2_cad - temps1_cad);
cadens = 60000 / temps_cad;
if(cadens > 150) //filtre pour éliminer les valeurs incohérente...
{
cadens = 0;
}
temps1_cad = 0;
temps2_cad = 0;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////