Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

13/08/2014 #1


Para que se usa la EEPROM.H en este skecth ?
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
13/08/2014 #2

Avatar de Daniel Meza

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
14/08/2014 #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?
14/08/2014 #4

Avatar de Scooter

Si, puedes eliminar todas las referencias a eeprom y en su lugar inicializar la variable con el valor que quieras, por ejemplo un cero.
14/08/2014 #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
14/08/2014 #6

Avatar de Daniel Meza

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
14/08/2014 #7

Avatar de Scooter

Ves haciéndote el animo a no usar los delays para nada.
Mientras estás en un de la y el sistema está muerto y enterrado.
14/08/2014 #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
14/08/2014 #9

Avatar de Scooter

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
16/08/2014 #10


Como lo reescribirias tu Scooter?
16/08/2014 #11

Avatar de Scooter

Ya te lo he dicho, o usar interrupciones o usar un bucle mirando millis()
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.