Advertisement
AntonioVillanueva

Power Save digitalPinToInterrupt EEPROM

Mar 15th, 2022
977
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Guarda datos en EEPROM cuando se produce una interrupcion de alimentacion
  3.  * la entrada D2 esta conectada a 12V , con un puente divisor (12V--R1{2K2}--(D2) ---R2{1K}--->GND)
  4.  * la vin del arduino nano a un 7805 con un condensador electrolitico ...
  5.  * cuando la alimentacion se corta cae rapidamente a 0 , utilizando una interrupccion
  6.  * attachInterrupt(digitalPinToInterrupt(D2), guardaMemoria, FALLING); al pasar de 1 a 0
  7.  * guardaMemoria efectua en este momento el SAVE de los datos en la EEPROM
  8.  * Antonio VILLANUEVA segura
  9.  */
  10.  
  11.  
  12. #include <Wire.h>
  13. #include <LiquidCrystal_I2C.h> //Pantalla i2c en i2c=0x27 1604A
  14.  
  15. #include <EEPROM.h>   //Memoria EEPROM datos persistentes
  16.  
  17. LiquidCrystal_I2C lcd(0x27,20,4);//Define la pantalla i2c en 0x27 1604A
  18.  
  19. //Las 2 entradas digitales que utilizamos D2 para la interrupcion y D7 como lectura de datos
  20. #define D2 2
  21. #define D7 7
  22.  
  23. int dato =0 ;//dato en RAM
  24. int dato_EEPROM= 0;//direccion del dato en EEPROM
  25.  
  26. void setup(){
  27.   //Serial.begin (9600);
  28.   //while (!Serial) { } //Wait USB Serial ttyUSB
  29.  
  30.   //El pin D9 directamente conectado a VCC detecta el corte de alimentacion
  31.   pinMode(D2,INPUT); //D2 entrada INTERRUPCION
  32.   pinMode(D7,INPUT); //D7 entrada LECTURA
  33.  
  34.  
  35.   recuperaMemoria(); //Lee dato de la EEPROM posicion dato_EEPROM=0 hacia la RAM dato
  36.  
  37.   lcd.init();
  38.   lcd.backlight();  
  39.  
  40.   lcd.setCursor (0,0);
  41.   lcd.print("DATO RECUPERADO EEPROM ");
  42.  
  43.   lcd.setCursor(0,1);
  44.   lcd.print (dato);
  45.  
  46.   delay(2000);
  47.  
  48.   lcd.clear();
  49.  
  50.   attachInterrupt(digitalPinToInterrupt(D2), guardaMemoria, FALLING); //Interrupcion PIN D2 llama guardar valor LOW CHANGE FALLING
  51.  
  52. }
  53.  
  54. void loop(){
  55.  
  56.   lcd.setCursor(0,0);
  57.   lcd.print ("D2 = ");
  58.   lcd.setCursor(4,0);
  59.   lcd.print (digitalRead (D7) );
  60.   lcd.setCursor(0,1);
  61.   lcd.print("dato = ");
  62.   lcd.setCursor(7,1);  
  63.   lcd.print(dato);  //Muestra el dato en el LCD
  64.  
  65.   dato++;
  66.  
  67.   delay(500);
  68. }
  69.  
  70. //Guarda en EEPROM el dato
  71. void guardaMemoria(){
  72.   EEPROM.put( dato_EEPROM, dato );  //Grabamos el valor
  73.   delay(1000);//Permite que se descargue
  74. }
  75.  
  76. //Lee el dato de la memoria EEPROM
  77. int recuperaMemoria( ){
  78.   return EEPROM.get( dato_EEPROM, dato );//Recupera dato de EEPROM hacia RAM
  79.  
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement