Question:
Mon code semble être une épave de train
pvGuy
2019-11-29 13:18:12 UTC
view on stackexchange narkive permalink

Je suis nouveau dans la programmation et je pensais qu'un projet simple à faire serait de créer un compteur de munitions. Je dépanne ce code depuis plusieurs heures maintenant, et je n'arrive pas à comprendre pourquoi mon code est criblé d'erreurs. Voici mon programme. S'il vous plaît, jetez-y un coup d'œil et faites-moi savoir quelle erreur j'ai commise. Je publierai le rapport d'erreur sous mon programme. Je m'excuse pour ma mauvaise programmation à l'avance et j'espère qu'il y a encore de l'espoir pour moi avec la tutelle appropriée. Le programme a très bien fonctionné lorsque j'ai exécuté un test en utilisant une seule fonction enregistrée, "vingtBullets ()". Après avoir ajouté 30 fonctions supplémentaires et créé une chaîne de conditions if-else-if, le programme a commencé à signaler toutes sortes d'erreurs.

  / * CODE DE MANIPULATION D'AFFICHAGE 7 SEGMENTS! Le code ci-dessous gère l'affichage à 7 segments pour le compteur de munitions numérique. A ___ F | | B G --- G E | ___ | C D Ci-dessus se trouve l'affectation des lettres de l'alphabet pour les différents segments de l'affichage B07BMPPNQY. Le projet de compteur de munitions numérique utilisera des broches communes, L3 et L4. * / // Afficher la déclaration de broche. // P_: Où P indique la sortie de la broche pour le segment de l'affichage à éclairer suivi d'une lettre minuscule // qui indique la LED spécifique du segment à éclairer. // dix: où dix indique la place des dix sur l'affichage à 7 segments. // one: Où on indique la place du un sur l'affichage des 7 segments.int Pa = 0; int Pb = 1; int Pc = 2; int Pd = 3; int Pe = 4; int Pf = 5; int Pg = 6 ; int dix = 7; int one = 8; int ammo = 10; void setup () {// mettez votre code de configuration ici, à exécuter une fois: pinMode (Pa, OUTPUT); pinMode (Pb, OUTPUT); pinMode (Pc , OUTPUT); pinMode (Pd, OUTPUT); pinMode (Pe, OUTPUT); pinMode (Pf, OUTPUT); pinMode (Pg, OUTPUT); pinMode (dix, OUTPUT); pinMode (un, OUTPUT);} boucle vide ( ) {// mettez votre code principal ici, à exécuter à plusieurs reprises: if (ammo == 1) {oneBullet (); } else if (munitions == 2) {twoBullets (); } else if (munitions == 3) {threeBullets (); } else if (munitions == 4) {fourBullets (); }
