Question code tuto eskimon

Bonjour a tous,

Alors voila, il y a quelque temps j’ai commencé a m’intéresse a l’arduino et j’ai donc fait comme tout le monde, j’ai commencé a lire le tuto eskimon en parallèle avec quelque tuto sur youtube. Mais il y a quelque chose que je comprend pas dans le tuto d’eskimon et qui reviens plusieurs fois. Ce problème a avoir avec une (ou deux plutôt) ligne de code qui reviens et qui n’a pas de réelle explication. Donc mon problème c’est:

void loop() // fonction principale
{
    // boucle qui permet de compter de 0 à 99 (= 100 valeurs)
    for(char i = 0; i<100; i++)
    {
        // appel de la fonction affichage avec envoi du nombre à afficher
        afficher_nombre(i);
    }
}

// fonction permettant d'afficher un nombre sur deux afficheurs
void afficher_nombre(char nombre)
{
    long temps; // variable utilisée pour savoir le temps écoulé...
    char unite = 0, dizaine = 0; // variable pour chaque afficheur

    if(nombre > 9) // si le nombre reçu dépasse 9
    {
        dizaine = nombre / 10; // on récupère les dizaines
    }

    unite = nombre - (dizaine*10); // on récupère les unités

    temps = millis(); // on récupère le temps courant

    // tant qu'on a pas affiché ce chiffre pendant au moins 500 millisecondes
    // permet donc de pouvoir lire le nombre affiché
    while((millis()-temps) < 500)
    {
        // on affiche le nombre

        // d'abord les dizaines pendant 10 ms

        // le transistor de l'afficheur des dizaines est saturé,
        // donc l'afficheur est allumé
        digitalWrite(alim_dizaine, HIGH);
        // on appel la fonction qui permet d'afficher le chiffre dizaine
        afficher(dizaine);
        // l'autre transistor est bloqué et l'afficheur éteint
        digitalWrite(alim_unite, LOW);
        delay(10);

        // puis les unités pendant 10 ms

        // on éteint le transistor allumé
        digitalWrite(alim_dizaine, LOW);
        // on appel la fonction qui permet d'afficher le chiffre unité
        afficher(unite);
        // et on allume l'autre
        digitalWrite(alim_unite, HIGH);
        delay(10);
    }

J’ai recopié pratiquement tout le code d’eskimon même si c’était inutile mais c’était pour vous situer. C’est le code qui explique comment conter avec 2 afficheur. Mon problème se situe avec la ligne d’appel afficher_nombre(i) et son correspondant afficher_nombre(char nombre). Je me demande si la varaible “nombre” prend la valeur de “i” ? Dans ce cas la ça me parait logique, mais juste après, dans un autre code, il fait ça:

bool afficheur = false; // variable pour le choix de l'afficheur

// --- setup() ---

void loop()
{
    // gestion du rafraichissement
    // si ça fait plus de 10 ms qu'on affiche,
    // on change de 7 segments (alternance unité <-> dizaine)
    if((millis() - temps) > 10)
    {
        // on inverse la valeur de "afficheur"
        // pour changer d'afficheur (unité ou dizaine)
        afficheur = !afficheur;
        // on affiche la valeur sur l'afficheur
        // afficheur : true->dizaines, false->unités
        afficher_nombre(valeur, afficheur);
        temps = millis(); // on met à jour le temps
    }

    // ici, on peut traiter les évènements (bouton...)
}

// fonction permettant d'afficher un nombre
// elle affiche soit les dizaines soit les unités
void afficher_nombre(char nombre, bool afficheur)
{
    char unite = 0, dizaine = 0;
    if(nombre > 9)
        dizaine = nombre / 10; // on recupere les dizaines
    unite = nombre - (dizaine*10); // on recupere les unités

    // si "
    if(afficheur)
    {
        // on affiche les dizaines
        digitalWrite(alim_unite, LOW);
        afficher(dizaine);
        digitalWrite(alim_dizaine, HIGH);
    }
    else // égal à : else if(!afficheur)
    {
        // on affiche les unités
        digitalWrite(alim_dizaine, LOW);
        afficher(unite);
        digitalWrite(alim_unite, HIGH);
    }
}

// fonction écrivant sur un seul afficheur
void afficher(char chiffre)
{
    digitalWrite(bit_A, LOW);
    digitalWrite(bit_B, LOW);
    digitalWrite(bit_C, LOW);
    digitalWrite(bit_D, LOW);

    if(chiffre >= 8)
    {
        digitalWrite(bit_D, HIGH);
        chiffre = chiffre - 8;
    }
    if(chiffre >= 4)
    {
        digitalWrite(bit_C, HIGH);
        chiffre = chiffre - 4;
    }
    if(chiffre >= 2)
    {
        digitalWrite(bit_B, HIGH);
        chiffre = chiffre - 2;
    }
    if(chiffre >= 1)
    {
        digitalWrite(bit_A, HIGH);
        chiffre = chiffre - 1;
    }
}

La je comprend pas. Il met afficher_nombre(valeur, afficheur) et après il met afficher_nombre(char nombre, bool afficheur). La variable valeur( qui n’a pas été défini) prend la valeur de la variable nombre ? et la variable afficheur prend la variable de la nouvelle variable crée avec le même nom "afficheur ? Et plus tard il fait appel a afficher(unite) et afficher(dizaine), et dans ce cas, je suppose que “unite” et “dizaine” vont prendre la valeur de “chiffre” dans afficher(char chiffre) ? Mais chiffre correspond a quoi ? Il est défini nul part ailleurs… On le crée, on lui donne aucune valeur et juste après on fait des conditions pour savoir si il est supérieur ou égale a 8, supérieur ou égale a 4, ect…

Un peu d’aide serait la bienvenue, j’ai arrêté de lire le tuto car je veux pas que les doutes que j’ai ici m’embrouille pour le reste. Je me suis arrete au TP parking que j’essaye de faire en ce moment, mais je sens bien que si je comprend pas ça, j’y arriverais surement pas. Merci d’avance pour toute aide.

Terickz: // appel de la fonction affichage avec envoi du nombre à afficher afficher_nombre(i); (...)

Je me demande si la varaible "nombre" prend la valeur de "i" ?

Il n'y a pas de [u]variable[/u] "nombre" , ici c'est une [u]fonction[/u] qui s'appelle "afficher_nombre" et on lui passe en argument la valeur variable i qui sera affichée.

Je parlais de la variable "nombre" dans afficher_nombre(char [u]nombre[/u])

Terickz: Et plus tard il fait appel a afficher(unite) et afficher(dizaine), et dans ce cas, je suppose que "unite" et "dizaine" vont prendre la valeur de "chiffre" dans afficher(char chiffre) ? Mais chiffre correspond a quoi ? Il est défini nul part ailleurs... On le crée, on lui donne aucune valeur et juste après on fait des conditions pour savoir si il est supérieur ou égale a 8, supérieur ou égale a 4, ect...

C'est bien comme ça qu'il faut comprendre,"chiffre" est un paramètre de fonction, lors de chaque appel de la fonction "afficher()" ce paramètre possède une valeur bien précise et on utilise cette valeur dans la fonction pour les tests.

La lecture de cette partie du tuto peut t'aider à comprendre comment marche un fonction http://eskimon.fr/86-arduino-106-le-langage-arduino-22#461108

Je crois que je viens de comprendre. Merci pour ton aide.