La fonction EEPROM.write ne permet que de stocker du byte
La curiosité n'est jamais un défaut dans le domaine technique, elle réserve souvent des surprises très agréables.
La première forme de curiosité est de lire le code de la fonction EEprom.write d'origine arduino (librairie EEprom de l'ide) :
void EEPROMClass::write(int address, uint8_t value)
{
eeprom_write_byte((unsigned char *) address, value);
}
Deuxièmme expression de la curiosité on voit que le fichier cpp fait l'inclusion suivante :
#include <avr/eeprom.h>
On continue en faisant une recherche google sur avr/eeprom.h et on arrive ici :
http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.htmlEt là on s'apperçoit qu'Arduino a :
- encapsulé une fonction avr sans rien y modifier. Opération inutile a part éviter aux utilisateurs d'utiliser un pointeur,
- limité les choix possibles au seul octet mais qu'il existe bien d'autres possibilités d'écriture dont celle du float qui n'attend que tu t'en serves.
uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__
uint16_t eeprom_read_word (const uint16_t *__p) __ATTR_PURE__
uint32_t eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__
float eeprom_read_float (const float *__p) __ATTR_PURE__
void eeprom_read_block (void *__dst, const void *__src, size_t __n)
void eeprom_write_byte (uint8_t *__p, uint8_t __value)
void eeprom_write_word (uint16_t *__p, uint16_t __value)
void eeprom_write_dword (uint32_t *__p, uint32_t __value)
void eeprom_write_float (float *__p, float __value)
void eeprom_write_block (const void *__src, void *__dst, size_t __n)
void eeprom_update_byte (uint8_t *__p, uint8_t __value)
void eeprom_update_word (uint16_t *__p, uint16_t __value)
void eeprom_update_dword (uint32_t *__p, uint32_t __value)
void eeprom_update_float (float *__p, float __value)
void eeprom_update_block (const void *__src, void *__dst, size_t __n)
Et cerise sur le gateau toutes les fonctions sont documentées.