Mettre une variable dans un fichier texte

Bonjour tout le monde,
je suis étudiant en DUT GEII et je viens de faire l'acquisition d'un microcontrôleur Arduino UNO. Dans le cadre d'un projet, je dois faire l'acquisition d'une tension et envoyer sa valeur dans un fichier texte. J'arrive à faire l'acquisition et à afficher la valeur dans un fichier texte, mais je colle pour l'envoyer dans un fichier texte. Est-ce que quelqu'un aurait une idée?? Merci d'avance pour votre aide.
Pour info, voici mon code:

int val = 0; // On initialise la valeur val à 0
float x = 0; // On initialise x comme étant un flottant (nombre à virgule)

void setup()
{
Serial.begin(9600); // On initialise le port série à une vitesse de transmission de 9600 Bauds
}

void loop()
{
val = analogRead(A1); // On place la valeur lue par le port analogique A1 dans val
x = 5.0 * (val/1023.0); // On convertit la valeur lue en tension et on place la valeur dans x
Serial.print("Tension: "); // On écrit "Tension: " dans le moniteur série
Serial.println(x,DEC); // On écrit la valeur de x dans le moniteur série en précisant que c'est un nombre décimal
delay(3000); // On fait une acquisition toutes les 3 secondes
}

Salut,

ton problème semble se situer plutôt côté PC.
Il existe plein d'exemples de code pour un soft qui ouvre le port série, écoute et log dans un fichier texte.
exemple sur le playground.

Il faut "juste" choisir le langage qui va bien.

Gromain

normalement tu dois avoir des fonctions standard intégrées, qui te permettront de créer des fonctions de ce type:
fsvae fprintf fclose doivent à priori exister de base. à confirmer avec la lib d'écriture sur SD

int Save_Log(char * string_log)
{
FILE *fsave;
if(fsave=fopen("save_log.txt","a+"))
{
fprintf(fsave,"%s\n",string_log);
fclose(fsave);
}
return(0);
}

je dois faire l'acquisition d'une tension et envoyer sa valeur dans un fichier texte.

Là il y a une légère ambiguïté sur ton besoin. Le fichier texte dont il est question:

  • il est local à l'arduino, carte mémoire connectée à l'arduino par un moyen quelconque
  • il est distant, et dans ce cas il y a une communication entre l'arduino et un calculateur externe
    Peux-tu préciser pour que l'on puisse t'aider.

Pour information, il existe http://www.pachube.com/ qui permet de logger des données issues d'un ARDUINO.
Attention, il faut que l'ARDUINO puisse se connecter à internet...
Je vais essayer de faire cela avec la platine ETHERNET SHIELD http://www.lextronic.fr/P4649-platine-arduino-ethernet-shield.html.
J’essaierai aussi de logger des données dans un fichier situé dans la carte SD de la platine ETHERNET SHIELD.

Je dits j'essaierai car je n'ai pas encore pris le temps de faire ces essais...

j'ai déjà travaillé sur ce type de projet (arduino mega + ethernet + sd).

Il y a quelques petits trucs à savoir pour faire fonctionner Ethernet + Sd en même temps.

Sinon çà fonctionne trés bien. Je me sers entre autre de l'ethernet pour faire des logs de tous mes programmes (comme j'utilise le port série pour communiquer avec un soft que j'ai fait, je passe tous mes Serial.print(....) d'affichage de message par une console en telnet. C'est super pratique.

Tiens nous au jus.

A+

fdufnews:
Là il y a une légère ambiguïté sur ton besoin. Le fichier texte dont il est question:

  • il est local à l'arduino, carte mémoire connectée à l'arduino par un moyen quelconque
  • il est distant, et dans ce cas il y a une communication entre l'arduino et un calculateur externe
    Peux-tu préciser pour que l'on puisse t'aider.

Le fichier texte est placé sur mon ordinateur qui est relié à l'arduino via un câble USB.

karistouf:
normalement tu dois avoir des fonctions standard intégrées, qui te permettront de créer des fonctions de ce type:
fsvae fprintf fclose doivent à priori exister de base. à confirmer avec la lib d'écriture sur SD

int Save_Log(char * string_log)
{
FILE *fsave;
if(fsave=fopen("save_log.txt","a+"))
{
fprintf(fsave,"%s\n",string_log);
fclose(fsave);
}
return(0);
}

ok je vais essayer ça, merci pour ton aide, je te tiens au courant :slight_smile:

Yep!

bobbyscip, je crois que tu n'as pas compris la nature de ce code, il est utile dans le cas où un support sd est embarqué sur l'arduino.
Au contraire, ton fichier texte est externalisé sur un pc. Il te faut donc par l'intermédiaire des commandes serial.read / serial.print envoyer ta variable vers un programme qui saura traiter ces données.

Tu peux utiliser tout langage de programmation, c++, python, perl, etc.

Je vote Python :wink:

http://arduino.cc/forum/index.php/topic,56590.0.html

Ici avec processing :

http://arduino.cc/forum/index.php/topic,59744.0.html

@+

Zoroastre.

Pour le deuxième lien que Zoroatre donne, (http://arduino.cc/forum/index.php/topic,59744.0.html), l'
explication est en cours... mais si tu te débrouilles un peu en C tu n'auras pas de peine à comprendre que faire pour continuer. :slight_smile:

Le C n'étant pas ma spécialité, j'ai déjà essayé de faire un programme en python, mais je comprend pas bien comment faire le lien entre mon code Arduino et le code python (j'avais déja vu le topic sur l'enregistrement des températures), donc voilà, si quelqu'un pouvait me faire une ptite explication sa m'aiderait grandement.

il faut que tu lises en python le port serie et les envois d'arduino. Donc il faut déjà que tu saches te connecter sur le bon port com et recevoir, en python

depuis ton arduino, tu émets vers le pro série, et du ponctues par un println ta salve d'infos

dans ton programme en python, tu accumules le data du port serie jusqu'à recevoir le '\0' du retour de chariot ( le println)

tu analyses ta string en coours de réception, puis quand tu as un carcatere=='\0' tu écris en append dans ton fichier la ligne reçue, tu nettoies le buffer de réception et tu continues à écouter

Jsuis vraiment navré, mais comme je l'ai dis, la programmation n'est pas mon point fort, et j'ai pas tout compris à ce que tu viens de dire :~

Arduino, Processing, Python, C/C++,... c'est tout de la prog, donc si tu veux avancer, faut t'y mettre XD

Aller un ptit tuto pour du C/C++ :

http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html

si tu choisis le C tu seras TRES à l'aise avec l'arduino. c est le même langage ( sauf quelques petites subtilités) ! et non tu n'as pas le choix pour ton projet ! :grin:

Yep!

Tu travailles sous quel syteme d'exploitation ? Windows ? mac ? linux ?

@+

Zoroastre.

zoroastre:
Yep!

Tu travailles sous quel syteme d'exploitation ? Windows ? mac ? linux ?

@+

Zoroastre.

Je suis sous window XP

Bon j'ai jeté un petit coup d'oeil aux différentes façons de faire ce projet, et je me suis dis comme l'a souligné Karistouf que le C semble une bonne option. J'ai donc modifié mon code comme ceci:

#include <stdio.h>
#include <stdlib.h>

int val = 0;
float x = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
val = analogRead(A1);
x = 5.0 * (val/1023.0);
Serial.print("Tension: ");
Serial.println(x,DEC);

FILE *fp = fopen("fichier.dat", "r+b" );
rewind(fp);
fwrite(val, sizeof(int), 5, fp);
fclose(fp);
delay(3000);
}

Le problème est qu'il me dit qu'il ne connait pas fopen, est-ce que quelqu'un saurait pourquoi??

Tu ne serais pas en train de mélanger le code pour l'arduino avec celui pour le PC?

Oui je pense que je m'emmêle les pinceaux, le problème étant que je ne sais pas où écrire mon code en C...dans un programme comme Devcpp??