else if (munitions == 5) {cinqBullets (); } else if (munitions == 6) {sixBullets (); } else if (munitions == 7) {sevenBullets (); } else if (munitions == 8) {huitBullets (); } else if (munitions == 9) {nineBullets (); } else if (munitions == 10) {tenBullets (); } else if (munitions == 11) {onzeBullets (); } else if (munitions == 12) {douzeBullets (); } else if (munitions == 13) {thirteenBullets (); } else if (munitions == 14) {quatorzeBullets (); } else if (munitions == 15) {quinzeBullets (); } else if (munitions == 16) {seizeBullets (); } else if (munitions == 17) {seventeenBullets (); } else if (munitions == 18) {eighteenBullets (); } else if (munitions == 19) {nineteenBullets (); } else if (munitions == 20) {vingtBullets (); } else if (munitions == 21) {vingtoneBullets (); } else if (munitions == 22) {vingt-deuxBullets (); } else if (munitions == 23) {twentythreeBullets (); } else if (munitions == 24) {vingt-quatre balles (); } else if (munitions == 25) {vingt-cinqBullets (); } else if (munitions == 26) {twentysixBullets (); } else if (munitions == 27) {vingtsevenBullets (); } else if (munitions == 28) {twentyeightBullets (); } else if (munitions == 29) {twentynineBullets (); } else if (munitions == 30) {trenteBullets (); } else {zeroBullets (); }} void zeroBullets () // 0 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void oneBullet () // 1 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH);
DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void twoBullets () // 2 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void threeBullets () // 6 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void fourBullets () // 4 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void fiveBullets () // 5 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, HIGH); DigitalWrite (Pc, LOW);
DigitalWrite (Pd, LOW); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void sixBullets () // 6 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, HIGH); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void sevenBullets () // 7 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void huitBullets () // 8 {digitalWrite (un, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void nineBullets () // 9 {digitalWrite (one, LOW); digitalWrite (dix, HIGH);
DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); retard (10); // 0 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); delay (10);} void tenBullets () // 0 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void onzeBullets () // 1 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void douzeBullets () // 2 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); retard (10);}
void thirteenBullets () // 3 {digitalWrite (one, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void quatorzeBullets () // 4 {digitalWrite (one, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void fifteenBullets () // 5 {digitalWrite (one, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, HIGH); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void sixteenBullets () // 6 {digitalWrite (one, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, HIGH); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH);
digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void dix-septBullets () // 7 {digitalWrite (one, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void dix-huitBullets () // 8 {digitalWrite (one, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void nineteenBullets () // 9 {digitalWrite (one, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 1 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); delay (10);} void vingtBullets () // 0 {digitalWrite (un, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE);
DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void vingtoneBullets () // 1 {digitalWrite (un, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void vingt-deuxBullets () // 2 {digitalWrite (un, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void twentythreeBullets () // 3 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void vingt-quatreBullets () // 4 {digitalWrite (un, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, HIGH); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 2
digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void vingt-cinqBullets () // 5 {digitalWrite (un, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, HIGH); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void twentysixBullets () // 6 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, HIGH); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void vingtsevenBullets () // 7 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, HIGH); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void twentyeightBullets () // 8 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW);
DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void twentynineBullets () // 9 {digitalWrite (one, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, HIGH); digitalWrite (Pe, HIGH); DigitalWrite (Pf, LOW); DigitalWrite (Pg, LOW); retard (10); // 2 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, HIGH); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);} void trenteBullets () // 0 digitalWrite (un, LOW); digitalWrite (dix, HIGH); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, LOW); DigitalWrite (Pf, LOW); DigitalWrite (Pg, HIGH); retard (10); // 3 digitalWrite (un, HIGH); digitalWrite (dix, FAIBLE); DigitalWrite (Pa, FAIBLE); DigitalWrite (Pb, LOW); DigitalWrite (Pc, LOW); DigitalWrite (Pd, LOW); digitalWrite (Pe, HIGH); DigitalWrite (Pf, HIGH); DigitalWrite (Pg, LOW); delay (10);}  

LE RAPPORT D'ERREUR:

  Arduino: 1.8.10 (Windows 10), Carte: "Arduino / Genuino Uno" Digital_Ammo_Counter .ino: Dans la fonction 'void loop ()': sketch_Digital_Ammo_Counter: 138: 4: erreur: 'trenteBullets' n'a pas été déclaré dans cette portée trenteBullets (); ^ ~~~~~~~~~~~~ sketch_Digital_Ammo_Counter.ino: 138: 4: note: alternative suggérée: 'vingtBullets' trenteBullets (); ^ ~~~~~~~~~~~~ TwentyBulletssketch_Digital_Ammo_Counter.ino: À portée globale: sketch_Digital_Ammo_Counter: 898: 3: erreur: initialiseur attendu avant 'digitalWrite' digitalWrite (un, BAS); ^ ~~~~~~~~~~~
