Aller au contenu


Photo
* * * * * 2 note(s)

Passer d'Arduino à Raspberry

arduino programmation ram s ram LED bouton leonardo PROGMEM flash char

34 réponses à ce sujet

#21 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 223 messages
  • Gender:Male

Posté 14 juin 2016 - 10:14

Salut,

Il parle de l'interface Série,lorsque tu as téléversé ton programme, en haut à droite de ta fenêtre, il y a une genre de loupe comme ceci :

e510534f85.png

Il suffit que tu cliques dessus lorsque ton programme tourne et ton Arduino branchée à ton PC, et tu devrai voir apparaitre les suites.

J'espère que cela a pu t'aider.



#22 romanepineill

romanepineill

    Membre

  • Membres
  • 19 messages

Posté 14 juin 2016 - 10:30

Oui, merci Jekert ! Effectivement je crois qu'il y a un souci :

 

 

showing animation FRAMES:12
Suite RGB: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 fin de la suite RGB


#23 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 14 juin 2016 - 11:35

J'ai fait une erreur dans la proposition précédente,

 

il faut remplacer 

Serial.print(c);

par 

Serial.print(canim);

Après j'espère que le résultat ne sera pas le même pour la suite RGB.



#24 romanepineill

romanepineill

    Membre

  • Membres
  • 19 messages

Posté 15 juin 2016 - 09:46

Le résultat n'est pas le même mais il ne donne pas de meilleurs effets : 

 

showing animation FRAMES:12
Suite RGB:  
 fin de la suite RGB
i  
 fin de la suite RGB
 
 fin de la suite RGB
o  
 fin de la suite RGB
 
 fin de la suite RGB
o  
 fin de la suite RGB
 
 fin de la suite RGB
 
 fin de la suite RGB
 
 fin de la suite RGB
o a i C u i L n L  
 fin de la suite RGB
n " u  
 fin de la suite RGB
r M a a A d  
 fin de la suite RGB
 
 
 
Les endroits vides sont normalement des losanges avec un point d'interogation


#25 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 15 juin 2016 - 01:31

Bon déjà c'est une "bonne" nouvelle, on sait qu'on accède pas correctement aux animations.

Reste à corriger ça!

 

N'ayant pas pu encore testé (même si je désespère pas de le faire), ça m'embête de te donner des bouts de codes qui ne marchent pas, mais bon je tente une dernière chose, à voir si ça passe :)

 

Si tu ne comprends pas ce que j'explique là, c'est normal, je le fais pour potentiellement d'autres developpeurs qui pourront alors corriger si besoin est mes propositions. Si tu veux voir ce que je propose saute une 20aine de lignes, tu auras le bout de code modifié (remplacement de ppm_read_byte_near) ;)

 

Donc le problème vient je pense du fait que les animations sont des tableaux à 2 dimensions, ce qui peut être vu comme des tableaux de tableaux, ou encore pour un programme C comme un pointeur de pointeur.

Revenons rapidemment à la base de la représentation mémoire, quand on déclare un tableau genre

char monTableau[] = "ceci est une chaine de carac";

Au final, monTableau est un pointeur sur une zone mémoire continue de 29 octets (28 char de la chaine + la fin de chaine), le pointeur est donc l'adresse du début de cette zone mémoire.

 

Si maintenant on fait un tableau de tableau

char monTableau2dim[][]={"Chaine 1","chaine 2","chaine 4","chaine 5"}

Cela est équivalent à

char chaine1[] = "chaine1"; char chaine2[] = "chaine2";
char chaine3[] = "chaine3"; char chaine4[] = "chaine4";
char monTableau2dim[] = {"chaine1","chaine2","chaine3","chaine4"};

Bref on a donc monTableau2dim qui est un pointeur sur une zone mémoire qui contient 4 pointeurs vers des chaines de caractères. Chaque pointeur vers des chaines pointant lui même sur une autre zone mémoire de la bonne taille (8 octets a priori).

 

Pourquoi toutes ces explications? parce que maintenant on ne veut plus mettre le tableau en RAM mais en mémoire flash, pour cela on utilise PROGMEM qui le permet, mais après il faut utiliser des fonctions spéciales pour accèder aux données, puisque elles ne sont plus en RAM (pgm_read_XXX_YYY).

 

Hors dans notre cas présent on utilise 

pgm_read_byte_near(anim[i][x]);

qui va lire la données en flash située à l'adresse du pointeur anim[i][x], mais ce pointeur est en fait un pointeur de pointeur de données toutes en mémoire flash.

