Para que se usa la EEPROM.H en este skecth ?

#1
Hola a todos,

Estoy analizando este codigo que si no me equivoco sirve para encender un color determinado en un led rgb via bluetooth. Lo que veo es que hace uso de la libreria EEPROM.H y no se muy bien porque? Alguien me echa una manita?

Código:
/*
    //librerias
   #include <EEPROM.h>
 
    int ledRojo = 10; 
    int ledVerde=11; 
    int ledAzul=9;  
    int ledRojo2 = 5; 
    int ledVerde2=6; 
    int ledAzul2=3;  
    int red;
    int green;
    int blue;
    int accion=0;
    int bluetooth=2;
    int puerto=0;
    int primeraVez;
    int pinDefecto=1234;
    
     
    void setup() 
    {
      pinMode(bluetooth,OUTPUT); 
      digitalWrite(bluetooth,HIGH);
      
      Serial.begin(9600);
      
      primeraVez=EEPROM.read(0);
      
      if(primeraVez!=1){
        color(0,255,255);
        programer(pinDefecto);
        EEPROM.write(0,1);
        color(255,0,255);
      }
    }
     
    void loop() 
    {          
      
      while (Serial.available() > 0) {
        
        accion = Serial.parseInt();

           if(accion==1){
              puerto=Serial.parseInt();
              red = Serial.parseInt();
              green = Serial.parseInt();
              blue = Serial.parseInt();
           }
           if (Serial.read() == '\n') {
               color(red,green,blue);
           }
      }
      if(accion==2){
              color(0,255,255);
              delay(500);
              color(255,0,255);
              delay(500);
              color(255,255,0);
              delay(500);
      }
      if(accion==3){
        int pin = Serial.parseInt();
        
        if (Serial.read() == '\n') {
          color(255,0,0);
          programer(pin);
          accion=0;
          color(0,255,0);
        }  
        
      }
      
     
    }
    
    void programer(int pin){
        digitalWrite(bluetooth,LOW);
        delay(250);
        digitalWrite(bluetooth,HIGH);
        delay(5000);
        Serial.print("AT");
        delay(1000);
        Serial.print("AT+NAMEOMNIBLUG");
        delay(1000);
        Serial.print("AT+PIN"+pin);
        delay(1000);
        digitalWrite(bluetooth,LOW);
        delay(250);
        digitalWrite(bluetooth,HIGH);
    }
    
    
     
    void color(int rojo, int verde, int azul){
        
        if(puerto==1){
          analogWrite(ledRojo, rojo);
          analogWrite(ledVerde, verde);
          analogWrite(ledAzul, azul);
        }
        if(puerto==2){
          analogWrite(ledRojo2, rojo);
          analogWrite(ledVerde2, verde);
          analogWrite(ledAzul2, azul);
        }
        if(puerto==3){
          analogWrite(ledRojo, rojo);
          analogWrite(ledRojo2, rojo);
          analogWrite(ledVerde, verde);
          analogWrite(ledVerde2, verde);
          analogWrite(ledAzul, azul);
          analogWrite(ledAzul2, azul);
        
        }
        
    }
     
    //Fin
Gracias a todos
 
Última edición por un moderador:
#2
Al parecer es para guardar un valor predeterminado para iniciar el sistema la primera vez

Código:
void setup() 
{
pinMode(bluetooth,OUTPUT); 
digitalWrite(bluetooth,HIGH);

Serial.begin(9600);

primeraVez=EEPROM.read(0);

if(primeraVez!=1){
color(0,255,255);
programer(pinDefecto);
EEPROM.write(0,1);
color(255,0,255);
}
Allí se puede observar la utilización de la EEPROM para revisar si es la primera vez que se enciende el sistema y una vez que sale de ella pone un número 1 en la dirección 0 para indicar que el sistema ya ha sido prendido anteriormente
 
#3
Y tiene algun sentido hacer eso para controlar via bluetooth el color RGB de un LED?
Se podria eliminar algo de codigo? Quiero añadir despues codigo para controlar un termistor y alguna cosilla mas,por lo que me interesaria hacer esta parte del codigo lo mas liviana posible para luego añadir lo otro.
Podriais darme algun consejo para arreglar esta parte del codigo?
 
#4
Si, puedes eliminar todas las referencias a eeprom y en su lugar inicializar la variable con el valor que quieras, por ejemplo un cero.
 
#5
Entonces si lo único que quiero es mandar desde una app al Arduino para que encienda un color determinado o otro en el LED RGB. ¿Bastaría con dejar el código así? ¿Hay algún error?

A mi en el IDE me salta como error varios identificadores no declarados "color" "programer" "ledRojo2" "ledVerde2" y "ledAzul2"

Código:
int ledRojo = 10; 
    int ledVerde=11; 
    int ledAzul=9;  
    int red;
    int green;
    int blue;
    int accion=0;
    int bluetooth=2;
    int puerto=0;
    int primeraVez;
    int pinDefecto=1234;
    
     
    void setup() 
    {
      pinMode(bluetooth,OUTPUT); 
      digitalWrite(bluetooth,HIGH);
      
      Serial.begin(9600);
      }
     
    void loop() 
    {          
      
      while (Serial.available() > 0) {
        
        accion = Serial.parseInt();

           if(accion==1){
              puerto=Serial.parseInt();
              red = Serial.parseInt();
              green = Serial.parseInt();
              blue = Serial.parseInt();
           }
           if (Serial.read() == '\n') {
               color(red,green,blue);
           }
      }
      if(accion==2){
              color(0,255,255);
              delay(500);
              color(255,0,255);
              delay(500);
              color(255,255,0);
              delay(500);
      }
      if(accion==3){
        int pin = Serial.parseInt();
        
        if (Serial.read() == '\n') {
          color(255,0,0);
          programer(pin);
          accion=0;
          color(0,255,0);
        }  
        
      }
      
     
    }
    
    void programer(int pin){
        digitalWrite(bluetooth,LOW);
        delay(250);
        digitalWrite(bluetooth,HIGH);
        delay(5000);
        Serial.print("AT");
        delay(1000);
        Serial.print("AT+NAMEOMNIBLUG");
        delay(1000);
        Serial.print("AT+PIN"+pin);
        delay(1000);
        digitalWrite(bluetooth,LOW);
        delay(250);
        digitalWrite(bluetooth,HIGH);
    }
    
    
     
    void color(int rojo, int verde, int azul){
        
        if(puerto==1){
          analogWrite(ledRojo, rojo);
          analogWrite(ledVerde, verde);
          analogWrite(ledAzul, azul);
        }
        if(puerto==2){
          analogWrite(ledRojo2, rojo);
          analogWrite(ledVerde2, verde);
          analogWrite(ledAzul2, azul);
        }
        if(puerto==3){
          analogWrite(ledRojo, rojo);
          analogWrite(ledRojo2, rojo);
          analogWrite(ledVerde, verde);
          analogWrite(ledVerde2, verde);
          analogWrite(ledAzul, azul);
          analogWrite(ledAzul2, azul);
        
        }
        
    }
     
    //Fin
 
Última edición por un moderador:
#6
Si pero antes debes de declarar las variables que uses, por ejemplo:

int LedRojo2, color, etc. Esto es necesario para que el programa haga uso de ellas
 
#8
El problema es que doy palos de ciego. El codigo no es mio,lo encontré googleando y añadiendole que empiezo de cero, se convierte en un show.

Interpreto que en el original se trataba de enviar las señales a dos grupos de leds (de ahi lo de ledrojo y ledRojo2) y he intentado eliminar todas las referencias a ese segundo grupo.

Gracias Daniel Meza por lo de declarar las variables.

Scooter, como eliminarias los delays en este codigo? con que los substituirias?

PD: sigo buscando Arduino para Dummies ;)
 
#9
Porque se muere el sistema. No puedes hacer NADA.
Es mas lógico un bucle que compruebe si han pasado x ms y dentro de ese bucle miras el puerto serie o compruebas si alguien pulsa un botón
 

Temas similares

Arriba