Aide pti nouveau - projet arduino type alfano.

NickoR:
Salut!

Merci, super sympa toutes ces infos.

Pour l'écran, le 16x2 c'est celui livré d'origine. je l'utilise pour commencer les codes, je suis en attente d'un 3''2 TFT LCD -

En effet je n'avais pas penser aux différents capteurs. qui risque de ne pas être un mm temps.

Ok, je vais me pencher sur millis - mais je n'ai pas encore trouver de fonction pour le chrono.
je n'arrive pas à faire un truc coherant.

Je pense que l'écran sera au plus près de la carte. le capteur aura un cable tv ce qui est censé le protéger des interférence.

En tout cas, merci pour tout, et je suis preneur de tout avis.

bonjour
pour le capteur (à base d'ILS en // des schemas ) il y a aussi de prevu un circuit anti-rebond qui doit bien faire son job :grin:
Pour aller plus loin , il faudrait passer sur du/des capteur(s) Hall analogiques et avoir acces "aux" circuits" pour "depouiller de la mesure"
Mais pragmatiquement je suppose que vu le nombre "d'amateurs" la solution ILS est bien eprouvée/validée 8)

pour le compteur, je te laisse chercher/trouver le "code le mieux adapté" :grin: c'est aussi le but du jeu ici 8)

question et reflexion perso sur le dispositif d'affichage "en course" , un LCD c'est suffisamment lisible quelque soit les conditions d'eclairage naturel/incident ?
intuitivement je serais plus parti sur de l'affichage numerique led

Salut

En effet ,les capteurs ne sera testé que en condition réel sur circuit lors d'une journée de roulage.
Je n'habite pas assez près d'un circuit, et je ne pense pas qu'on puisse y accéder pour effecteur des test sur les boucles.

Je pense aussi que les capteurs ILS soit une solution, peut être pas la meilleur mais fonction. (de ce que j'ai pu un peu lire)

Pour le code, pas de souci, je cherche, je souhaite apprendre. mais je pense revenir d'ici peu car la je pêche.

et pour ta dernière réflexion. je l'avoue, je n'y ai mm pas penser.
Bon c'est surtout pour apprendre.

Si j'arrive à ce que je veux, et que cela me plait.

il faudrait peut être aussi envisager une carte plus petit. j'ai cru voir qu'il exister des micro voir nano ?!

Si c'est un champs magnétique à détecter, ça serait interessant de regarder du côté des capteurs à effet hall, plus sensible donc tu pourras le mettre plus haut par rapport au sol, donc mieux intégré à la moto

Salut.

Oui en effet, ca me botte bien. j'ai un capteur Hall qui m'interesse.
Mais déjà je vais essayer avec mon capteur fait maison. un de chez conrad. et j'ai commander une petit module Magnetic sensor voir ce que cela donne.

----- edit ----

bon voila ou j'en suis.
j'ai le code pour initialiser l'ecran.
la constante pour le bouton,

// library
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); // adresse lcd
int Capteur = 2;   // pushbutton connected to digital pin 2
void setup()
{
   lcd.init();                      // initialize the lcd 
   lcd.backlight();
   pinMode(Capteur, INPUT);      // sets the digital pin 2 as input
}

maintenant, je sais plus faire - comment afficher un chrono "minute:seconde:dix cent et millieme" à 0.
et le start/stop via le bouton.

je sais pas si je suis vraiment clair. mais je n'avance plus. lol
et là je sais plus faire. :roll_eyes:

----edit 2 -----

bon alors - j'ai crée une constante

int etatCapteur;                    // variable de lecture de l'état du bouton.

Mais ensuite ??!! je me suis lancer la dedans.

 void loop()
{
    etatCapteur = digitalRead(capteur); // lit l'état du bouton-poussoir

  // teste si le bouton-poussoir est enfoncé    
   if (etatCapteur == HIGH) {     
        
    [b]lancer le chrono ?![/b]
  } 
    
}

Artouste:
question et reflexion perso sur le dispositif d'affichage "en course" , un LCD c'est suffisamment lisible quelque soit les conditions d'eclairage naturel/incident ?
intuitivement je serais plus parti sur de l'affichage numerique led

un lcd comme tu dois voir courament, non.
il faut prendre un grande taille, genre 1601L d'analog vision.
mais sur circuit, tu ne regarde que la piste, sinon t'es au tas.

accessoirement tu peut rajouter une oreillette que tu ferai bipper si tu rallonge ou augment ton temps.

