Problemas com memoria eeprom 24fc256

Hola, hace unos mese que tengo el arduino abandonado, pedi unas memorias y hoy me he decidido a montarlas, siguiendo los pasos de este hilo que no son muchos, y dado que su codigo es antiguo lo he probado en la version 0.22 pero no consigo que me vaya

pongo el codigo, el caso es que me sale todo el rato ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ y probando otro codigo me ponia " wire no abailable", porque puede fallar??

ARREGLADO: Como soy un alicate, habia puesto los cables en los pines digitales y no analogicos, xDDDD

Por otro lado estoy teniendo problemas para pasar un int superior a 255 osea 1 byte, ya que en cada posicion de memoria puede guardar 1 byte como puedo guardar un numero mayor de 255???

Asi serie con una cadena de texto:

char cadena[] = "hola mundo desde una eeprom"; // cadena a escribir
   Wire.begin(); // es obligatorio inicializar la conexion
   Serial.begin(9600);
   I²C_eeprom_write_page(0x50, 0, (byte *)cadena, sizeof(cadena));

void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
    Wire.beginTransmission(deviceaddress);
    Wire.write((int)(eeaddresspage >> 8)); // MSB
    Wire.write((int)(eeaddresspage & 0xFF)); // LSB
    byte c;
    for ( c = 0; c < length; c++)
      Wire.write(data[c]);
    Wire.endTransmission();
  }

Pero con un int no se como hacerlo.

Buenas ¡

Hacía mucho que no participaba, cuestiones de curro.

Es una pregunta típica y vale para muchas aplicaciones, en el playground entá linkeada

http://playground.arduino.cc//Es/FAQ

http://arduino.cc/forum/index.php/topic,69929.0.html

se puede hacer con cualquier tipo de dato, despues de guardarlo en bytes separados cuando lo leas tienes que reconstruirlo.

un saludo

Muchas gracias SrDonGato, me ha costao pero el escribir lo he resuelto así, no se si será la mejor manera pero esque he probado de todo y no sabia como hacerlo, ahora me falta el leerlo todo a la vez pero poco a poco, si se puede mejorar soy todo oidos.

void i2c_eeprom_write_data(int device, unsigned int add, byte *data) 
{
  byte err;
  byte cont=sizeof(data); //compruebo el tamaño de los datos por si hay que grabar en varias zonas de memoria
  for(err=0;err<cont;err++){
 Wire.beginTransmission(device);
 Wire.write((int)(add >> 8)); // left-part of pointer address
 Wire.write((int)(add & 0xFF)); // and the right
 Wire.write(data[err]); //los datos en bytes hacia donde apunta el puntero de datos
Wire.endTransmission ();
 delay(10);
 add++; // incremento en uno la direccion de memoriapara añadir otro dato en caso de haberlo
  }
}
void setup() 
  {
    //char somedata[] = "this is data from the eeprom"; // data to write
    int somedata=26;
    Wire.begin(); // initialise the connection
    Serial.begin(9600);
     int ji=820;
   byte *pDato = (byte *) &ji;
    Serial.println("Memory written");
    i2c_eeprom_write_data(0x50, 1,pDato);
    delay(10); //add a small delay


    Serial.println("Reading data...");

 d=readData(0x50,1);
 Serial.println(d, HEX);
 d=readData(0x50,2);
 Serial.println(d, HEX);
  }

  void loop() 
  {}
 byte *pDato = (byte *) &ji;

Hola, te importaría explicar esta linea? es que no se que hace y me gustaría entenderla por aprender algo nuevo.

gracias

Es el Puntero a byte (o a char tambien puede ser), para manejar el dato recibido, byte a byte.
por eso luego puedo hacer un for y escribir los datos uno a uno como si fuese un array.
Wire.write(data[err]);

Lo saque de un post, donde lo comento Valen, yo tampoco soy un experto en el tema pero me ha resultado valido.
http://arduino.cc/forum/index.php/topic,50658.15.html

Lo que no me queda claro es lo del byte alto y byte bajo, para escribir en la memoria, se supone que se puede mandar los dos a la vez, y yo de la forma que lo he puesto lo hago en dos pasos, pero como tienen que tener diferente direccion de memoria pues me tiene confundido para acerlo a la vez.