escritura y comparación de datos

Hola.
Es la primera vez que escribo en este foro, y seguro que algo no hago bien, pido disculpas de antemano.

Estoy intentando hacer un pequeño proyecto y la verdad no se como empezar, ya que soy un principiante de lo mas principiante, paso a detallar.

Necesito poder grabar en la eprom algunos datos como por ejemplo números de 2 cifras (11, 12, 13,14 etc..) y atreves de un teclado cada vez que yo ponga un numero que este grabado, ue pueda poner una salida en alto o bajo.

No se como empezar, por favor darme alguna idea para poder empezar.

he mirado muchos tutores y solo veo com implementar un solo código, pero como he dicho soy principiante y no me aclaro.

gracias y disculpad si no estoy haciendo bien las cosas.

Google : Arduino EEPROM

Si he visto el tema de eeprom, pero el problema es como hacer que los compare. ejemplo

yo le guardo de forma manual varias cifras, 10, 12, 25, 45, 67 de forma que cuando yo pulse alguna cantina con el teclado compare si es igual a alguna de ellas, si es igual que encienda un led por ejemplo o si es diferente que no haga nada. Ahí es donde estoy atascado.

gracias

Bueno te recomiendo que busques en google : Arduino Keypad
Aca tienes la librería y un tutorial.
El tutorial esta muy claro.
Comienza por ahí y cuando lo hagas y comprendas seguimos conversando.
Te recomiendo que ya que afirmas ser principiante mejores tus habilidades y conocimiento viendo las clases de 0 a 7 y de 8 en adelante que están en Documentación. (son videos de Youtube muy bien realizados).

ok, los veo y comentamos.
gracias

lo que me comentabas del tutorial, lo tengo claro,
Se como funciona un teclado y como conectarlo con un arduino, e incluso verlo en un display, hasta ahi lo tengo claro

lo que no se es:
yo guardo una serie de numeros de 2 cifras en la eprom del arduino, hasta ahi en principio creo que se hacerlo, lo que no se es comparar , me explico, yo pulso en el teclado el 1 y el 2 osea un 12 y en el display veo 12, ahora lo que quiero es si ese numero esta guardado en eprom hacer algo si no no hacer nada, pulso otro numero el 20 por ejemplo y que si esta me lo diga.
a eso me refiero.

igual voy muy rapido.

gracias.

Cómo escribes tales números a la EEPROM?
Con put o write?

No has hecho nada y dices entenderlo pero no lo has hecho.
Porque no lo haces y vas viendo los problemas que se presentan?

Te di las indicaciones para que veas todo lo que necesitas y vuelves a pregutnar para que te lo hagan?

Leiste las normas que te pedí que leas?

Si quisiera que me lo hicieran, pagaria para que me lo hicieran. Tu respuesta no es agradable.
si no quieres ayudar no lo hagas, pero no des por sentado lo que no es. no soy ningun crio, es verdad que no se hacerlo, tampoco se programar, pero lo unico que busco es ayuda para empezar nada mas.
esto es solamente un hobby no busco nada mas.
con respecto a lo que me has dicho seria:

#include <EEPROM.h>

void setup() {
Serial.begin(9600);
}

void loop() {

EEPROM.write(3, 17);
EEPROM.write(4, 34);
EEPROM.write(5, 56);

Serial.print("");
Serial.print(3);
Serial.print("\t");
Serial.print(EEPROM.read(3), DEC);
Serial.println();

Serial.print("");
Serial.print(4);
Serial.print("\t");
Serial.print(EEPROM.read(4), DEC);
Serial.println();

Serial.print("");
Serial.print(5);
Serial.print("\t");
Serial.print(EEPROM.read(5), DEC);
Serial.println();

delay(50000);
}

con esto se escribir en la eeprom y se leer la posicion, pero nada mas.