il y a plusieurs passages ILS par boucle. tu pourra stocker chaque config de circuit en E2Prom, genre
piste 1:
L1=300m
L2=500m
L3=750m
L4=1200m
L5=1500m
piste 1:
L1=220m
L2=410m
L3=650m
L4=1200m
L5=0m (pas present)
piste 1:
ect...

les capteurs ILS fonctionnent tres bien, surtout quand t'en mets 4 en //
ils finissent quand meme par griller, plus par les vibrations et l'intensité du champ magnétique par rapport a un usage "normal" (ie: fdc de verin, par exemple).

Salut.

Merci pour ta réponse !

tu utilise ce système ??!

C'est vrai que je n'ai pas réfléchie mais je compte pas regarder l'écran.
mais disons que c'est pour au stand, y peux jeter un œil.

je ne ferais peut être pas le bip (pas fan de l'oreillette) mais un systeme led vert ou rouge!!! yes soit par rapport au dernier temps, soit au meilleur ?! mais pour le futur tout cela.

Je n'arrive pas à faire le chrono simple, avec départ depuis le bouton :confused:

il y a plusieurs passages ILS par boucle. tu pourra stocker chaque config de circuit en E2Prom, genre
piste 1:
L1=300m
L2=500m
L3=750m
L4=1200m
L5=1500m
piste 1:
L1=220m
L2=410m
L3=650m
L4=1200m
L5=0m (pas present)
piste 1:
ect...

Ahhh d'accord. Une boucle, ce n'est pas un simple passage sur une "ligne magnétique"

j'ai trouvais peut d'information.
juste que les circuits sont équipés de 1, 2 ou 3 boucles.

Pour les capteurs j'imagine bien, mais si ils permettent de déclencher quelques chronos. c'est top!

un manuel alfano, histoire de savoir ce qu'on en attend:
https://www.google.com/url?q=http://alfano.com/index.php%3Foption%3Dcom_filecabinet%26task%3Ddownload%26cid%255B0%255D%3D168%26lang%3Dfr&sa=U&ei=hJIeVO3vNKne7AbmtoH4Cg&ved=0CAoQFjAF&client=internal-uds-cse&usg=AFQjCNHFQ5NbNBV2mWDN2Hn0nluZvr2PTQ

demande a
alexof92, bob90, slot...
sur le site adresse
http://www.cliors-concept.com/t52153-Alfano-avec-un-Arduino-Ecran-TFT.htm
le download a
https://www.sendspace.com/file/cjfv5m

c'est rare de voir des montage de ce genre sur ces sites. d'habitude on est plutot bourrin.
c'est tres bien détaillé... sauf pour le branchement du capteur, c'est pas clair, faut lire le code, apriori sur pin6.
le code est un peu brouillon, mais y'a du boulot, c'est pas mal.
ca ne marche pas par interruptions,
ce qui laisse entendre que la boucle loop est assez courte pour voir le capteur, surtout qu'il est avec un condo de filtrage.
je rajouterai quand meme quelque sécurités dessus, genre zener 5v1.

et non, je n'utilise pas d'alfano, j'en ai pas besoin: j'suis toujours devant ]:smiley:

Salut,

Merci beaucoup!

Pas mal sur l'alfano. tu peux faire un départ sur la deuxieme boucle ..

j'avais déjà vu se post! j'avais oublier pour le prog. je vais regarder ca!!
merci pour les contacts :wink:

--------edit -------

le programme est bien trop compliquer pour moi ^^.
j'ai voulu essayer de le modifier pour essayer sur mon écran. mais bon il est petit et rien a voir avec TFT ..

tata ra ta ta.
si je te disais: c'est trop difficile de descendre à 1'02", tu ferai quoi? t'essairai pas d'y aller?

non, le program est pas trop compliqué. et si tu voulais "juste" faire la meme chose, t'as meme pas a le modifier, t'as juste a recopier.

c'est vrai qu'il est long, mal structuré, et tout un tas d'autre defauts que je suis le 1er a faire, mais y'a rien de compliqué dans ce qu'il a fait.

commence deja par faire sauter tout ce qui concerne le lcd et l'eeprom,
renvoi les infos de debug sur la liaison serie, et t'occupe meme pas de ton ecran.
juste 3 boutons et ton capteur ILS.

tu verra qu'il reste plus grand chose.

--EDIT--:
peu de commentaire,
mauvaise indentation,
duplication de code,
aucune subroutine,
1 seul fichier de 2164 ligne.

