Go Down

Topic: Téléversement (Read 691 times) previous topic - next topic

Loulou17700

Bonjour tout le monde
Si ont pouvait revenir sur le code j'aimerais savoir quels modifications apporter pour utiliser uniquement les pins D2 à D11 de l'Arduino NANO.
Code: [Select]

// Générateur de signaux binaires pseudo-bruit
// PRBS 14 bits avec registre à décalage
// Sapin-LED

// Tous les bits numériques en sortie
void setup()
{
  for (short i=0; i<=13; i++)
    pinMode(i, OUTPUT);
}

void byte_output(word w)
{
  for (short i=0; i<=13; i++) {
    if (w & bit(i))
      digitalWrite(i,LOW);
    else  digitalWrite(i,HIGH);
  }
}

void loop()
{
  word state=1;
  while(true) {
    byte_output(state);
    // Opération Shift et XOR avec les bits 14, 13, 12, 2
    state=(state<<1 | (((state>>13)&1) ^ ((state>>12)&1) ^ ((state>>11)&1) ^ ((state>>1)&1)) );
    delay(100);
  }
  }

J'ai réussi a comprendre qu'il y a des boucles et des formules mathématiques, mais pour l'adressage c'est toujours aussi confus.
Si vous pouviez m'expliquer le fonctionnement du code ou de rajouter des lignes de commentaires dans le code cela pourra m'aider à comprendre qui fait quoi.
Pour info, dans une autre vie j'ai fait un peut de basic sur Amstrad, je retrouve certain mots comme les boucles (if, for, else, next)
D'avance Merci
@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

Avant d'essayer de comprendre le code, il est bon que l'on nous dise ce qu'il est censé faire. Ce programme fait un chenillard aléatoire.

Si on regarde la formule mathématique
Code: [Select]
    state=(state<<1 | (((state>>13)&1) ^ ((state>>12)&1) ^ ((state>>11)&1) ^ ((state>>1)&1)) ); on peut voir qu'il y a deux parties dans le calcul
Code: [Select]
state<<1
(((state>>13)&1) ^ ((state>>12)&1) ^ ((state>>11)&1) ^ ((state>>1)&1))

