Aller au contenu


Photo

Yorkshire, mon petit quadrupède


  • Veuillez vous connecter pour répondre
76 réponses à ce sujet

#61 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 27 mai 2017 - 02:09

Wahou, tu m'a fait mal au crâne avec ton *(tb+(k*(*lg))+i+1)

Je comprends que tu parcours ton tableau à 2 dimensions mais pas la suite.



#62 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 765 messages
  • Gender:Male

Posté 27 mai 2017 - 03:53

j'ai hâte d'en voir encore un peu plus ^^

Moi aussi ! J'y travaille sans relâche. Déjà ce programme m'a pris un moment.
 

Je comprends que tu parcours ton tableau à 2 dimensions mais pas la suite.

*(tb+(k*(*lg))+i+1)

*() --> ça, ça veut dire que l'on fait une opération sur l'adresse, pas sur la valeur (*x on parle de la valeur, *(x)on parle de l'adresse de x).

- On se déplace dans le tableau tb.
- i, c'est la position de la case dans une ligne. On passe à la case suivante dans la ligne.
- k, c'est le numéro de la ligne. On passe à la ligne suivante. C'est également le numéro du servo.
- lg, c'est la longueur de chaque ligne, ici 13 cases. Mais attention, il n'y a que 12 intervals, d'où le (*lg-1), plus haut.

En français, ça donne à peu près ça : à l'adresse du tableau *(tb) , ajouter la longueur de la ligne actuelle (k*(*lg)) , plus la position sur la ligne (+i) . Le +1 indique la position cible qu'il faut atteindre, c'est à dire la case suivante.

A ta disposition pour d'autres précisions.

<edit: en relisant je me suis rendu compte que je disais des conneries, j'ai donc modifié la dernière partie.>

#63 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 27 mai 2017 - 05:18

Et la notation Tb[ ][ ], ça le fait pas ?

#64 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 765 messages
  • Gender:Male

Posté 27 mai 2017 - 06:12

Et la notation Tb[ ][ ], ça le fait pas ?

Et bien, oui, dans une version antérieur sans pointeur, c'est ce que je faisais.
Avec des pointeurs, j'ai essayé, mais sans succès.
Pourtant je pense que c'est faisable même en utilisant des pointeurs comme ici, mais je n'y suis pas parvenu.

Si tu as un exemple simple, ça m'intéresse.

#65 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 27 mai 2017 - 07:41

Je pense à un truc du genre. En fait ça me paraît simple. Et du coup, je sais pas si je suis dedans.

for( int indexColonne=0; indexColonne < 13; indexColonne++){
  for( int indexServo = 0; indexServo < 4; indexServo++){
    mySrv[indexServo].write(Tablo[indexServo][indexColonne]);
  }
}

Tu mets des #define pour le 4 et le 13.

 

Tu peux expliquer ce que tu n'arrive pas à faire ?



#66 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 765 messages
  • Gender:Male

Posté 27 mai 2017 - 08:13

Tu peux expliquer ce que tu n'arrive pas à faire ?

Oui, je comprends bien ce que tu fais.

Dans mon programme, la fonction Cinematique a des pointeurs comme paramètres.
Cela permet de faire un code générique utilisable tel quel par n'importe qui dans son propre programme.

L'utilisation des pointeurs n'est pas obligatoire, mais c'est quand même ce qui fait l'un des grands intérêts du C.
Je pense que s'habituer à faire des fonctions avec des pointeurs en paramètres est une bonne pratique.

Mais après 25 ans d'interruption de la programmation, je dois avouer que cela n'a pas été très facile. Pour moi cela était de l'ordre du défi.
Maintenant, c'est reparti, je pense que le plus difficile a été de s'y remettre.

#67 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 27 mai 2017 - 08:16

Tablo est un **int. C'est un pointeur, tu peux l'utiliser en paramètre de ta fonction, si vraiment tu veux faire cette fonction. Sinon, tu peux encore simplifier en parcourant ton tableau à 2 dimensions directement dans la fonction loop.


Modifié par Path, 27 mai 2017 - 10:14 .
J'ai dit des conneries, voir plus bas.


#68 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 765 messages
  • Gender:Male

Posté 27 mai 2017 - 08:21

Tablo est un **int. C'est un pointeur.

Je ne suis pas sûr de comprendre.
Tel qu'il est déclaré, Tablo est un tableau à 2 dimensions et non un pointeur.

#69 Ulysse

Ulysse

    Membre passionné

  • Membres
  • PipPipPip
  • 486 messages
  • Gender:Not Telling

Posté 27 mai 2017 - 08:24

Je n'ai plus entendu parlé de pointeur depuis ... la programmation Object. Mais les meilleures soupes ... :-))

#70 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 27 mai 2017 - 08:42

Moi aussi c'est loin ^^

 

Tu peux faire ça :

Tablo est un tableau à 2 dimensions initialisé.

pTablo est un pointeur vers un tableau à 2 dimensions pas initialisé.

int Tablo[4][14];
int **pTablo;
pTablo = Tablo;

En ce sens, Tablo est bien un pointeur, même s'il se cache ;)

 

[Edit] En fait non, tu peux pas sur arduino  :) Je viens de vérifier. Je reviens.


