Go Down

Topic: Lire un fichier text (Read 3210 times) previous topic - next topic

bobijack

Bonjour,
Je suis étudiant en science et j'ai fait récemment l'acquisition d'un arduino uno pour mon travail  XD
J'aimerais calculer à partir d'un fichier text l'intensité d'une LED.
ce fichier contient des un pourcentage d'intensité lumineuse du temps 0 au temps final.
Existe t-il une commande capable d'assigner à une variable les valeurs de ce fichier text ???

Merci beaucoup pour votre aide :) :) :)

B@tto

Il viendrai de où le fichier texte ?
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

bobijack

#2
Mar 05, 2013, 06:36 pm Last Edit: Mar 05, 2013, 06:38 pm by bobijack Reason: 1
Salut B@tto,
Le fichier text est un fichier que j'ai crée à partir de Matlab par exemple.
Il contient un vecteur de % d'intensité :
[0 100 40 20 40 50 100 ... ]

il est localisé dans le même dossier que le code arduino dans l'ordinateur

B@tto

Oula oui c'est large comme idée, il va falloir préciser parce que la on peut imaginer plusieurs solutions : texte envoyé par un soft sur pc puis envoyé à l'arduino, lecture par l'arduino d'une carte sd ...
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

bobijack

En gros l'idée est de générer un vecteur d'intensité lumineuse (en pourcentage d'intensité) avec un soft tel que matlab.
J'enregistre donc ce vecteur dans un fichier text.
Puis mon but est d'importer ce fichier text dans l'arduino et lui faire lire à chaque pas de temps l'intensité lumineuse correspondante afin que ma led s'allume avec telle % d'intensité.

exemple :
[100 0 50 100]
si je prends comme pas de temps toutes les 5 secondes par exemples :
100 % d'intensité pendant 5 secondes puis 0 % d'intensité pendant 5 secondes puis 50 % d'intensité etc.

Peut être qu'il existe une solution plus simple sans passer par un fichier text à importer mais j'avoue que mes connaissance en arduino et en C sont vraiment très limités. =(

Merci beaucoup  :)

B@tto

Si on s'en tiens à un principe simple : http://www.earthshineelectronics.com/files/ASKManualRev5.pdf  ==> p58  il y a le programme côté arduino : on envoi une chaine par le port série contenant trois valeurs et l'Arduino allume une LED RGB en conséquence.

A toi après côté PC de créer un programme capable de lire ton fichier texte et d'envoyer la chaine à l'Arduino via le port série.

Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Heloderma-kris

#6
Mar 06, 2013, 05:07 pm Last Edit: Mar 06, 2013, 05:13 pm by Heloderma-kris Reason: 1
une solution si tu utilise une SD consisterai a ajouter des séparateur genre "; "éventuellement transformer tes valeurs en float ex: 50.0 , 100.0....etc
et utilisé la fonction :
Code: [Select]
ma_valeur=file.parseFloat (); qui recherche directement des float dans un fichier text
et te décaler dans ton fichier au fur est a mesure avec:
Code: [Select]
file.position()+1
au dépars c'est la solution que j'ai utiliser car vraiment plus simple a faire que d'analyser des suites de chaîne de caractère, la c'est les fonction de la lib SD.h qui le font pour toi !
mais il existe plein d'autre possibilité!

skywodd

Bonjour,

Il existe une solution pour ce genre de probléme : le format CSV.
http://fr.wikipedia.org/wiki/Comma-separated_values

Voici un exemple de code pour parser une ligne de texte en provenance du port série :
http://skyduino.wordpress.com/2012/03/22/arduino-parser-une-chaine-de-caracteres/

Le principe est le même avec un fichier sur une carte SD.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

bobijack

Bonjour à tous,

Merci pour vos messages et désolé de mon temps de réponse ...
je ne compte pas utiliser de carte SD mais directement passer par l'ordinateur.
Skywodd merci pour ta réponse mais dans ton cas il faut que je passe une ligne de texte en provenance d'un port série et j'avoue que je sais pas trop comment le faire ... aurais tu un lien qui explique comment faire ?

Merci à vous

skywodd


Skywodd merci pour ta réponse mais dans ton cas il faut que je passe une ligne de texte en provenance d'un port série et j'avoue que je sais pas trop comment le faire ... aurais tu un lien qui explique comment faire ?

Bon attend remet les choses au clair, qu'est-ce que tu veut faire exactement et comment ?
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

bobijack

Ok Je vais essayé d'être le plus clair possible ...

Donc j'ai un fichier texte de pourcentage d'intensité :
Code: [Select]

I = [100 50 20 30 40 90 80 30 ...]


Je veux faire lire ce fichier à l'arduino pour que toutes les 2 mins par exemple il réduise ou augmente l'intensité de 4 leds (les 4 leds se comportent de la même manière)
Donc avec l'exemple que j'ai donné les leds s'allumeront à 100% - puis 2 mins plus tard - 50 % - puis 2 mins plus tard 20 % ... etc.

J'ai un arduino uno mais je peux éventuellement acheter un shield pour carte SD si le problème se résout plus simplement comme ça :)

Merci infiniment de ton Aide ;) :)

