Pages: [1] 2 3   Go Down
Author Topic: Comment incrémenter ceci 0x0100  (Read 2990 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

J'ai ce nombre 0x0100 qui affiche 256, dans mon terminal.

J'aimerais l'incrémenter de 100. Soit avoir
0x0100
0x0200
0x0300
0x0400
etc

Donc dans mon code, j'ai ceci
Es-ce que l'on augmente un hexa, comme ceci
Code:
byte hexa = 0x0100;
for(byte y=0;y<=10;y++){
  Serial.println(hexa);
  hexa = hexa + 0x0100;

}

J'aimerais pouvoir enregistré des données tous les 100 positions
Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3539
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'aimerais l'incrémenter de 100. Soit avoir
0x0100
0x0200
0x0300
0x0400
etc

Donc dans mon code, j'ai ceci
Es-ce que l'on augmente un hexa, comme ceci
Code:
byte hexa = 0x0100;
for(byte y=0;y<=10;y++){
  Serial.println(hexa);
  hexa = hexa + 0x0100;

}
Oui tu incrémenteras de 0x100

J'aimerais pouvoir enregistré des données tous les 100 positions
Là en fait tu enregistrera toutes les 256 positions 0x100 = 256 décimal
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je m'excuse mais je travaille pour la premiere fois avec un EEPROM

Mais ceci fais donc la meme chose

EEPROM.write(0x0100, data_len);
EEPROM.write(256, data_len);

Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3539
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je m'excuse mais je travaille pour la premiere fois avec un EEPROM

Mais ceci fais donc la meme chose

EEPROM.write(0x0100, data_len);
EEPROM.write(256, data_len);
Oui c'est la même chose

Ce n'est en aucun cas lié à l'utilisation de l'EEPROM. C'est la syntaxe de base du C voir là : http://arduino.cc/en/Reference/IntegerConstants
Logged

Orleans
Offline Offline
Jr. Member
**
Karma: 1
Posts: 88
Macbidouilleur
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est pas spécifique au C, c'est mathématique

100 en hexa, 256 en décimal, voie 1 0000 0000 en binaire sont juste des façons différentes d'afficher le même nombre.

Bon, en base 10 c'est plus facile pour nous, on a plus l'habitude.
Logged


83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 864
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu devrais dire plus facile pour vous, on prend facilement le reflex de compté en héxa ou en binaire quand on devient des gens comme nous xD
Logged

Un tien vaux mieux que deux tu l'auras !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Donc je peux aussi remplacer ceci
Code:
#define EPROM_POS 0x0001
#define EPROM_LON 0x0008
#define EPROM_LAT 0x0024
#define EPROM_ALT 0x0040
#define EPROM_TIM 0x0056
#define EPROM_VEL 0x0072
#define EPROM_STA 0x0088
par un truc du genre
Code:
#define EPROM_POS 100
#define EPROM_LON 106
#define EPROM_LAT 132
#define EPROM_ALT 148
#define EPROM_TIM 164
#define EPROM_VEL 180
#define EPROM_STA 196
Ca serait en effet, plus simple pour moi
Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3539
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Donc je peux aussi remplacer ceci
Code:
#define EPROM_POS 0x0001
#define EPROM_LON 0x0008
#define EPROM_LAT 0x0024
#define EPROM_ALT 0x0040
#define EPROM_TIM 0x0056
#define EPROM_VEL 0x0072
#define EPROM_STA 0x0088
par un truc du genre
Code:
#define EPROM_POS 100
#define EPROM_LON 106
#define EPROM_LAT 132
#define EPROM_ALT 148
#define EPROM_TIM 164
#define EPROM_VEL 180
#define EPROM_STA 196
Ca serait en effet, plus simple pour moi
je ne comprends pas très bien comment tu passes de l'un à l'autre

Pour moi

#define EPROM_POS 0x0001       =    1
#define EPROM_LON 0x0008       =    8
#define EPROM_LAT 0x0024       =   36
#define EPROM_ALT 0x0040       =   64
#define EPROM_TIM 0x0056       =   86
#define EPROM_VEL 0x0072       = 114
#define EPROM_STA 0x0088       = 136
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Je vais passer pour un vieux reloue mais dans ce genre de cas rien ne vaut un bon lien wikipedia pour (re)partir sur de bonne base (16) smiley-wink
http://fr.wikipedia.org/wiki/Système_hexadécimal

Manifestement tes notions de calculs en hexadécimal et en décimal sont encore assez flou.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait je cherche a faire la chose suivante, pour etre plus clair sur ma prochaine questionnement

J'ai des variable de type char

char cou[6]
qui peut contenir une valeur entre 0 et 999999

char lon[15]
qui peut contenir un nombre de 14 chiffre  : expl: 45.123540300000

char lat[15]
qui peut contenir un nombre de 15 chiffre  : expl: 235.12354030000

char alt[15]
qui peut contenir un nombre de 15 chiffre  : expl: 845.12000000000
( ca eut avoir pas de sens, mais je préfère garder 15 unité, pour le moment, meme si deux apres la virgule suffit)

char tim[15]
qui peut contenir un chiffre a 14 chiffre
20130936293040

char vel[15]
qui peut contenir un nombre a 15 chiffre : expl : 2.9999999999999

char sta[1] doit aussi, comme pour les autre ajouté 1 pour le \0 ?(char sta[2])
qui contient un chiffre a à nombre, expl : 3

J'aimerais prévoir un espace de mon EEPROM pour stoské ces chiifre, mais je ne sais pas encore comment prévoir cette espace.

Par exemple
pour pos, ce chiffre de 1 à 999999, sera enregistré à la position une
Code:
#define EPROM_COU 1
mais pour les suivante, comment je peux savoir la position qu'il faut prévoir, juste après l'enregistrement de cou, à la position1

Etant donné que 999999 à 6 "untié", je pense que la position pour lon sera 8
Code:
#define EPROM_LON 8

Et etant donné que LAT peut avoir 15 caravtere LAT sera à 24
Code:
#define EPROM_LAT 24

Mon résonnement est juste? En fait j'ai un mega doute, parce que 24 en exa c'est 18, car j'oublie de conter A,B,C,D,E,F après 9

Donc si je corrige
Code:
#define EPROM_LAT 18

Et si je continue pour alt en additonant 15, ca serait pas 40 (en fair c'est 24+15=39, mais je compte 40), ca ferait 28 en hexa.

C'est bien ca non?

Si je veux incrémenter de 100, c'est que par la suite je veux enregistrer des positions tous les minutes. Donc pour plus facilement me retrouver (mais encore a déterminer), je pensais enregistrer au centaine pour la premiere minuet, au 200 pour la deuxiem minute comme pare exemple

Quote
position 101 pour COU la premiere minute
position 108 pour LON la premiere minute
position 118 pour LAT la premiere minute
etc..
Quote
position 201 pour COU la deuxime minute
position 208 pour LON la deuxieme minute
position 218 pour LAT la deuxime minute
etc..
Quote
position A01 pour COU la 10eme minute
position A08 pour LON la 10eme minute
position A18 pour LAT la 10eme minute
etc..
Quote
position C01 pour COU la 12eme minute
position C08 pour LON la 12eme minute
position C18 pour LAT la 12eme minute
etc..
Quote
position F01 pour COU la 15eme minute
position F08 pour LON la 15eme minute
position F18 pour LAT la 15eme minute
etc..

Voilà l'idée.

Qu'en pensez vous?
« Last Edit: September 17, 2013, 02:45:33 pm by pierrot10 » Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'en pense que tu t'égares.

utiliser une chaine de caractères pour stocker une valeur numérique n'a pas de sens. une chaine de caractères, c'est en effet un nombre, mais en base 256...

Sais-tu exactement ce dont tu as besoin? Certes arduino est conçu et orienté pour les débutants, mais il y a des limite. Le prends pas mal, c'est loin d'être un reproche. Mais juste un conseil, essaie de comprendre la notion de valeur dans une variable, le net en est plein.

par ailleurs, si tu tentes un truc genre :

Code:
char cou1[6] = "100000";
char cou2[6] = "050000";

char cou3[6] = cou1 + cou2;

tu vas t'arracher des cheveux, crois-moi.

déjà, ça utilisera 21 octets de mémoire, alors que pour 12 octets, tu as :

Code:
long cou1 = 100000;
long cou2 = 50000;

long cou3 = cou1 + cou2;

et en plus, ça, ça marche...
Logged

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3539
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je m'excuse mais je travaille pour la premiere fois avec un EEPROM

Mais ceci fais donc la meme chose

EEPROM.write(0x0100, data_len);
EEPROM.write(256, data_len);
Oui c'est la même chose

Ce n'est en aucun cas lié à l'utilisation de l'EEPROM. C'est la syntaxe de base du C voir là : http://arduino.cc/en/Reference/IntegerConstants

Tu n'es pas aller voir le lien que je t'avais donné ou alors tu n'as pas compris.

Lorsque tu écris un chiffre de cette manière 101 c'est du décimal
Lorsque tu écris un chiffre de cette manière 0x101 c'est de l'hexadécimal
Lorsque tu écris un chiffre de cette manière B101 c'est du binaire
Suivant la base utilisé la valeur ne représente évidemment pas la même chose.

Si tu n'es pas à l'aise avec l'hexadécimal, pourquoi te faire du mal. Utilise la notation décimal. De toute façon, le compilateur se fiche complètement de la base que tu utilises pour compter au final il traduit tout ça dans son mode de comptage à lui.

Le fait d'écrire dans l'EEPROM n'impose pas un mode d'écriture particulier pour les valeurs. Les données stockées dans l'EEPROM se présentent comme celles qui sont stockées dans la RAM ou dans la Flash.
« Last Edit: September 17, 2013, 03:06:34 pm by fdufnews » Logged

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3539
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

une chaine de caractères, c'est en effet un nombre, mais en base 256...


Une chaîne de caractères c'est une information stockée sous forme de texte c'est tout.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

D'acord, je vous remercie pour ces informations.
Quote
J'en pense que tu t'égares.
Probablement  smiley je nage un peu, mais je commence à m'orienter  smiley

Quote
Lorsque tu écris un chiffre de cette manière 101 c'est du décimal
Lorsque tu écris un chiffre de cette manière 0x101 c'est de l'hexadécimal
Lorsque tu écris un chiffre de cette manière B101 c'est du binaire
En effet, je n'avais pas bien compris, désolé.
Quote
utiliser une chaine de caractères pour stocker une valeur numérique n'a pas de sen

En fait, la librairie que j'utilise, retourne les positions dans une variable de type char. Mais ta remarque sur l'espace qu'utilise un char m'intrique. Mais vu mon niveau, je vais rester avec des char. Et uen fois que j'aurais la métrise, je regarderai ensuite.

Mais sur ce plan, je vais donc garder le meme résonnement que j'ai décris dans mon précédent post, mais je vais informer les positions en hexas
Quote
#define EPROM_COU 0x0001
#define EPROM_LON 0x0008
...
#define EPROM_LAT 0x0018
Quote
position 0xC01 pour COU la 12eme minute
position 0xC08 pour LON la 12eme minute
position 0xC18 pour LAT la 12eme minute

Quote
char cou1[6] = "100000";
char cou2[6] = "050000";

char cou3[6] = cou1 + cou2;
Je ne ferai jamais ca. je stoke des infromations, je n'ai pas besoin de faire des calculs etc


Et donc pour incrémenté les positions en fonction des minutes, je pense que ceci est valable, selon un précédent post

Code:
#define EPROM_COU 0x0001
byte increment = 0x0100;
byte result;

result = EPROM_COU + increment;
Serial.println(result); // 0x0101;

ou encore
Code:
#define EPROM_TEST 0x0901
byte increment = 0x0100;
byte result;

result = EPROM_COU + increment;
Serial.println(result); // 0x0A01;

Merci encore pour vos lumières
Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Par contre, je suis surpis d'un truc

Code:
#define EPROM_INC 0x0100
byte mask = 0x1100;

mask = mask+EPROM_INC;


mask devrait être egal à
Quote
0x1200
non?

Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

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