Modifié par Path, 27 mai 2017 - 10:00 .
J'ai dit des conneries


#71 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 27 mai 2017 - 10:06

ça, c'est mieux, sur arduino.

int Tablo[4][13]={{90,100,110,120,110,100,90,80,70,60,70,80,90},    // Indiquez ici les valeurs des angles 
                  {120,110,100,90,80,70,60,70,80,90,100,110,120},   // que vos servos doivent parcourir.
                  {90,80,70,60,70,80,90,100,110,120,110,100,90},    // Le nombre de lignes de données doit être égal au nombre de servos.
                  {60,70,80,90,100,110,120,110,100,90,80,70,60}};   // La longueur des lignes doit être égale au nombre de valeurs et doit être constante.

void setup() {
}

void loop() {
  maFonction(Tablo);
}

void maFonction(int pTablo[4][13]) {
  for( int indexColonne=0; indexColonne < 13; indexColonne++){
    for( int indexServo = 0; indexServo < 4; indexServo++){
      Serial.print(pTablo[indexServo][indexColonne]);
    }
  }
}


Donc, tu peux pas sur un tableau à 2 dimensions.

 

Mais ça fonctionne avec un tableau à 1 dimensions :


int Tab[10]={5,8,4,3,9,6,5,4,3,8};
int *pTab;

void setup() {
  pTab = Tab;
}


void loop() {
  for( int indexColonne=0; indexColonne < 10; indexColonne++){
    Serial.print(pTab[indexColonne]);
  }
  maFonction(Tab);
}

void maFonction(int *paramPTab) {
  for( int indexColonne=0; indexColonne < 10; indexColonne++){
    Serial.print(paramPTab[indexColonne]);
  }
}

C'est particulier arduino



#72 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 765 messages
  • Gender:Male

Posté 28 mai 2017 - 06:28

Dans ton premier exemple, tu parcours un tableau à 2 dimensions. Très bien !
Ton deuxième exemple, je ne vois pas l'intérêt de faire un tableau à une dimension.

J'ai fait des choses comme ça, il n'y a rien qui me choque.
Et ?

Je ne vais pas défendre, ici, l'intérêt de l'utilisation des pointeurs, je n'ai ni la compétence, ni l'autorité pour cela.
On peut écrire des programmes sans pointeurs, c'est certain.

#73 zavatha

zavatha

    Habitué

  • Membres
  • PipPip
  • 233 messages
  • Gender:Male

Posté 28 mai 2017 - 08:41

J'ai installé ma caméra et j'ai filmé mon pc (si vous avez un logiciel à me proposer, je suis preneur). Avec mon logiciel vidéo, j'ai sélectionné une image par seconde. Le résultat, c'est une suite de 10 images qui se répètent.
 

 

Salut Oracid,

 

Comme soft pour faire cela j'utilise Screen Recorder 1.3

 

Si quelqu'un a mieux je suis preneur également (j'ai quand même galéré pour avoir un volume audio satsifaisant mais ça fait le boulot...)

 

@+

 

zav



#74 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 28 mai 2017 - 09:55

Je faisais que tenter de rèpondre à ta question:
"Si tu as un exemple simple, ça m'intéresse."

Tenter car sur arduino, le langage n'est pas toujours naturel.

Après tu fais bien comme tu veux.

#75 zavatha

zavatha

    Habitué

  • Membres
  • PipPip
  • 233 messages
  • Gender:Male

Posté 28 mai 2017 - 12:46

Tenter car sur arduino, le langage n'est pas toujours naturel.

 

c'est pas faux ^^

 

J' avais essayé de faire du code un peu propre pour mon premier test de pilotage moteur avec fonctions et utilisation des pointeurs (pour parser des trames) et ça c'est fini avec une syntaxe plus basique...

mais du coup ça marche ^^

 

du coup je ferais du refactoring quand le robot sera monté... histoire d'y voir plus clair, par ce que là, mon code, je l'assume pas  :no:



#76 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 765 messages
  • Gender:Male

Posté 28 mai 2017 - 01:03

Je faisais que tenter de rèpondre à ta question:
"Si tu as un exemple simple, ça m'intéresse."
Tenter car sur arduino, le langage n'est pas toujours naturel.
Après tu fais bien comme tu veux.

Je parlais d'un exemple en mode pointeur. C'était bien le sujet, non ?

Salut Oracid, 
Comme soft pour faire cela j'utilise Screen Recorder 1.3
Si quelqu'un a mieux je suis preneur également (j'ai quand même galéré pour avoir un volume audio satsifaisant mais ça fait le boulot...)
@+
zav

Super ! Merci. Je vais voir ça.
Oui, si quelqu'un a mieux, cela m'intéresse également.

#77 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 765 messages
  • Gender:Male

Posté 05 juin 2017 - 06:44

Pour ceux qui s'intéressent à cette réalisation, vous trouverez la suite à la rubrique Lego, ici http://www.robot-maker.com/forum/topic/11466-arduino-yorkshire-mon-petit-quadrupede/




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

0 members, 0 guests, 0 anonymous users