Salut salut
Tout d'abord, merci de ta réponse plutôt rapide ^^'
Je vais m'expliquer
skywodd:
Je reconnais dans la manière de coder les méthodes d'un développeur d'applications pc (j'en suis moi même un).
Utiliser l'opérateur new sous arduino est (pour moi) une catastrophe (je vois ça comme ça).
Je suis sur que ton code pourrai tourner niquel dans une optique "pc" mais je suis aussi presque sur que ton problème viens de la complexité ajouter au code.
Exactement. Comme je l'ai dis au début, et comme tu l'as remarqué, je suis à la base un dev "PC".
En fait, les 2 dernières années (BTS), j'ai appris le C et le C++ cette année en guise de "Langage Objet. J'ai découvert l'arduino il y a quelques semaines, mes réflexes PC surgissent, je n'ai pas encore les réflexes micro-contrôleurs (même si pendant 2 ans on m'a répété qu'il faut prévoir petit, niveau code et ressources).
skywodd:
Déjà tous les truc du genre "Keypad * kpad;" puis "kpad = new Keypad(9600);" devrait être remplacer par "Keypad kpad(9600);".
Je ne pensais pas que c'était si... Déconseillé
skywodd:
Ensuite je vois des Serial.end() et des Serial.begin(xx) par plein vagons je ne serais pas étonné que une parti de ton problème vienne de là.
Là... C'était parce que je voulais "utiliser" le mode série QUE quand j'en avais besoin. Pourquoi, je sais pas trop, mais encore une fois, ça doit être le réflexe "Quand tu utilise la mémoire, libère la dès que tu peux, et tout et tout", du coup pour le série, il m'a paru une bonne idée de ne m'en servir qu'au besoin. Cela dit, que mon problème vienne de là, je te crois car c'est tout à fait possible, mais je te cache pas que "logiquement", je ne vois vraiment pas le rapport, ni comment c'est possible (au fond, j'ouvre et je ferme bien non ?)... Mais bon, au moins maintenant je saurais qu'il est inutile de fermer le mode série.
skywodd:
Autre chose sous avr-gcc les "return this->variable;" son inutile puisque déclarer dans le .h en private ou public, "return variable;" suffit.
Là... C'est une habitude que j'ai pris en C++. Il m'arrive de donner le même nom à mes variables private et les variables envoyées en paramètre, j'ai donc pris l'habitude de mettre this->. C'est vraiment important ou je peux garder cette habitude ?
skywodd:
Tu dois revoir ton code presque entièrement en gardant en tête que l'atmega328 ne contient que 2Ko de ram ! quand je vois des strcmp() en pagaille mais cheveux ce dresse !
Bon... Ok, j'aurais pu faire un for() et copier les caractères? Mais je pensais que strcmp() faisait pareil ^^'
skywodd:
Je ne critique pas mais si je peut te donner quelque conseils les voici:
supprime tout ces class fait juste des fonctions elle sont totalement superflus,
dans ton code il ne doit pas y avoir de Serial.end et UN seul Serial.begin, faire l'inverse c'est courir au problème,
ensuite la libraire softwareSerial est donnée avec l'ide arduino inutile de la mettre dans ton dossier fait comme avec la librairie wire.
Dernière chose. Pour le SerialSoftware, j'avais le message d'erreur "No such file or directory". Comme mon oral est dans 3 jours, je me suis pas attardé dessus, j'ai recopié les fichiers.
skywodd:
Sans vouloir être méchant j'ai l'impression que tu a voulu en faire beaucoup trop ton projet contient 12 fichiers alors qu'en réalité codé de manière réfléchi et avec l'optique microcontrolleur il ne prendrai que 1 fichier .pde de maximum 200 lignes.
Je regarde ton code demain matin et te propose une version plus "arduino" pour que tu puisse voir
Sinon je dois dire que tu te débrouille vraiment bien en c++ tu utilise quel compilateur habituellement ?
Enfin... Aucun problèmes
Je ne suis pas assez prétentieux pour prendre tes conseils et remarques comme une attaque ou des critiques. Bon, les critiques c'est normal, je suis débutant alors c'est ce genre de remarques/reproches/critiques/discussions qui me font avancer et en apprendre plus.
Merci pour le compliment, j'utilise habituellement... Mingw, sur Windows, Mac et linux.
Je me suis rabattu sur "Qt" de Nokia pour éviter d'avoir à porter mes applis fenêtres à chaque fois...
Je vais quand même pas attendre que tu me ponde un code tout fait, je vais commencer par le corriger et je regarderais ce que tu as fais (quand tu l'auras fait)... Si tu as le temps et tout et tout.
Merci merci pour tes conseils!
--- EDIT: 14/06 ---
Finalement, j'ai testé en laissant QU'UN SEUL Serial.begin(), de retirer tout les end().
Et bizarrement... Dans ou hors de la fonction, le nombre est retourné correctement QUE si je mets "print" avant O_O'.
J'ai essayé, j'ai mis un Serial.print("Available: "), j'ai commenté le Serial.available(), et il renvoie bien le nombre. Je commente le print, et le Serial.available() renvoie 1 ...
Impensable...
Et si je commente le Serial.print("Available: "), et que j'affiche le .available(), là... Il affiche 1 et mon while( Serial.available() > 0 ) s'éxécute 2 fois... Je comprends plus T_T