Il faut donc utiliser les fonctions d'accès à la mémoire flash et non pas accéder au pointeur en RAM.

 

Bref pour résumer mon idée, il faut utiliser 2 fonctions pg_read_machin pour que ca retourne un caractère de l'animation.

il faut donc remplacer

pgm_read_byte_near(anim[i][x]); 

par (et j'ai bien sur un doute sur l'ordre des pointeurs)

pgm_read_byte_near(((char*)pgm_read_word_near(&anim[i]))[x]); 

Alors j'utilise un pgm_read_word_near parce que la on récupère le pointeur (et pas la valeur pointée) de l'animation voulue (anim[i]), comme c'est le pointeur, il faut mettre un & devant, et de mémoire un pointeur pour arduino fait 2 octets, d'ou la lecture d'un word et non un byte.



#26 romanepineill

romanepineill

    Membre

  • Membres
  • 19 messages

Posté 15 juin 2016 - 05:21

Ahah j'ai essayé de comprendre mais là c'est peine perdue pour moi !

 

Les séries donnent ça maintenant : 

 

showing animation FRAMES:12
Suite RGB: n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n  
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB
n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n 
 fin de la suite RGB


#27 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 16 juin 2016 - 10:50

Salut,

 

je viens de tester, alors a priori j'ai du faire une erreur dans l'explication du dessus, je ne sais pas ou.

Comme quoi entre la théorie et la pratique... :)

 

Mais pour que ça fonctionne, il faut donc a priori remplacer

pgm_read_byte_near(((char*)pgm_read_word_near(&anim[i]))[x]); 

par simplement

pgm_read_byte(anim[i]+x); 

alors il faut faire un "+x" et non "[x]" pour accéder à la donnée (effet du PROGMEM??? pour moi les deux écritures sont identiques mais a priori non)



#28 romanepineill

romanepineill

    Membre

  • Membres
  • 19 messages

Posté 16 juin 2016 - 07:12

Merci ! Le programme marche un peu mieux.. mais toujours pas comme souhaité. La première frame de chaque bouton marche très bien, mais la suite pareil qu'avant, plein de points d'interrogation et seulements certaines led s'allument...

 

