Pages: [1] 2 3   Go Down
Author Topic: Gestion des variables / array avec arduino et divers types  (Read 3627 times)
0 Members and 1 Guest are viewing this topic.
France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour ,
Comme je disais dans la présentation , je me lance dans un projet de  gestionnaire d'aqua mais plus orienté "Fish room" que ceux déjà existants
Comme je n'en suis qu'au début , je suis au stade de vouloir gérer plusieurs températures via des ds18b20 et par la suites les alertes qui vont avec . le tout si possible d'une manière souple et évolutive.
Je préviens tout de suite , et c'est la que ça doit coincer : j'ai une approche très "php" , que je connais pas mal, de ce que je veux
Le souci c'est que avec l'arduino c'est très différent.

Donc en gros j'ai au départ mes adresses uint8_t des sondes onewire
je voulais faire une variable tableau[] du type :
array mes_sondes[] = ( adresse uint8_t , nom de la sonde , temp actuelle , temp min , temps max ...) (c'est un exemple très proche du php c'est juste pour expliquer l'idée)

(le but étant de pouvoir récupérer aisément liste de sondes avec les infos liées et de les traiter sondes par sondes
de pouvoir aussi modifier des données comme la temp min ou max pour les alertes)

donc je voulais stocker ça directement dans les variables , initialisé au lancement ou dans un / des fichiers sur carte sd ou en dernier recours dans l'eeprom ( je préfère pas )

Voila , en php cela ne me poserait aucuns soucis mais la je bloque sur les typages
questions :
peut on dans un array  avoir plusieurs types de variables ? si oui comment ?

sinon es-ce une solution ou es-ce que c'est irréalisable sur arduino
Si vous avez des pistes je suis preneur

Merci d'avance
Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je voulais faire une variable tableau[] du type :
array mes_sondes[] = ( adresse uint8_t , nom de la sonde , temp actuelle , temp min , temps max ...)
...
peut on dans un array  avoir plusieurs types de variables ? si oui comment ?

Ce que tu cherches s'appelle une structure :

Code:
typedef struct
{
  uint8_t adresse;
  char[10] nom_sonde;
  int temp_actuelle;
  int temp_min;
  int temps_max;
} MyStruct;

#define NB_ELEMENTS     10

MyStruct MyArray[NB_ELEMENTS];

void myFunction()
{
  int indice;

  MyArray[indice].addresse = ...;
}
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sa me fais penser un projet que j'avais commencer pour une personne.. (abandonné plus de nouvelle de cette personne.) gestion aquarium eau de mer... avec démarrage ecumeur .. chauffage .. refroid.. produit.. pulseur... time nourriture.. niveau d'eau.. lumiere ..
Logged

Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Super , merci beaucoup , en effet je pouvais toujours chercher , je cherchais pas vraiment du bon coté
pourtant ça fait une paire de jours que je cherchais j'ai vu plein de choses mais j'ai jamais croise de structure
encore merci !

sinon avant de poursuivre mes recherches , toujours pour mes sondes
est il techniquement possible de récupérer/écrire ces infos dans un genre de fichier config sur carte sd ?

@Tealcoune Ah mince c'est dommage c'était un projet commun avec la personne ou une commande ?
« Last Edit: September 13, 2012, 01:27:55 pm by Aqua-Passion » Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, sans problèmes

Avec la classe File et la fonction write( buf, len ) pour écrire et read( buf, len ) pour lire
Attention ca sera du binaire (pas lisible directement dans notepad)

Si tu veux quelque chose en ASCII, c'est faisable aussi. Pas compliquer à écrire mais un peu plus lourd a relire.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

D'accord merci je vais faire des recherches et essayer de faire quelque chose
Je crierais au secours si je trouve pas
Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

projet a peut près en commun.. j'étais surtout la en appui programmation... la recherche de solution c'étais le gars.. et il m'envoyé les composants pour faire la simulation ..
Logged

Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah ok , mince , c'est dommage que ça ai pas abouti :-(
Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon je coince encore surement à cause d'une subtilité:

j'ai un fichier par sonde avec les données de base
adresse ,nom, temp_min, temp_max
j'arrive à lire ça ligne par  ligne
J'ai cru comprendre que ça mettait les données de la ligne dans le buffer -> file.readLn(textBuffer, 50);
donc a chaque ligne si je fais Serial.print(textBuffer); j'ai le contenu de la ligne qui s'affiche dans le moniteur série
mais si je veux faire un truc du genre "sonde[0].nom_sonde = textBuffer;"
je ne récupère plus la même info mais un chiffe

J'ai cru comprendre que textBuffer était un array
Mais j'ai retourné ça dans tous les sens

en ayant "nomdelasonde" sur une ligne
impossible de trouver le moyen de le faire passer dans sonde[0].nom_sonde qui est un char*





Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

TextBuffer n'est pas un tableau de Char?
dans un code que j'avais fais pour lire les heures d'allumage et d'extinction des lumières d'aqua .. j'utiliser char cc = myFile.read(); // File myFile; en déclaration.

donc si ton sonde[0].nom_sonde est un Char, tu peux pas lui mettre un tableau de char.

Enfin si je me trompe pas .
Logged

Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui , d'après ce que j'ai compris TextBuffer est un tableau de Char
Mais je sais pas comment passer de ça a char pour mettre dans mon  sonde[0].nom_sonde
J'ai essayé de bidouiller 2-3 trucs
à chaque fois sur l'ecran tft je tombe soit sur 26 soit sur des caractères étranges ou un carré plein soir vide
je dois tourner autour :-p
Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

PHP et C sont très éloignés l'un de l'autre même si la syntaxe est similaire.

Donc je te suggère de partir de la base avant de bidouiller car certaines ne choses ne se font pas toutes seules comme en PHP (conversion de type, copie entre variables non-scalaires, ....).

Par exemple une chaîne de caractère en C est une suite de caractères placée dans un tableau de caractère et dont la fin est indiquée par un caractère de valeur 0 '\0'

char MaChaine[10] est un tableau de caractère pouvant comporter jusqu'à 10 caractères

char MaChaine[10] = "Hello"; crée une variable tableau de caractère et remplie les 6 premiers caractères avec les valeurs 'H', 'e', 'l', 'l', 'o' et '\0'

On n'a pas le droit de copier des chaines de caractères par le signe =
char MaChaine[10];
char MonAutreChaine[10] = "Hello";
MaChaine = MonAutreChaine; // Ca ne marche pas !

Il existe des bibliothèques standard qui vont permettre de faire cela.
Par exemple :

#include <string.h>
...
strcpy( MaChaine, MonAutreChaine );

ou mieux :

strncpy( MaChaine, MonAutreChaine, sizeof(MaChaine)-1 );

Bref, il y a beaucoup de chose a apprendre.

C'est pourquoi je te disait dans un message précédant que c'était plus facile de le faire en binaire en utilisant write( buffer, len)  et readBytes( buffer, len)  plutot qu'en ASCII.

Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah terrible , merci je n'avais pas saisi l'approche du C
ça fonctionne merci mais va falloir que je trouve un bouquin sur le C je pense
Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Le grand classique, celui avec lequel j'ai appris : http://www.amazon.fr/Le-langage-C-Norme-ANSI/dp/2100487345
C'est le C de base sans fioriture.
Attention, les exemples ne passeront pas tous sur Arduino car les fonctions d'affichage printf() n'existent pas.
Mais très bien avec la version gratuite de VisualC++ en utilisant le modèle "application console".
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

France (80)
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci
Logged

Cordialement, Stéphane
Administrateur Aqua-Passion.com

Pages: [1] 2 3   Go Up
Jump to: