Go Down

Topic: Lecture de donnée Excel (Read 324 times) previous topic - next topic

Qberne

Bonjour,

Je débute dans la programmation Arduino et je suis nouveau sur ce forum.
J'ai une idée de projet et j'ai besoin de conseil mais je ne sais pas s'il y a déjà un sujet la dessus.
Si c'est le cas je m'en excuse, redirigez moi s'il vous plait vers le topic qui répondrai à ma problématique.

Je possède un tableau Excel avec des coordonnées de point. 110 points pour être exacte positionnés par deux coordonnée (X;Y).

Je souhaite récupérer les coordonnées d'un unique point, en entrant son numéro via un TouchPad, pour pouvoir actionner des moteurs et diriger mon projet vers le point sélectionner. Je précise que les coordonnée des points sont fixes et ne changerons pas donc je n'ai pas besoin d'adapter la coordonnée en temps réel. Je cherche juste un moyen de convertir mon tableau excel pour qu'il soit lu par l'arduino. De préférence, sans être connecter a un ordinateur, l'arduino sera alimenter par une batterie.

Pour les amateur d'astronomie mon projet consiste a créer un système GOTO pour télescope. si y'as des intéresser je serai ravi de discuter avec eux ;)

Merci d'avance pour l'aide

(au passage je m'appel Quentin)

fdufnews

Bonjour,

Le fichier Excel pourrait être sauvegardé au format CSV ledit fichier copié sur une carte SD qui serait lue par l'Arduino.

ou bien

une macro Excel convertie le fichier en source C et les coordonnées sont dans le programme.

La seconde solution est moins élégante dans la mesure où toute modification du contenu du fichier entrainera une recompilation du code et une reprogrammation de l'Arduino.

dbrion06

Une troisième solution consisterait à ce que tout reste dans le PC qui, par l'intermédiaire de sa ligne série, transmettrait la coordonnée vers l'arduino: (lire un fichier csv avec python est ultra simple; pyserial est aussi simple d'emploi; la charge du décodage par l'atduino d'e deux entiers est plus petite que d'ouvrir un fichier sur une carte SD, trouver la bonne ligne et finalement ... la décoder...). Cette solution offre la possibilité d'envoyer des séquences de points.

Qberne

Je vois d'abord que les réponses vont vite et je sent que ce forum va me plaire donc merci a vous

Ensuite : le fichier CSV jen ai entendu parler mais en anglais j'avais pas tout bien saisie. Tu m'apprend néanmoins que je vais avoir besoin d'un lecteur de carte SD et la j'avance. Y a t'il un post pour apprendre a utiliser un lecteur de carte SD ??

Jai pas très bien compris la deuxième solution mais visiblement elle m'évite d'acheter un lecteur de carte SD donc j'aimerai bien que tu développe stp

Pour la troisième solutions, je commence d'abord avec l'arduino avant de me pencher sur le python, je connais pas bien les différence. De plus le projet est quand même de faire un système indépendant d'un ordinateur. Je viendrai volontiers vers toi si python peux me débloquer a l'avenir.

Merci donc a vous deux

dbrion06

#4
Jun 18, 2019, 01:56 pm Last Edit: Jun 18, 2019, 01:57 pm by dbrion06
Un csv (comma separated values en anglais approximatif) une un format d'exportation léger d'excel (entre autres): arduino n'est pas equpé pour decoder les fichiers natifs *.xls.
Il s'agit d'un format du type colonne 1 {separateur} colonne2 {separateur}. où olonne 1 est la premoère colonne, colonne 2 la seconde etc...
ex:
Marie, Curie, physicienne
Landru, Henri, assassin
Robespierre, Maximilien, coupeur de têtes

Vous voyez que dans ce fichier du personnel, les noms, prénoms et fonctions sont séparés par une virgule, qui sert de séparateur.
Nota: par défaut, en Français, Excel met comme séparateur .... le point vrigule et ceci, pour éviter toute ambiguité avec le séparateur décimal (la virgule, en français). Vous avez c cependant tout interet (décodage plus facile , côté arduino)  à spécifier, au moment de la création du csv, que le séparateur de champs est la virgule et le séparateur décimal est le point....
Vous aurez alors des fichiers csv du genre

nom, taille, age
Simplet,0.32,155
Grincheux,0.25, 234
Timide,0.12, 321

Qberne

Ca j'avais assez bien compris a travers mes recherches.

J'aimerai maintenant comprendre en quoi consiste la conversion de la feuille excel en source C

Et jai entendu parler du format *.h
qu'es ce que c'est ??

fdufnews

#6
Jun 18, 2019, 03:00 pm Last Edit: Jun 18, 2019, 03:04 pm by fdufnews
Jai pas très bien compris la deuxième solution mais visiblement elle m'évite d'acheter un lecteur de carte SD donc j'aimerai bien que tu développe stp
La solution consiste à développer une macro visual basic dans Excel qui extraira les données et génèrera un fichier contenant du code C.
Cette solution reste pertinente si tu ne modifies pas trop souvent les valeurs dans le fichier Excel et si les valeurs ne sont pas trop nombreuses et qu'elles tiennent en mémoire (FLASH ou RAM).
L'avantage de la carte SD c'est que la limite c'est la taille de la carte SD pas la taille de la mémoire de l'Arduino.

dbrion06

Cette solution nécessite de maîtriser les macros visual basic....
ou de partir d'un ficher *.csv et de le modifier
ex: si vous disposez de awk, c'est assez trivial; idem pour python
Avec awk, pour le fichier suivant
 x,y, z
1,2,3
4,5,6
7,8,9

le script suivant
Code: [Select]

 cat  csvtoc.awk
BEGIN { FS=",";}
{
if (NR ==1) {
   printf("typedef struct { int %s ;  int %s ; int  %s;} data;\n", $1,$2,$3);
   print  "data donnees[] = {"
}else {
    if ( NR >2) print ", ";
    print  " {", $1, ", ",$2,", ", $3, "}";
}
}
END { print "};";}


vous donnera (un bout de c syntaxiquement correct)
Code: [Select]

 cat  truc.csv | awk -f  csvtoc.awk > toto.c && cat toto.c
typedef struct { int nom ;  int  taille ; int   age;} data;
data donnees[] = {
 { 1 ,  0.32 ,  155 }
,
 { 2 ,  0.25 ,   234 }
,
 { 3 ,  0.12 ,   321 }
};

68tjs

Coté pratique :
Une macro Excel ne sera utilisable que pour ceux qui possèdent Excel.
Une macro LibreOffice ne sera utilisable que pour ceux qui possèdent LibreOffice

Le format csv est universel et très largement utilisé dans le domaine des mesures.

dbrion06

Quote
Et jai entendu parler du format *.h
qu'es ce que c'est ??
un projet c(++) se compose de bouts de code c(++) et de fichiers inclus.
Normalement, les fichiers c(++) finissent par c (resp cpp), et les fichiers inclus par .h.
Vous allez sans doute vous demander quel est le rapport avec l'arduino , dont les fichiers se terminent par ino.
En fait, il s'agit de germes de fichiers c++, qui subissent une légère transformation avant la compilation, mais on peut parfaitement mettre des *.cpp et des *.h dans le même répertoire (voire ne pas mettre de *.ino, en veillant à ce que un des cpp contienne un nom imposé).

Lors de la précompilation, le contenu des fichiers *.h est quasi littéralement copié collé dans le fichier qui l'invoque. Ex
#include "toto.h" va vous copier coller le contenu de toto.h dans votre programme : donc, si vous avez défini des types, déclaré des variables, vous êtes sûr qu'elles seront là; Ceci, bien sûr, à condition que toto.h (ou un autre nom plus parlant...) soit dans le repertoire de votre projet (et, si vous changez de projet, le nouveau projet ne sera pas pollué par le toto.h precedent, il faudra en mettre un autre/une copie si besoin)
Les subtilités de l'inclusion sont décrites en long, large et travers dans https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html#Header-Files

A noter que c'est une construction classique en c++ (i.e du "langage" arduino).

Quelles que soient les solutions proposées, il vous faut
:
maîtriser plus ou moins c(++) -ça, c'est commun à toutes les solutions proposées dans le  " monde" arduino-
suivant les cas, maîtriser de plus visual basic , awk (très proche de c.... une pièce de musée; existe sous GNUlinux et est installable sous W$), python (existe sous GNUlinux, est installable sous d'autres systèmes)  ou la librairie SD -ou, mieux, SDFat....)
JE suis bien conscient que votre problème n'est pas un problème simple.

Qberne

#10
Jun 18, 2019, 06:24 pm Last Edit: Jun 18, 2019, 06:27 pm by Qberne
Le format csv est universel et très largement utilisé dans le domaine des mesures.

Je peux également créer une fichier CSV avec LibreOffice alors ?

Pour les fichiers en .h la aussi comme pour le python je reviendrai vers vous s'ils permettent de me débloquer dans mon projets. Si j'ai bien compris c'est un fichier a part du programme qui répertorie plus de variable sans avoir besoin de les réécrire dans le programme. C'est le programme qui appel le fichier *.h qui contiens lui même des donnée pour simplifiée le programme. Si jai bien compris.

Concernant la macro Excel comme vous dite il se pose deux problème face a moi :
Le premier maitriser visual basic. Yas bien trop longtemps que jen ai pas fais et le peu que j'ai fais dois etre largement insuffisant pour créer une macro.
Le deuxième c'est la quantité de donnée que je vais créer dans mon tableau, je vais certe commencer avec les 110 points citer au début, mais mon domaine d'application (l'astronomie) est bien plus vaste que 110 objets et a terme je vais rajouter encore et encore des points.

Au bilan je pense me garder l'idée de la carte SD, savez vous s'il y a des tuto pour celà ? Merci en tout cas pour votre aide j'étudierait ces propositions car j'en reste pas moins curieux.

Je promet de faire un Topic entier sur mon projet de monture motorisé pour télescope si celui-ci aboutit

dbrion06

Quote
Y a t'il un post pour apprendre a utiliser un lecteur de carte SD ??
:
il y a la doc officielle d'arduino https://www.arduino.cc/en/Reference/SD , les exemples d'utilisation (ces deux composants sont livrés gratuitement lors du telechargement d'arduino)... Comme SDFat est légèrement supérieure (et SD , qui est la version officielle, lui en prend des morceaux), vous pouvez le télécharger si besoin -exemple besoin de noms de fichiers longs...-; sinon, pour comprendre ce qu'est la fAT, c'est plutôt par curiosité que pour avoir un truc qui marche , wikipedia https://en.wikipedia.org/wiki/File_Allocation_Table#FAT32

dbrion06

Quote
Je peux également créer une fichier CSV avec LibreOffice alors ?
Oui -et avec openoffice....-
 Le seul truc auquel il faut faire attention, c'est d'avoir les "bonnes"  options -anglo saxonnes!- lors de la création de fichiers, dont les champs sont séparés par des virgules et où le point décimal est un point. (sinon, c'est ennuyeux de décoder de réels/floats depuis arduino.

Qberne

(ces deux composants sont livrés gratuitement lors du telechargement d'arduino)
Ques ce qui est livré gratuitement ???

dbrion06

SD (la librairie officielle qui gère .. les cartes .. SD); sa doc (est navigable, même sans connection sur l'étrange toile AFAIK); ses exemples (excusez du peu).
A noter que je préfère recommander une doc officielle, que les auteurs ont eu le temps de raffiner, plutôt que des posts, où on réagit au coup par coup;
SDFat (supérieure à SD, qui s'en inspire avec des temps de validation très longs, gages de sérieux dans la chasse aux bugs) a aussi des exemples, mais plus sophistiqués: il vaut mieux commencer par explorer et jouer avec  les démos de SD....

Go Up