J [ O  
  o q U  
 fin de la suite RGB
` p ' w / 8 
   
  \ O  
 fin de la suite RGB
  0 0  
 fin de la suite RGB
4 0 I q 0 ` p ` p  
 fin de la suite RGB
` p  
  ` p  
  `  
  p Z
 fin de la suite RGB
showing animation FRAMES:17
Suite RGB: b b g r r r g g r g r r r g g r r r r r g r g r r r r g r r b b b b b b b g r g g r g r g r g r g r 
 fin de la suite RGB
@ @   @ @  
 fin de la suite RGB
@     @ @   # & 
 fin de la suite RGB
) , / % ( + . 1 $ ' * - 0  
 fin de la suite RGB
$ $ $ $ @  
  @ @  
 fin de la suite RGB
@ A # 6 @ A # 6 A r d u i n o   L L C A 
 fin de la suite RGB
r d u i n o   L e o n a r d o 3 A $  
 fin de la suite RGB
 
  8 " 1 " 1 ?  
 fin de la suite RGB
^ b b b  
 fin de la suite RGB
b b a a a a a  
 fin de la suite RGB
k i q  
 fin de la suite RGB
H J P c q H , , ^ , ,  
 fin de la suite RGB
T N \  
  $ b / , J , " 7 A ' 6 Y " 6 q   0    
 fin de la suite RGB
0 O P   ? @ P / 0 @ P m q , 9 J [ H , 9  
 fin de la suite RGB
J [ O  
  o q U  
 fin de la suite RGB
` p ' w / 8 
   
  \ O  
 fin de la suite RGB
  0 0  
 fin de la suite RGB
showing animation FRAMES:1
Suite RGB: b b g r r r g g r g r r r g g r r r r r g r g r r r r g r r b b b b b b b g r g g r g r g r g r g r 
 fin de la suite RGB
showing animation FRAMES:12
Suite RGB: b b g r r r g g r g r r r g g r r r r r g r g r r r r g r r b b b b b b b g r g g r g r g r g r g r 
 fin de la suite RGB
@ @   @ @  
 fin de la suite RGB
@     @ @   # & 
 fin de la suite RGB
) , / % ( + . 1 $ ' * - 0  
 fin de la suite RGB
$ $ $ $ @  
  @ @  
 fin de la suite RGB
@ A # 6 @ A # 6 A r d u i n o   L L C A 
 fin de la suite RGB
r d u i n o   L e o n a r d o 3 A $  
 fin de la suite RGB
 
  8 " 1 " 1 ?  
 fin de la suite RGB
^ b b b  
 fin de la suite RGB
b b a a a a a  
 fin de la suite RGB
k i q  
 fin de la suite RGB
H J P c q H , , ^ , ,  
 fin de la suite RGB


#29 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 17 juin 2016 - 08:59

Alors j'ai retesté sur un arduino nano (sans les boutons bien sur), mais je n'ai pas de problèmes.

J'arrive à afficher les 5 animations à la suite et sortir toutes les suites de chaque animation sans problème.

 

Je me suis basé sur le zip que tu as envoyé avec 5 animations.

 

Pour être sur, tu as bien passé tous les tableaux d'animations en 

const PROGMEM char animXX[][50]

et déclaré la fonction drawAnimation comme ça:

void drawAnimation(const char anim[][50], int framecount)

Je t'ai attaché mon fichier de test, normalement si tu le charges sur ton arduino, ça devrait t'afficher dans la console les différentes suites par animation. Il faut a chaque fois envoyer un caractère dans l'interface série pour que ca t'affiche les suites pour la série en cours.

Sachant que c'est cyclique ça t'affiche les séries de l'animation 1 puis 2 puis 3 etc.

Fichier(s) joint(s)



#30 romanepineill

romanepineill

    Membre

  • Membres
  • 19 messages

Posté 17 juin 2016 - 10:11

Le code semble être le même... Pourtant ça ne marche toujours pas. Quand je charge ton fichier test sur mon arduino l'interface série marche correctement mais les led ne changent pas de couleurs (à part quand j'envoie un nouveau caractère, elles change une fois). Tu m'a déjà beaucoup aidé ! Je vois pas bien comment tu pourrai faire plus mais on sait jamais, je joins mon fichier, peut être que je n'ai pas vu quelque chose... Merci beaucoup !

Fichier(s) joint(s)



#31 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 17 juin 2016 - 12:26

Alors c'est normal que quand tu charges mon code, les leds ne bougent pas puisque j'ai enlevé cette partie (je n'ai nis boutons ni les dispo ici pour tester rapidement).

En revanche sur l'interface série, tu devrais voir apparaitre les suite "RGB" au fur et à mesure sans caractère "bizarres".

 

Je viens de retester avec tes tableaux mais mon code et tout semble bien fonctionner (ie le moniteur série m'affiche les bonnes suites, donc la lecture des suite en flash fonctionne)

 

Je regarde le code qu tu as fourni pour voir si qqc me semble louche! 



#32 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 17 juin 2016 - 01:05

Ah ben je pense voir trouvé pourquoi ça ne marche pas ton code,

 

tu as dans drawAnimation

char canim = pgm_read_byte(anim1[i]+x);

et il faut 

char canim = pgm_read_byte(anim[i]+x);

C'est "subtil" mais ça change tout (anim1 au lieu de anim), et ça colle bien avec les sorties sur le moniteur série que tu as donné.

 

J'espère que ce coup ci tout marchera :)



#33 romanepineill

romanepineill

    Membre

  • Membres
  • 19 messages

Posté 17 juin 2016 - 01:27

YALLLLAAAAAAA !!!! MERCII !!! Je sais pas comment te remercier ! Donne moi ton adresse et je te fais livrer une bouteille de vin ! Je suis tellement soulagée, vraiment mille mille mercis !!



#34 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 17 juin 2016 - 02:38

Ya pas de quoi :)

Ca m'a permis de me remettre et approfondir cette problématique du stockage de données en flash ce qui ne peut qu'être bénéfique.

 

Ca permettra aussi à aider d'autres personnes si un jour ya besoin, d'ailleurs si un modo (ou toi) peut rajouter les mots clés qui vont bien dans le titre du sujet, par exemple PROGMEM ou qqc en raaport avec le stockage en flash de données programme.

 

bonne continuation



#35 romanepineill

romanepineill

    Membre

  • Membres
  • 19 messages

Posté 17 juin 2016 - 03:02

C'est fait :)

 

Je posterai des photos de mon installation quand tout sera fini ! Merci à vous tous  :heart:


  • Jan aime ceci



Répondre à ce sujet



  



Aussi étiqueté avec au moins un de ces mots-clés : arduino, programmation, ram, s ram, LED, bouton, leonardo, PROGMEM, flash, char

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users