// si el numero mas grande a guardar es un byte (0 a 255)
uchar pin_usado = 13;             // Puedes usar cualquier pin disponible
pinMode(pin_usado,OUTPUT);        // Configuramos el pin como salida
digitalWrite(pin_usado,LOW);       // Inicialmente el LED esta apagado
uchar numero;                    // Variable donde guardar el numero de la EEPROM
numero = EEPROM.read(3);          // Tomamos el numero desde la direccion 3 de la EEPROM
if(numero==211)                    // El numero es el 211 ??
{
     digitalWrite(pin_usado,HIGH);   // SI. Los numeros coinciden. Enciende el LED
{
else
{
     digitalWrite(pin_usado,LOW);   // NO. Los numeros no coinciden. Apaga el LED
}

Gracias de antemano Alfaville.
no entiendo muy bien.
eso es solo para un numero guardado, o deberia hacerlo para todos los numeros que yo guarde, puede ser solo 5 numeros o guardar 99.

No entiendo muy bien tus dudas.

El ejemplo que te he puesto muestra como comparar si un numero cualquiera (211 en el ejemplo) coincide con el que tenemos guardado en la posicion 3 de la memoria EEPROM. A partir de ahi se puede generalizar mediante un bucle para que compare una serie de numeros y en una o varias posiciones de la memoria EEPROM.

Si me detallas el resultado a conseguir quizas te pueda ayudar mas.
Saludos

la idea es la siguiente:
tengo una serie de numeros metidos en la eprom y con un teclado alguien viene y pone un numero, lo comparo con lo que tengo, si esta lo dejo pasar, si no no.

la comparacion la tendria que hacer con todas las posiciones, ya que no se en cual estaria.

Bueno, con lo que me comentas ahi va un pequeño sketch a modo de ejemplo.

  • Este sketch asume que cualquier numero estara comprendido en el rango 0 a 255, por lo que numeros tecleados como: 256, 1033, 710, etc,.. no son validos (habria que hacer un programa algo mas complicado.
  • Tambien asumimos que la cantidad de numeros almacenados en la EEPROM es: NUM_MAX (valor a definir).
  • Por ultimo damos por supuesto que la direccion inicial donde se encuentra el primer numero guardado en la memoria EEPROM es DIR_INI (valor a definir).[/li]
#define NUM_MAX   10   // Suponemos 10 numeros almacenados
#define DIR_INI       0    // Suponemos que estan a partir de la posicion 0

uchar nEntrada;            // Declaramos la variable que contendra el numero devuelto por el teclado
uchar pin_usado = 13;             // Puedes usar cualquier pin disponible
pinMode(pin_usado,OUTPUT);        // Configuramos el pin como salida
digitalWrite(pin_usado,LOW);       // Inicialmente el LED esta apagado

for(int n = DIR_INI; n < NUM_MAX; n++)     // Este bucle compara el numero con los 10 guardados
{
    if(nEntrada==EEPROM.read(n))     // Comparacion: ¿ hemos encontrado el numero ?
    {
         digitalWrite(pin_usado,HIGH);   // SI. Enciende el LED
         break;       // Sale del bucle de analisis (no necesitamos comparar mas)
    }
}

Atencion este ejemplo NO es totalmente funcional porque faltan partes como la captura del teclado y otras.
Por lo tanto tendras que completarlo de acuerdo con tus necesidades.

Si hay algo confuso comentalo y procurare aclararlo, porque el objetivo no es hacerte un programa y ya esta, sino como te han dicho los compañeros, que veas como se hace para que tu puedas hacerlo y lo mas importante: APRENDAS.

Saludos.

Te agradezco mucho tu ayuda, entiendo perfectamente lo que me has escrito he intentare poner ek resto de partes, cuando lo tenga os lo pongo y me dais el visto bueno.
Gracias
saludos.

No hay de que.
Al final todos estamos aprendiendo.

Menos mal que te pedí que leyeras las normas del foro.
Edita post 8 todo lo que has pegado como código. Cómo? lee las normas del foro, pero básicamente lleva tu mouse al post#8, click en More (abajo derecha) luego Modify y ya puedes editar, luego selecciona todo el código y click en </> SIMPLE!!

Tu código esta bien y mal a la vez.
Bien escrito y funciona, mal porque escribe indefinidamente cada 50 segundos los 3 valores en la EEPROM. Tardará mucho tiempo pero a la larga dañará esas posiciones de la EEPROM irreversiveblemente. (> 100k ciclos de escritura).

Asi que mejor no corras mucho el código. En su lugar pon las instrucciones EEPROM.write en el setup.
y luego las lees.

Vamos de nuevo. Esperaba ver un programa con el teclado. En su lugar solo muestras algo con la EEPROM
Esto es muy básico pero tal vez te ayude a entender lo que te astasca

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
bool flag = false;
bool teclapress = false;

void setup(){
  Serial.begin(9600);
  // si ya esta grabadas en la EEPROM coméntalas
  // EEPROM.write(3, 17);
  // EEPROM.write(4, 34);
  // EEPROM.write(5, 56);
}
  
void loop(){
  byte key = keypad.getKey();
  
  if (key){
    Serial.println(key);
    teclapress = true;
  }
  flag = false;
  for (byte i=3; i<6; i++) {
  	  if (key == EEPROM.read(i)) 
  	      flag = true;
  }
  if (teclapress) {
  	  if (flag) 
  		 Serial.println("Acceso permitido");
  	  else
  	 	 Serial.println("Accesp no permitido");
  	  teclapress = false;
  }
}

NOTA: me puedes decir cualquier cosa pero NUNCA que no ayudo.
No me gusta la la gente que no aporta nada y sigue preguntando.
De nuevo si no me entiendes lee las normas y si yo las interpreto mal me lo dices.
Las normas dicen que debes poner tu códgio y que debes ser claro y aportar toda la información.
Relee tu hilo y luego dime.