sketch_Digital_Ammo_Counter: 899: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (dix, HIGH); ^ sketch_Digital_Ammo_Counter: 900: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pa, LOW); ^ sketch_Digital_Ammo_Counter: 901: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pb, LOW); ^ sketch_Digital_Ammo_Counter: 902: 15: erreur: constructeur attendu, destructeur, ou conversion de type avant '(' token digitalWrite (Pc, LOW); ^ sketch_Digital_Ammo_Counter: 903: 15: erreur: constructeur attendu, destructeur, ou conversion de type avant '(' token digitalWrite (Pd, LOW); ^ sketch_Digital_Ammo_Counter: 904: 15 : erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pe, LOW); ^ sketch_Digital_Ammo_Counter: 905: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pf, LOW); ^ sketch_Digital_Ammo_Counter: 906: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pg, HIGH); ^ sketch_Digital_Ammo_Counter: 907: 8: erreur: constructeur attendu, destructeur ou conversion de type avant '(' délai de jeton (10); ^ sketch_Digital_Ammo_Counter: 910: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (one, HIGH); ^ sketch_Digital_Ammo_Counter: 911: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (dix, LOW); ^ sketch_Digital_Ammo_Counter: 912: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pa, LOW); ^ sketch_Digital_Ammo_Counter: 913: 15: erreur: constructeur, destructeur ou conversion de type attendu avant '(' token digitalWrite (Pb, LOW); ^
sketch_Digital_Ammo_Counter: 914: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pc, LOW); ^ sketch_Digital_Ammo_Counter: 915: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pd, LOW); ^ sketch_Digital_Ammo_Counter: 916: 15: erreur: constructeur attendu, destructeur ou conversion de type avant '(' token digitalWrite (Pe, HIGH); ^ sketch_Digital_Ammo_Counter: 917: 15: erreur: constructeur attendu, destructeur, ou type conversion avant '(' token digitalWrite (Pf, HIGH); ^ sketch_Digital_Ammo_Counter: 918: 15: erreur: constructeur attendu, destructeur, ou conversion de type avant '(' token digitalWrite (Pg, LOW); ^ sketch_Digital_Ammo_Counter: 919: 8 : erreur: constructeur attendu, destructeur ou conversion de type avant '(' token delay (10); ^ sketch_Digital_Ammo_Counter: 920: 1: error: déclaration attendue avant '}' token} ^ exit status 1'thi rtyBullets 'n'a pas été déclaré dans cette portée. Ce rapport contiendrait plus d'informations avec l'option "Afficher la sortie détaillée lors de la compilation" activée dans les préférences du fichier ->.  
La façon dont cela a été formaté a complètement foiré le copier / coller de mon programme et mon rapport d'erreur. Si vous souhaitez m'aider et avez besoin de voir quelque chose qui ressemble plus à mon programme réel et / ou à mon rapport d'erreur, je peux organiser l'envoi de l'un ou l'autre de ces documents.
upvote pour vérifier le format de votre code affiché ... tant de gens ne sermonnent tout simplement pas pour se soucier de savoir si le code est lisible ... mettez trois backticks '' dans une ligne au-dessus de votre code et trois backticks dans une ligne après votre code
vous pouvez également sélectionner tout le code et cliquer sur le bouton «{}»
J'ai formaté le code pour vous. +1 pour prendre soin
Merci beaucoup à tous! Je garderai à l'esprit les corrections de mise en forme à partir de maintenant et je vous remercie, gentille personne, d'avoir pris la liberté de formater mon code pour moi.
Ne vous sentez pas mal à propos de l'orthèse bouclée manquante. Cela fait que la plupart des compilateurs «perdent la raison», générant tout un tas de messages d'erreur très déroutants, et peuvent être très difficiles à retrouver. Je programme dans des langages de type C et C depuis plus de 30 ans, et ce problème exact me pique encore de temps en temps.
Haha merci! Ouais, je pense que nous sommes tous la proie d'un simple oubli de temps en temps. Avec plus d'expérience, je suis sûr que je serai en mesure de détecter plus rapidement des erreurs comme celle-ci. Je suis juste content que la communauté soit si bonne! Je dois dire que je ne m'attendais pas à tout le soutien que j'ai reçu! C'est fantastique et j'espère que moi aussi, je serai utile à la prochaine génération de passionnés d'électronique débutants.
Il est utile que vous fournissiez une description complète de votre problème. De nombreuses affiches de début postent des questions vagues "J'ai essayé ... mais ça ne marche pas", puis il faut un jeu épuisant de 20 questions pour comprendre ce que "ça ne marche pas" signifie réellement
Bien que je sache qu'une révision du code n'est pas ce qui est demandé, je vous exhorte fortement à reconsidérer votre approche ici. Copier / coller du code devrait être un signal d'alarme immédiat pour suggérer que vous devez aborder cela plus intelligemment. Une suggestion de base que vous pouvez aborder en tant que débutant serait une méthode qui imprime un chiffre donné (puis votre logique numérique devient une logique chiffre + chiffre). Si vous travaillez avec le code gonflé et augmenté que vous avez maintenant, tout changement ou bogue prendra beaucoup plus de temps qu'il ne le devrait. Que se passe-t-il si vous pouvez avoir jusqu'à 99 balles demain?
Voici quelques conseils que je donne à tous mes étudiants: les compilateurs compilent des programmes syntaxiquement corrects et détectent et signalent les erreurs de base, mais * ils sont inutiles pour tenir compte des erreurs qu'ils ont déjà vues. , peut souvent provoquer toute une cascade de messages d'erreur qui ne semblent pas liés à l'erreur d'origine. Corrigez la première erreur (ou 2, si vous remarquez que la 2d est réelle) et recompilez. Vous trouverez cette erreur avec "des tonnes de messages d'erreur" assez rapidement et vous gagnerez beaucoup de temps en essayant d'analyser les morceaux de code corrects suivants.
Le meilleur conseil que je puisse donner est, une fois que le code est compilé (et personnellement je ne tolère aucun avertissement, jamais), c'est d'apprendre à utiliser le débogueur. C'est votre meilleur ami dans le monde entier. Définissez des "points d'arrêt", exécutez votre code et il s'arrêtera lorsqu'il rencontrera un point d'arrêt, à quel point vous pourrez examiner la pile d'appels, lire et même modifier la valeur des variables, et plus encore. C'est de loin le meilleur moyen d'avoir un aperçu de ce que fait votre code.
Quatre réponses:
chrisl
2019-11-29 14:33:44 UTC
view on stackexchange narkive permalink