une fois l'afficheur supprimé il reste moins de 800 lignes. et sur ces 800 lignes, y'a encore pas mal de mise en forme juste pour l'afficheur. son traitement en ascii ne rend pas son code clair.

c'est vrai qu'il vaudrai mieu partir de zero pour ce que ca fait.
c'est vrai aussi que son truc tape a l'oeil grace a l'ecran lcd.

Mdrrr. si bien sur, mais disons que pour le moment je suis plus à 1'22".
je me permettrai pas de tenter la 1' tout de suite. ^^

Non il est super le programme. mais c'est que je ne suis pas de ce niveau.
beaucoup trop de commande que je n'ai jamais vu. mais c'est très intéressant.
mais je pense pas pouvoir faire un portage juste en modifiant l'affichage. ( je sais juste afficher un hello world et un chrono qui se lance au démarrage du programme)

par contre je vais essayer de piocher des fonctions dedans.

le 18 sept tu ecrivais

NickoR:
Petite question au passage, :zipper_mouth_face:
j'ai un écran 2line 16char me semble-t-il.
avec une interface IIC - je dois me brancher sur les 4 sortie GND-VCC-SDA-SCL

ou sur les sorties de base :

Connecter broche RS du LCD sur la broche 2
Connecter broche E du LCD sur la broche 3
Connecter broche D4 du LCD sur la broche 4
Connecter broche D5 du LCD sur la broche 5
Connecter broche D6 du LCD sur la broche 6
Connecter broche D7 du LCD sur la broche 7
???

le meme jour tu trouvais ta solution et tu passais deja au probleme du top chrono

t'as parfaitement le nivau.
t'as juste a t'y mettre.

mdr c'est gentil. mais ce n'était pas aussi compliquer.

je vois partout, que de faire un chronomètre n'est pas compliquer! mais je trouve que dall.

Je vais aller manger,
et peut être m'arrêter pour auj. car la je sèche.
reprendre demain au calme

commence par decortiquer les exemple fourni dans l'ide.
le binlk without delay etait un bon depart.

essaye ceci:

const int ILSPin =  2;
int catchILS = LOW;
long previousMillis = millis();
long currentMillis = millis();
long interval = 0;

long tempCalc = 0;

int minute = 0;
int seconde = 0;
int dixieme = 0;

void setup() {

  pinMode(ILSPin, INPUT);     
  digitalWrite(ILSPin, HIGH);       // turn on pullup resistors

  Serial.begin(9600);

    currentMillis = millis();
    interval = currentMillis - previousMillis;
    previousMillis = currentMillis;   

    Serial.print("1st top at : ");
    Serial.println(currentMillis);

}

void loop()
{
 
  catchILS = digitalRead(ILSPin);
  if (catchILS == LOW){

    currentMillis = millis();
    interval = currentMillis - previousMillis;
    previousMillis = currentMillis;   

    Serial.print("top interval: ");
    Serial.print(interval);


    Serial.print(" min/sec/dix: ");

    minute = int(interval/1000); //en seconde
    minute = int(minute/60); //en minute

    tempCalc = interval - (minute*60000); // en millier de secondes
    seconde = int(tempCalc/1000); // en millier de secondes

    tempCalc = interval - (minute*60000);
    tempCalc = tempCalc - (seconde*1000);    
    dixieme = int(tempCalc/10);

    Serial.print(minute);
    Serial.print("'");
    Serial.print(seconde);
    Serial.print("\"");
    Serial.print(dixieme);
    Serial.println("\"\"");

    delay(2000); //delai mini de reenclanchement
  }

}

Super, je vais regarder ca.

Juste avant manger,
j'ai trouver les millièmes secondes. mais c'est toujours un chrono qui se lance au lancement du prog.

j'ai fais ca en 5 minutes, et y'a certainement a ameliorer.

si deja t'as trouver comment mettre les centiemes et les milliemes (limite de la fonction millis()), tu vas pas me dire que de declencher et arreter le chrono va te poser probleme?

tu dois utiliser une entree supplementaire comme bouton Start/Stop.
tu dois avoir une variable qui t'indique si ton chrono est démarré ou pas.

tu dois capturer les temps dans un tableau et definir sa taille max.
tu dois egalement definir le nombre de sessions max.
si t'as 20minutes entre chaques session, sur une journée de roulage, tu devrai faire en gros 10 sessions le matin, et 10 session l'apres midi.
disons que tu as 5 boucles ILS par circuit, et que tu fais 10 tours par sessions ton tableau sera de:
20 sessions de 10 tours par 5 ILS = 1000 data.

