Las placas Arduino tienen varios tipos de memoria. Primero, es la RAM estática (memoria de acceso aleatorio), que se utiliza para almacenar variables durante la ejecución del programa. En segundo lugar, es la memoria flash la que almacena los bocetos que ha escrito. Y en tercer lugar, es una EEPROM que se puede utilizar para almacenar información de forma permanente. El primer tipo de memoria es volátil, pierde toda la información después de reiniciar el Arduino. Los dos segundos tipos de memoria almacenan información hasta que se sobrescribe con una nueva, incluso después de apagar la alimentación. El último tipo de memoria, EEPROM, permite que los datos se escriban, almacenen y lean según sea necesario. Consideraremos este recuerdo ahora.
Necesario
- - Arduino;
- - computadora.
Instrucciones
Paso 1
EEPROM significa Memoria de solo lectura programable y borrable eléctricamente, es decir, memoria de sólo lectura borrable eléctricamente. Los datos de esta memoria se pueden almacenar durante decenas de años después de que se apaga la alimentación. El número de ciclos de reescritura es del orden de varios millones de veces.
La cantidad de memoria EEPROM en Arduino es bastante limitada: para placas basadas en el microcontrolador ATmega328 (por ejemplo, Arduino UNO y Nano), la cantidad de memoria es 1 KB, para placas ATmega168 y ATmega8 - 512 bytes, para ATmega2560 y ATmega1280 - 4 KB.
Paso 2
Para trabajar con la EEPROM para Arduino, se ha escrito una biblioteca especial, que se incluye en el IDE de Arduino por defecto. La biblioteca contiene las siguientes características.
leer (dirección) - lee 1 byte de EEPROM; dirección - la dirección desde donde se leen los datos (celda comenzando desde 0);
escribir (dirección, valor): escribe el valor del valor (1 byte, número de 0 a 255) en la memoria en la dirección de la dirección;
actualizar (dirección, valor): reemplaza el valor en la dirección si su contenido anterior difiere del nuevo;
get (dirección, datos): lee datos del tipo especificado de la memoria en la dirección;
poner (dirección, datos): escribe datos del tipo especificado en la memoria en la dirección;
EEPROM [dirección]: le permite utilizar el identificador "EEPROM" como una matriz para escribir y leer datos en la memoria.
Para usar la biblioteca en el boceto, la incluimos con la directiva #include EEPROM.h.
Paso 3
Escribamos dos enteros en la EEPROM y luego los leamos de la EEPROM y los enviemos al puerto serie.
No hay problemas con los números del 0 al 255, ocupan solo 1 byte de memoria y se escriben en la ubicación deseada usando la función EEPROM.write ().
Si el número es mayor que 255, entonces usando los operadores highByte () y lowByte () debe dividirse por bytes y cada byte debe escribirse en su propia celda. El número máximo en este caso es 65536 (o 2 ^ 16).
Mire, el monitor del puerto serie en la celda 0 simplemente muestra un número menor que 255. En las celdas 1 y 2, se almacena un número grande 789. En este caso, la celda 1 almacena el factor de desbordamiento 3 y la celda 2 almacena el número 21 faltante (es decir, 789 = 3 * 256 + 21). Para reensamblar un gran número, analizado en bytes, existe la función word (): int val = word (hi, low), donde hi y low son los valores de los bytes altos y bajos.
En todas las demás celdas que nunca hemos escrito, se almacenan los números 255.
Paso 4
Para escribir números y cadenas de coma flotante, use el método EEPROM.put (), y para leer, use EEPROM.get ().
En el procedimiento setup (), primero escribimos el número de coma flotante f. Luego nos movemos por el número de celdas de memoria que ocupa el tipo flotante y escribimos una cadena de caracteres con una capacidad de 20 celdas.
En el procedimiento loop () leeremos todas las celdas de memoria e intentaremos descifrarlas primero como tipo "float", y luego como tipo "char", y enviaremos el resultado al puerto serie.
Puede ver que el valor en las celdas 0 a 3 se definió correctamente como un número de punto flotante y, a partir del 4, como una cadena.
Los valores resultantes ovf (desbordamiento) y nan (no un número) indican que el número no se puede convertir correctamente a un número de coma flotante. Si sabe exactamente qué tipo de datos están ocupando las celdas de memoria, no tendrá ningún problema.
Paso 5
Una característica muy conveniente es referirse a las celdas de memoria como elementos de una matriz EEPROM. En este esquema, en el procedimiento setup (), primero escribiremos los datos en los primeros 4 bytes, y en el procedimiento loop (), cada minuto leeremos los datos de todas las celdas y los enviaremos al puerto serie.