La cascade d'erreurs est causée par le crochet ouvrant manquant { au début de la fonction trenteBullets () . Cela provoque la non-déclaration du nom de la fonction et l'échec des appels de fonction suivants à digitalWrite () . Mettre dans cette parenthèse ouvrante manquante devrait corriger toutes les erreurs (bien que je ne puisse pas le tester car je n'ai pas de compilateur sous la main actuellement).

En plus de cela, votre code peut être raccourci avec un tour. Actuellement, vous utilisez une fonction pour chaque nombre, où vous écrivez les broches numériques correspondantes. La situation est donc que vous devez toujours écrire sur les mêmes broches, juste des valeurs différentes en fonction d'un simple nombre entier non signé. Je suggère donc que vous définissiez les modèles de broches pour les chiffres dans un tableau à 2 dimensions. Ensuite, vous ne pouvez utiliser qu'une seule fonction pour afficher l'une d'entre elles. Je vais vous donner un exemple:

  uint8_t led_pattern [10] [7] = {{0, 0, 0, 0, 0, 0, 1}, // modèle pour le chiffre 0 {1, 0, 0, 1, 1, 1, 1}, // modèle pour le chiffre 1 {0, 0, 1, 0, 0, 1, 0}, // modèle pour le chiffre 2 ... { 0, 0, 0, 0, 1, 0, 0}}; // modèle pour le chiffre 9void display_digit (position uint8_t, chiffre uint8_t) {digitalWrite (un, position); // Écrit low (aka zéro) sur la broche un, quand la position est zéro, sinon high digitalWrite (dix,! Position); // Écrit bas sur la broche dix, lorsque la position est supérieure à zéro, sinon haut pour (uint8_t i = 0; i<7; i ++) {digitalWrite (i, led_pattern [chiffre] [i]); } delay (10);} void display_number (uint8_t number) {display_digit (0, number% 10); display_digit (1, number / 10);} void loop () {display_number (munmo);}  

Alors, que se passe-t-il ici?

Nous définissons d'abord les modèles de LED dans un tableau à 2 dimensions. C'est le premier index est le chiffre que nous voulons afficher; son deuxième indice est le numéro de la LED à allumer. La valeur est alors l'état de la LED correspondante. J'ai écrit 1 et 0 , car il est court. Vous pouvez également écrire HIGH et LOW (car ils ne sont également définis que pour 1 et 0 ). Ainsi, le modèle {1, 0, 0, 1, 1, 1, 1} signifie que seuls les segments b et c sortent au niveau bas, donc sont activés.

Ensuite nous définissons une fonction pour afficher un chiffre. Il prend la position du chiffre et le chiffre réel (0 à 9) comme paramètres. Nous écrivons les deux sorties pour notre position directement avec la variable. C'est un moyen très court de le faire et cela ne fonctionne pas, lorsque vous avez plus de 2 chiffres. Si vous souhaitez étendre votre compteur un jour, vous pouvez remplacer ces 2 lignes par une construction différente (par exemple une instruction switch case). Ensuite, nous faisons une boucle for de 0 à 6, de sorte que nous parcourons tous les chiffres. Dans votre cas, vous utilisez les numéros de code PIN 0 à 6, nous pouvons donc utiliser directement i comme code PIN. (Si vous souhaitez utiliser d'autres broches, vous pouvez enregistrer ces broches dans un tableau et référencer les valeurs du tableau avec i ). À chaque itération de la boucle for, nous écrivons la valeur du chiffre et de la LED correspondants sur la broche de sortie correspondante. Après cela, nous ne retardons que quelques instants et quittons la fonction.

Pour vous faciliter la tâche, j'ai également défini la fonction display_number () , qui affichera le numéro complet, en affichant successivement ses chiffres sur les positions correspondantes. Si vous êtes un débutant, vous pourriez ne pas reconnaître quels calculs j'ai fait là-bas. L'opérateur modulo % renvoie le reste d'une division entière. Donc, si je prends 23% 10 , cela renverra 3 (la division entière 23/10 vaut 2 et le reste vaut 3). Cela nous donne le premier chiffre (le moins significatif). Nous pouvons alors obtenir le deuxième chiffre en faisant simplement une division entière avec 10, car cela coupera la partie après la virgule décimale. Si vous voulez afficher des nombres supérieurs à 99 un jour, vous devez changer les deux fonctions pour s'adapter à cela.

Notez que j'ai utilisé uint8_t comme type partout. Il s'agit simplement du plus petit type de nombre non signé (largeur 8 bits). J'ai utilisé le plus petit, car vous n'avez pas besoin de plus de nombres ici et cela économise un peu de mémoire. Lorsque vous souhaitez étendre votre affichage pour afficher des valeurs supérieures à 255, vous devez changer le type du paramètre number dans la fonction display_number () en un type supérieur, pour exemple unsigned int (qui fait 16 bits de large).

Notez également que je n'ai pas testé ce code, car je n'ai pas de compilateur ou d'Arduino à portée de main actuellement.


Alors maintenant, vous pouvez afficher un numéro sur votre chiffre avec un seul appel de fonction et vous n'avez pas besoin de près de 1000 lignes de code pour cela.

Lors de l'extension de votre code pour faire plus de choses, que d'afficher des nombres, vous pouvez facilement aller au point, où l'utilisation de delay () est une mauvaise chose, car l'Arduino ne peut rien faire d'autre pendant ce temps. Ensuite, vous devez réécrire votre code pour éviter delay () et utiliser la fonction millis () à la place pour le débloquer. Il existe des tonnes de tutoriels pour cela et je voulais juste le mentionner.

Grand Dieu! Je me donne des coups de pied dans le cul pour avoir oublié quelque chose d'aussi humble qu'un "{"! Cela m'a causé de grandes souffrances. Je m'incline devant vos connaissances Arduino et je vous remercie non seulement d'avoir trouvé l'erreur dans mon code, mais aussi de m'avoir montré une bien meilleure façon de gérer l'ensemble du processus! Vous avez mes plus sincères remerciements! Wow, je vais certainement approfondir les tutoriels sur Arduino! J'espère que je serai aussi bien informé que vous sur le sujet à un moment donné!
Merci, mais c'est assez élogieux. Nous avons tous commencé à ce moment-là. Tout dépend de l'expérience d'apprentissage. Vous pouvez accepter ma réponse comme correcte, si vous pensez qu'elle est correcte. Et peut-être que vous voulez revenir un jour et répondre vous-même à la question. Nous sommes toujours heureux de trouver de nouveaux contributeurs: D
Bravo, fournir à la fois la réponse étroitement ciblée ET des conseils sur l'utilisation des tableaux pour résoudre le problème plus élégamment. (voté.) Je suppose que nous n'essaierons pas de guider un débutant dans le décodage binaire en utilisant le masquage et le décalage de bits ...
* puisque je n'ai pas de compilateur sous la main actuellement) * Je suggère https://godbolt.org/, l'explorateur de compilateur de Matt Godbolt. Il a GCC, Clang, MSVC et ICC installés, y compris GCC pour ARM et pour AVR. Avec mise en surbrillance des couleurs pour faire correspondre les lignes source aux lignes de sortie asm. (Et des langages comme C, C ++, Rust, Go, Haskell, ...) Votre code compilé en C pour ARM cortex M3: https://godbolt.org/z/-K_muB
gnasher729
2019-12-02 05:30:18 UTC
view on stackexchange narkive permalink

Vous avez trouvé le bogue, mais comment auriez-vous pu le trouver plus facilement?

L'étape la plus importante mentalement est d'accepter que vous avez fait quelque chose de mal. Nous ne savons pas encore quoi, mais il est extrêmement improbable que le compilateur se plaint du code correct. La question est donc: qu'avez-vous fait de mal?

Le compilateur s'est plaint d'une fonction "trenteBullets". Il ne s'est pas plaint de "twentynineBullets". Il ne se rend pas compte qu'il existe une fonction "trenteBullets". La première chose à faire est de vérifier l'orthographe. Si vous avez nommé la fonction "thirrtyBullets" par erreur, cela expliquerait les choses. Mais le nom est juste.

Ensuite, vous voyez que le compilateur se plaint de la ligne immédiatement après le début de la fonction. Difficile de comprendre ce dont se plaint le compilateur, donc quelque chose que vous avez fait juste avant l'a confondu. Alors maintenant, vous vérifiez la ligne "void trenteBullets ()", c'est OK, la ligne suivante "digitalWrite (one, LOW);" semble ok mais quelque chose DOIT être erroné ici, et c'est là que vous trouverez, espérons-le, le "{" manquant.

Artelius
2019-12-02 16:47:29 UTC
view on stackexchange narkive permalink

Juste pour ajouter à l'idée d'utiliser un tableau - puisque C ne se soucie pas des espaces, vous pouvez assez facilement formater vos données comme ceci:

  uint8_t led_pattern [10] [7] = {{0, // modèle pour le chiffre 0 0, 0, 0, 0, 0, 0}, {0, // modèle pour le chiffre 1 0, 1, 0, 0, 1, 0}, {1, // modèle pour le chiffre 2 0, 1, 1, 1, 0, 1}, ...};  

Ceci est un exemple de la "bonne habitude" de créer votre code sur votre intention plutôt que sur instruire la machine. Vous pouvez passer 50% de temps en plus à clarifier votre code ou 500% de temps en plus à le déboguer. Comme le dit le dicton,

Il y a deux façons de développer un logiciel: Faites-le si simple qu'il n'y a évidemment pas de bogues, ou si complexe qu'il n'y a pas de bogues évidents.

Remarque: Le code ci-dessus vous donnera vos valeurs digitalOut dans un ordre différent de celui de vos broches (ainsi la boucle for de chrisl ne fonctionnera pas.) Vous pouvez il suffit de faire manuellement 7 digitalWrites sur les broches correctes lors de l'affichage du digit.

  digitalWrite (<pin number>, led_pattern [digit] [<led position>]);  
RDragonrydr
2020-06-18 21:07:41 UTC
view on stackexchange narkive permalink

Votre code n'est en fait pas mauvais. Il n'y a pas beaucoup de bonnes façons de faire ce type de mappage de broches, et les rares qui le sont ont également leurs propres inconvénients. Le problème principal était le crochet manquant, que j'ai trouvé en vérifiant la fonction drawThirty car il a été mentionné spécifiquement et avait des erreurs en cascade impliquant un point-virgule ou un crochet manqué.

Un autre ajustement est que votre code ne fonctionnera que sur Arduino (donc tout va bien, mais un IDE différent peut vous en vouloir). C ne recherche pas dans tout le fichier les noms de fonction, donc si vous déclarez / définissez la fonction après l'avoir utilisée, une erreur se produira. Arduino utilise un pré-analyseur spécial pour résoudre ce problème pour vous.

La bonne façon est de transmettre la fonction comme suit:

  int returnAPieceOfData (byte x, char c, int i); // Maintenant C sait qu'il existe quelque part et ne fera pas d'erreur.void foo () {// quelque part ici, vous avez besoin de returnAPieceOfData} int returnAPieceOfData (byte x, char c, int i) {// Vous définissez maintenant la fonction après son utilisation, mais sans erreur!}  

Cela aboutit généralement à un fichier C où toutes les fonctions sont déclarées en haut, puis les définitions de fonction ci-dessous peuvent utiliser dans n'importe quel ordre sans problèmes. Cela permet également de savoir plus facilement si le fichier a une fonction, et si vous les ajoutez dans le même ordre, où c'est.


Je mentionnerai une méthode potentiellement utile pour implémenter alternativement la table de recherche de tableau pour écrire les broches. Les suggestions ci-dessus sont de très bonnes suggestions, en particulier l'espace blanc formé, mais cette approche utilisera beaucoup de mémoire supplémentaire car elle utilise des octets complets par pixel.

Si vous êtes prêt à accepter un format un peu plus difficile à visualisez, vous pouvez encoder tout l'espace en un seul octet, que je montrerai ci-dessous. Vous pouvez également placer les numéros de broches dans un tableau afin que vous puissiez utiliser une boucle FOR.

Essentiellement, vous avez deux options pour écrire ce type de système. Vous pouvez opter pour la complexité du code, ce que votre exemple a fait, ou vous pouvez opter pour la complexité mémoire / données, que je montre ici. Les inconvénients de CETTE technique sont que les données sont quelque peu obscures et difficiles à modifier (car elles sont codées et il y en a beaucoup), et qu'elles utilisent de la mémoire supplémentaire pour contenir ces données.

  void drawAllSegments (octet ammo_ct) {octet hi = ammo_ct / 10; octet lo = ammo_ct% 10; drawLowSegments (lo); drawHighSegments (hi);} byte lpinNums [] = {apin, bpin, cpin, dpin, epin, fpin, gpin}; // broches pour 0s displaybyte hpinNums [] = {apin, bpin, cpin, dpin, epin, fpin, gpin}; // broches pour 10s displaybyte numbers [] = {0b00111111,0b01111001, ...}; // Formater les "nombres" comme 0bXGFEDCBA, où X est un indifférent // (sa valeur n'est jamais utilisée et peut être 0 ou 1) // Mon exemple est peut-être faux. Je pense que c'est une logique négative, mais cela aurait aussi pu faire une erreur en plus de cela.void drawLowSegments (byte ammo_ct) {digitalWrite (one, HIGH); // configurer l'affichage select digitalWrite (dix, LOW); for (byte i = 0; i<7; i ++) {// puis dessine! byte state = (numbers [ammo_ct] >>i) &0x01; // décompresse l'état de ce segment digitalWrite (lpinNums [i], state); }} void drawHighSegments (byte ammo_ct) {digitalWrite (one, HIGH); // configurer l'affichage select digitalWrite (dix, LOW); for (byte i = 0; i<7; i ++) {// puis dessine! byte state = (numbers [ammo_ct] >>i) &0x01; // décompresse l'état de ce segment digitalWrite (hpinNums [i], state); }}  

Les avantages de cette approche sont que le code est tout aussi compact que le système de tableau, mais qu'il utilise 1/8 de la RAM pour ce tableau. Je n'imagine pas que vous faites quelque chose qui utilise beaucoup de RAM, mais c'est toujours une bonne idée de la minimiser autant que possible. Dans ce cas, il est également beaucoup plus extensible, car vous pouvez insérer plus de nombres avant de manquer de RAM.

Vous pouvez également passer à PROGMEM, mais lire cela est un peu bizarre à certains égards et il est facile d'oublier de le lire en premier lieu (ce qui entraîne des lectures de RAM aléatoires). Dans ce cas, il devrait être suffisamment petit pour qu'une telle optimisation ne soit plus nécessaire.

Une dernière remarque est que, si jamais vous faites quelque chose pour lequel un octet est trop petit, vous pouvez utiliser des nombres plus grands jusqu'à le uint32_t, qui est de 32 bits de pixels utiles, ou potentiellement le uint64_t, qui est de 64 bits mais peut ne pas être pris en charge sur l'Arduino (je n'ai jamais essayé ce dernier).



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...