la taille max de l'eeprom depend de ta cible, et ca tombe bien, t'as 1024 octets sur un 328 (UNO).
tes variables sont des int, mais tu peut n'en stocker que le poids faible.
tu pourrai egalement stoquer la valeur de millis(4 octets) directement ou simplifier interval (3, voir 2 octects si on suppose que tu sera forcement en dessous de 65"535 par top ILS).

si tu stock la valeur de millis directement, tu pourra identifier les sessions par un ecart important dans les enregistrements.
ton tableau sera plus dynamique, mais c'est un peu plus compliqué. oubli pour l'instant, tu verra a l'usage.

tu dois utiliser une entree comme bouton RAZ de la session en cours. temporisé à 1sec, pour éviter le "zut, j'voulais pas faire ca".
tu dois utiliser une entree comme bouton INC de l'index de la session en cours. a interdire si la variable start/stop indique que le chrono est déclenché.

la session en cours doit etre en RAM, l'eeprom ayant une certaine durée de vie, tu dois utiliser une entree encore comme bouton MEM, pour stoquer la session en EEprom, vu que tu coupera le jus pour rentrer chez toi.

tu pourra gerer par la liaison serie une commande download, pour recupere ces temps sur un pc.

voila pour le cahier des charges minimal.
maintenant, je suppose que tu voudra egalement consulter les temps directement sur l'ecran.
t'y met pas tout de suite. quand t'en sera la, t'aura plus besoin d'aide.

... maintenant, si t'arrive jamais la... je m'y colle, et toi tu descend a 1"02... mais tu sera quand meme derriere moi...

Merci pour tout jean-I. :blush:

Vraiment top, je t'avouerai y a quelques trucs que je connais pas encore.
exem. pour le stockage ram/eeprom. je ne me suis pas encore pencher sur ce domaine.

je vais me pencher sur les entrées et variables du prog.

Quand, j'en serais là, si j'ai un manque de mémoire, je peux soulager par une carte sd ?!
mais ca c'est encore pour plus tard ^^

essaie les examples fournis dans l'IDE, un par un, pour les fonctions que t'as besoin, comme l'EEprom.

quand t'aura bien saisi, tu n'auras plus qu'a assembler des briques de code.

oui, tu peut stocker sur SD, mais t'en es pas encore la.

j'avais un gps avec carte SD fixé au support reservoir liquide de frein.
la carte SD se retirai a cause des vibrations.
le tout a volé en éclat parce que j'... hem... non... pas de mauvais exemple...
enfin pour te dire que tu dois egalement penser a la mise en boite, passage electrique, ect...

Salut salut.

Bon ca ne va pas!! mon chrono n'est pas bon, je sais pas dans quel espace temps il est.
mais ce n'est pas le même que sur terre. Soit il va trop vite, soit à la bourre.

je n'arrive pas à faire avec millis =>0'0"000 - j'ai essayer millis () /10 /100 ou /1000. ce qui doit entrainer les décalages ?!

Auriez vous une petite astuce pour que millis() se lance au bouton, et non au lancement du programme ??!!
il se moque de moi j'en ai marre ^^

NickoR:
Salut salut.

Bon ca ne va pas!! mon chrono n'est pas bon, je sais pas dans quel espace temps il est.
mais ce n'est pas le même que sur terre. Soit il va trop vite, soit à la bourre.

je n'arrive pas à faire avec millis =>0'0"000 - j'ai essayer millis () /10 /100 ou /1000. ce qui doit entrainer les décalages ?!

Auriez vous une petite astuce pour que millis() se lance au bouton, et non au lancement du programme ??!!
il se moque de moi j'en ai marre ^^

bonjour

avec ton code , ce serait surement mieux :grin:

pour le confort de tous , le code entre balises # 8)

t'es parti de mon code, je suppose.

commence par rajouter quelque chose comme

const int StartPin =  3;
const int StopPin =  4;
boolean chronoRun = false;

puis dans loop

  if (digitalRead(StartPin)==LOW){
    if(chronoRun == false){ // reset des temps
      currentMillis = millis();
      previousMillis = currentMillis ;
    }
    chronoRun = true ;
  }
  if (digitalRead(StopPin)==LOW){
    chronoRun = false ;
  }
...
  if ((catchILS == LOW) && (chronoRun == true)) {
...

c'est presque tout, ca depend de ce que tu veux apres.