salut je suis vraiment besoin de votre aide (excuse moi suis faible au français )
je suis nouveau dans la programmation arduino je suis entrain de programmer un robot serveur pour un restaurant commandé par le téléphone via bleutouth il a deux trajectoire il roule jusqu'au table désiré puis il parle et tourne la tète et quand les client récupère leur commande ils touche un bouton pour que le robot revient a sa position initiale en marche arrière
voici le programme que j'ai fait donne moi des conseille pour l'optimiser svp
les problèmes que j'ai rencontré :
-message d'erreur ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
voice.play("1.wav");
-le volume de baffe est très bas malgré que j'ai utilisé un amplificateur bc547 (le volume de baffe est très haut en d'origine)
-quand je test les fonctions un par un tout est bien mais quand j'exécute tout le programme une foi sa marche et l'autre foi ne marche pas même la foi qui marche le son ne marche pas
Boujour merci pour votre réponse
Pour le message d'erreur le programme marche normalement donc esque je peut le négliger sans problème ?
Pour les port serie j'ai essayé de branché mon module bleutooth sur les pin de communication serie mais sa ne march pas c pour sa que j'étais obligé d'utiliser le softwareserial
Le problemme le plus important c'est quand j'exécute le programme complet ne marche pas tout les temp esque je suis obligé de rajouter un autre arduino pour diminuer la charge sur le premier arduino? Ou il ya une autre solution plus optimiste ?
la bibliothèque est mal écrite et ne prend pas un texte littéral.
si vous ne voulez pas de warning, écrivez
char fichier[] = "1.wav";
voice.play(fichier);
une baffe c'est un truc pas cool qu'on reçoit sur la joue en général (une gifle)
par contre un baffle c'est une enceinte acoustique. le bc547 est juste un transistor, faudrait avoir plus de détails sur le montage et l'enceinte en question
L'essentiel est d'avoir ce type d'informations dans la fenêtre:
Le croquis utilise 13550 octets (5%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
Les variables globales utilisent 1532 octets (18%) de mémoire dynamique, ce qui laisse 6660 octets pour les variables locales. Le maximum est de 8192 octets.
Cela veut dire que ton programme est OK et qu'il va se télécharger.
Sauf cas d'exceptions, tu peux ignorer le reste.
Merci bcp je me suis enfin débarrasser de le message d'erreur grace à ta solution
Donc il me reste juste fmde réglé le problème principale qui est en faite quand je lance le programme complet des foi sa marche et des fois non je pense que larduino est en surcharge(6 capteur ultrason,4capteur infrarouge , 2 moteur dc , 1moteur pas a pas , 2 bouton , un baffe , module bleutooth , module lecteur carte sd )
Esque il faut utilisé une autr arduino ou bien il ya une autre solution mieux que sa ?
faudrait savoir comment tout cela est monté et alimenté...
pour les capteurs à ultrason, j'ai cru voir que vous lisiez trois capteurs à la suite les uns des autres dans les fonctions us1() et us2() ➜ Ce n'est pas terrible car des ultra-sons de la première émission peuvent être encore en train de rebondir et fausser la lecture suivante. il faut ménager une pause entre 2 mesures, 50 à 60ms devraient suffire.
il y a des délais un peu partout, ce n'est généralement pas bon si on veut un code réactif mais avec des variables à une ou deux lettres, le code est illisible simplement.
par exemple
rtable2(int x0) {
if (k == 3) {
vv = 120;
if (o == 0) {
...
o = 1;
}
us2();
if (dis4 >= 25 && dis5 >= 25 && dis6 >= 25) {
if (a0 >= x0 + 2) {
stope ();
k = 4;
vv = 100;
if (o == 1) {
ou encore
else if (k == 2) {
bg = digitalRead (49);
if (!bg)
{
k = 3;
}
}
c'est imbitable ...
Donnez des noms parlant à vos variables pour faciliter la relecture et la compréhension, n'utilisez pas les N° de pin directement (49 ici) donnez leur aussi des noms...
sinon la bibliothèque NewPing - Arduino Reference pourrait vous aider à avoir un code un peu plus efficace pour la lecture des capteurs de distance
pas clair du tout en effet (et il n'y a pas de commentaires)... Je lis le code sur mon iPhone en plus donc ça ne donne pas du tout envie de se plonger dedans
notez aussi que TMRpcm utilise un timer pour travailler en tâche de fond et est assez gourmand, ça peut directement influer sur le fonctionnement de Software Serial et de la bonne réception de commandes BT donc. Comme votre Arduino semble être un Arduino MEGA, pourquoi passer par SoftwareSerial ?? utilisez directement un des ports matériel.
@jpbbricole je ne suis pas d'accord avec toi, je rejoins @J-M-L , les warnings ne doivent pas être ignorés.
Pour moi, il ne faut pas ignorer un warning, mais comprendre pourquoi il est remonté.
Au pire si tu estimes que ce warning ne peut engendrer d'erreur en connaissance de cause, tu peux le laisser, mais la plupart du temps, il est assez simple de le corriger dans ce cas.
De plus ce n'est pas parce ton programme marche à un moment, que le programme ne tombera pas sur le cas du warning plus tard.
Par exemple lorsque tu mets une variable exprimant un temps dans une autre variable plus petites, cela peut marcher au début et planter plus tard.
d'une part ce n'est pas ce que vous avez écrit (c'était plutôt "ignorer les warning du moment qu'on peut télécharger") mais vous savez bien que le diable se cache dans les détails et ça peut sembler fonctionner jusqu'au moment où ça plante...
le compilateur est votre ami, le mieux c'est de résoudre tous les warnings quand c'est possible. Le compilateur vous dit que quelque chose ne correspond pas à la specification ou qu'il y a un souci potentiel.
par exemple ce code sur UNO ou MEGA:
void setup() {
Serial.begin(115200); Serial.println();
unsigned int x = 0x1234;
unsigned long y = x << 16;
Serial.println(y, HEX);
}
void loop() {}
ça compile très bien, le code tourne sans souci mais le compilateur vous a dit
sketch_sep03e.ino:4:26: warning: left shift count >= width of type [-Wshift-count-overflow]
unsigned long y = x << 16;
^~
si vous ne réglez pas le problème, y contient 0 au lieu de 0x12340000
Grace au message du compilo, on se dit "bien sûr un int est sur 16 bits donc si je le décale de 16 positions il ne reste rien avant de l'affecter à la variable de 32 bits."... donc on écrit à la place
unsigned long y = uint32_t(x) << 16;
et tout va bien, le compilateur ne se plaint plus et le code compile, se charge, fonctionne comme attendu
bref... vous faites comme vous voulez bien sûr, mais ignorer les warning ce n'est pas sain...
en plus un warning sur AVR par exemple peut conduire à l'arrêt de la compilation sur ESP32 (c'est le cas des const char * par exemple pour le cas ci dessus)... donc on a du code non portable
Quand j'utilise les port matériel je ne peut pas televerser mon programme je reçois se message d'erreur
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
Une erreur est survenue lors du transfert du croquis
Mais quand je retire mon module bleutooth je peux televerser normalement
J'ai réécrit le programme en ajoutant des commentaires pour le rend plus clairr comme vous m'avez conseillé j'espère que vous le comprenez bien 1662235964973_robot.ino (10,5 Ko)
Il ne faut pas brancher le module bluetooth sur TX0/RX0 qui est utilisé pour le téléchargement.
Connecte-le par exemple à TXD1/RXD1 et utilise dans ton programme Serial1 à la place de myStepper Bt ou bien fait un > #include myStepper Serial1
Ok mrc bcp
Donc il reste que le problème de surcharge sur arduino esque j'ai besoin d'utiliser une autre arduino ou il ya une autre solution? Si vous avez jetté un œil sur les commentaires ?