La première décale les bits vers la gauche, c'est le chenillard (chaque bit correspond à une led)
La deuxième ne peut donner que 1 ou 0, (c'est pseudo aléatoire)

Un chenillard est intéressant si on met les leds dans le bon ordre, mais pour le sapin, elles sont en vrac, je n'en vois pas l'intérêt.

Il y a déjà un générateur aléatoire dans le langage qui est capable de fournir un 0 ou un 1 c'est random(2). Il y a dans le programme une boucle while infinie dans loop. Mais loop est déjà une boucle while infinie.


On dirait que celui qui a écrit ce code ne savait pas qu'il y avait un générateur aléatoire et ne savait pas utiliser loop. Maintenant, fort de ça, on peut utiliser ce programme comme base et en le simplifiant

Si on veut un chenillard compréhensible, on peut utiliser la formule
Code: [Select]
state = state<<1 | random(2)
Si on n'a pas besoin d'un chenillard, on peut utiliser simplement
Code: [Select]
state = random(0x7FFFFFFF);
Ou encore
Code: [Select]
state = random();
Notes:
- le paramètre passé pour random est un long signé. Sa valeur maxi est 0x7FFFFFFF
- la deuxième écriture permet d'avoir un pseudo aléatoire 16 bits;

On peut supprimer le while dans loop. Le programme devient
Code: [Select]
// Sapin-LED

// Tous les bits numériques en sortie
void setup()
{
  for (byte pin=0; pin<=13; pin++) // Mettre les pins en sortie
    pinMode(pin, OUTPUT);
}

// envoie le nombre w sur les sorties
void byte_output(word w)
{
  for (byte pin=0; pin<=13; pin++) {
    if (w & bit(pin))
      digitalWrite(pin,LOW);
    else  digitalWrite(pin,HIGH);
  }
}

word state; // Etat des sorties calculé, un bit par sortie

void loop()
{
    byte_output(state); // Changer les sorties
    state=random(); // Nouvel état
    delay(100);
}


Maintenant, dans le programme, il y a deux boucles for:
Code: [Select]
for (byte pin=0; pin<=13; pin++)
qui indique que l'on va de la pin 0 à la pin 13. Si on veut aller de la 2 à la 15, on fait:
Code: [Select]
for (byte pin=2; pin<=15; pin++)

Le code est simple (on peut encore le réduire, mais il devient peut être moins compréhensible), et si tu as du mal avec ce code, il serait bon de suivre un tuto sur le C et sur Arduino.

Loulou17700

Bonjour tout le monde
@ Vileroi
Oui effectivement le code c'est un chenillard que j'ai récupéré sur le site "Tinkercad" car je suis bien incapable d'écrire un tel code...

Sur le simulateur du site "Tinkercad" la séquence m'a semblé intéressante d'où l'idée du sapin.

Le code était prévu pour une UNO mais comme la NANO est sensiblement identique je l'ai chargé sur la NANO.

Le code tel qu'il est écrit utilise les pins D0 à D13, suite au problème rencontré avec le téléversement sur la NANO (D0, D1) j'ai modifié le schéma du sapin pour n'utiliser que les pins (D2 à D11).

Les deux images suivantes donne la distribution et l'implantation des LEDs sur le sapin.




L'effet recherché avec le code c'est que plusieurs LEDs s'allument en même temps et de façon aléatoire un peut comme une guirlande dans un sapin...

Question est ce qu'il existe un tableau avec les mots clef et leurs explications pour le langage C de l'Arduino?
Si oui où le trouver?
 
Merci pour tes explications et proposition de modifications, j'ai bien trouvé de la documentation sur le C mais c'est pas évident à comprendre, de plus j'ai toujours l'impression de rester sur ma faim car les sujets traite de généralités, de plus je suis un peut isolé dans ma campagne, j'aimerais bien trouvé un club près de chez moi pour échanger des idées, le seul lien que j'ai c'est ce forum pour essayer de progresser et a mon age c'est pas évident.
Encore merci pour votre patience.
@++

L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

Loulou17700

Je viens de relire le code tel que tu l'a écrit effectivement il est beaucoup plus simple a comprendre même si j'ai toujours qq lacunes.
J'ai donc modifié l'adresse des pins en D2 et D11, en suite j'ai téléversé le code dans le simulateur de Tinkercad le rendu correspond parfaitement à ce que j'attendais.
C'est super!
Encore Merci.
@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

al1fch

Bonsoir

Quote
Question est ce qu'il existe un tableau avec les mots clef et leurs explications pour le langage C de l'Arduino?
Si oui où le trouver?
.... sur le site Arduino !!
https://www.arduino.cc/reference/fr/


Quote
.... sur le site Arduino !!
https://www.arduino.cc/reference/fr/
Quand on est dans l'IDE, onglet Aide, puis référence. C'est quasiment la même page, sauf:
- qu'elle est en anglais
- qu'elle est en locale et c'est meilleur pour la planète (encore que le forum n'est pas bon pour cette dite planète!)

Loulou17700

Merci les amis
 J'ai vu le lien que vous proposez la première page et en français mais les explications sont en anglais donc il faut jouer avec "Google Traduction" enfin c'est mieux que rien...
Si non j'ai trouvé ce site  qui me semble pas mal il est en français avec un exemple pour chaque fonction .
@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

68tjs

#52
Jan 25, 2021, 12:59 pm Last Edit: Jan 25, 2021, 01:00 pm by 68tjs
Quote
Si non j'ai trouvé ce site  qui me semble pas mal il est en français avec un exemple pour chaque fonction .
C'est exactement ce que l'on demande de lire dans le message "Règles du forum francophone"

Pour quelle raison nous n'arrêtons pas de dire :  TUTO D'ESKIMON  TUTO D'ESKIMON TUTO D'ESKIMON TUTO D'ESKIMON.
C'est ce qu'il se fait de mieux en français !

Ça sert à quoi qu'on se décarcasse à donner des conseils si les messages ne sont pas lus.
Ceux qui savent qu'ils ne savent rien en connaisse autant que ceux qui croient tout savoir et qui n'en connaissent pas plus qu'eux.
Pierre DAC.

Loulou17700

C'est exactement ce que l'on demande de lire dans le message "Règles du forum francophone"

Pour quelle raison nous n'arrêtons pas de dire :  TUTO D'ESKIMON  TUTO D'ESKIMON TUTO D'ESKIMON TUTO D'ESKIMON.
C'est ce qu'il se fait de mieux en français !

Ça sert à quoi qu'on se décarcasse à donner des conseils si les messages ne sont pas lus.

Qu'un seul mot Mea culpa, Mea culpa, Mea culpa :smiley-confuse:
Je viens de télécharger le PDF (639 pages) je vais le garder comme Bible voir même livre de chevet.
Vraiment super!!!
@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

Go Up