Heloderma-kris

Moi je suis curieux de voir comment on fait pour lire un fichier text ou csv sur l'ordinateur et balancer tout sa sur le port serie ?
pour moi on peut pas sans un soft qui tourne coté PC , c'est peut'etre ça qui te pose probléme non?
avec processing sa doit pouvoir ce faire des truc comme ça mais j'ai jamais tester perso!

B@tto


Ok Je vais essayé d'être le plus clair possible ...

Donc j'ai un fichier texte de pourcentage d'intensité :
Code: [Select]

I = [100 50 20 30 40 90 80 30 ...]


Je veux faire lire ce fichier à l'arduino pour que toutes les 2 mins par exemple il réduise ou augmente l'intensité de 4 leds (les 4 leds se comportent de la même manière)
Donc avec l'exemple que j'ai donné les leds s'allumeront à 100% - puis 2 mins plus tard - 50 % - puis 2 mins plus tard 20 % ... etc.

J'ai un arduino uno mais je peux éventuellement acheter un shield pour carte SD si le problème se résout plus simplement comme ça :)

Merci infiniment de ton Aide ;) :)


Oui donc il faut "streamer" le texte par le port série. Une Arduino ne lit pas directement des textes comme un PC. Par contre par le port série tu peux lui transmettre des données, comme dans le lien que je t'ai donné. Donc il faut un soft sur le PC qui va pouvoir lire le texte et transmettre les données par le port série. Ou deuxième solution : utiliser une carte SD sur laquel tu auras préalablement copier ton fichier texte, et la avec la librairie adéquat on peut lire le fichier texte ou csv avec l'Arduino.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

bobijack

#13
Mar 20, 2013, 05:28 pm Last Edit: Mar 21, 2013, 09:46 am by bobijack Reason: 1
Merci pour ta réponse :)

J'ai essayé ce tuto :

http://arduinobasics.blogspot.co.uk/2012/05/reading-from-text-file-and-sending-to.html

Son exemple marche bien mais malheureusement j'ai du mal à comprendre le fichier processing ...
du coup j'ai du mal à modifier le code pour lire mon fichier texte et du coup modifier l'intensité de mes leds.

J'aimerai essayé les deux possibilité pour voir quelle solution est la plus simple pour mes expériences.

B@tto : j'ai en effet suivis ton exemple mais malheureusement ce qui me pause problème c'est le code pour envoyer les données à l'arduino via le port serie.

skywodd

Bonjour,

Regarde du côté de Python et de PySerial ;)
C'est un langage de programmation très simple et rapide à mettre en œuvre.

Ensuite ce qu'il faut que tu fasses c'est mettre en place un protocole de communication entre ton ordinateur et ton arduino.
C'est via ce protocole de communication que ton ordinateur va (au moment qui va bien) envoyer les ordres pour faire ceci ou cela à l'arduino.
Regarde dans la partie tutoriel du forum, Barbudor a fait un très bon tuto sur ce sujet ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up