Go Down

Topic: Convertire int to byte e non funziona il byte() cast (Read 526 times) previous topic - next topic

ferdinando

Salve, ho una funzione

Code: [Select]

void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data )


che scrive su eprom esterna.
se la lancio facendo :
Code: [Select]
i2c_eeprom_write_byte( 0x50, 0, '3'  );
   delay(10);
   i2c_eeprom_write_byte( 0x50, 1, '2' );
   delay(10);


e poi leggo i byte scritti, funziona, e mi stampa prima tre poi 2.

e a tale funzione gli volgli dare in pasto una variabile e faccio :
Code: [Select]
    int x =3;
    byte b = byte(x);
   
   i2c_eeprom_write_byte( 0x50, 0, x  );


mica lo scrive 3!!

come mai? come faccio a convertire una variabile in byte??? (non byte*)

Grag38

Its not a real conversion thet you must use, just a cast.

int x = 3;
byte b = (byte) x;

the '()' are around the type you want to cast, not like you did : byte(x) which the compiler understand as a function.

It could works if you wrote :

Code: [Select]


byte Byte(int x)
{
  return (byte) x;
}

void setup()
{
  int x = 3;
  int b = Byte(x);
}

void loop()
{
}


But notice that byte is different from Byte because of uppercase. This is the only other way in my own opinion.

ferdinando

ok grazie della risposta, ma è così macchinosa la cosa?

http://arduino.cc/en/Reference/ByteCast

perchè così non va?

C'è qualche cosa di più facile per sostituire   '3'  con x=3?

ypkdani


Code: [Select]
    int x =3;
    byte b = byte(x);
   
   i2c_eeprom_write_byte( 0x50, 0, x  );


mica lo scrive 3!!


prova a scrivere

Code: [Select]
   
    int x =3;  
   i2c_eeprom_write_byte( 0x50, 0, (byte)x  );

[/quote]

ferdinando

No, non funzione, magari sbaglio altro non lo so....

cmq posto tutto il codice di porva per scrittura e lettura byte da eeprom esterna.

Ho utilizzato anche altre funzioni come la write_page che riceve byte* che con itoa converto int in string è funziona alla grande.

qui invce non riesco a farmi ristampare la variabile, quindi se non me la stampa credo che neanche la salva.

e pure che mi sembra talmente banale...
Sul reference di byte()  c'è scritto che byte(x) riceve qualsiasi dato e restituisce byte. Perchè non va???????
Code: [Select]


  #include <Wire.h> //I2C library



  void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
    int rdata = data;
    Wire.beginTransmission(deviceaddress);
    Wire.send((int)(eeaddress >> 8)); // MSB
    Wire.send((int)(eeaddress & 0xFF)); // LSB
    Wire.send(rdata);
    Wire.endTransmission();
  }

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

  byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
    byte rdata = 0xFF;
    Wire.beginTransmission(deviceaddress);
    Wire.send((int)(eeaddress >> 8)); // MSB
    Wire.send((int)(eeaddress & 0xFF)); // LSB
    Wire.endTransmission();
    Wire.requestFrom(deviceaddress,1);
    if (Wire.available()) rdata = Wire.receive();
    return rdata;
  }

  void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length ) {
    Wire.beginTransmission(deviceaddress);
    Wire.send((int)(eeaddress >> 8)); // MSB
    Wire.send((int)(eeaddress & 0xFF)); // LSB
    Wire.endTransmission();
    Wire.requestFrom(deviceaddress,length);
    int c = 0;
    for ( c = 0; c < length; c++ )
      if (Wire.available()) buffer[c] = Wire.receive();
  }




  void setup()
  {
   
    Wire.begin(); // initialise the connection
    Serial.begin(9600);   
   

    int x =3;
   
   
   i2c_eeprom_write_byte( 0x50, 0, (byte)x  );
   delay(10);
   i2c_eeprom_write_byte( 0x50, 1, '2' );
   delay(10);
   i2c_eeprom_write_byte( 0x50, 2, '1' );
   delay(10);
   i2c_eeprom_write_byte( 0x50, 3, '0' );   
   delay(10); 
   Serial.println("Memory written"); 
   delay(10);
  }

  void loop()
  {

    Serial.println(i2c_eeprom_read_byte(0x50, 0));     
    Serial.println(" ");
    delay(1000);
   
    Serial.println(i2c_eeprom_read_byte(0x50, 1));     
    Serial.println(" ");
    delay(1000);
   
    Serial.println(i2c_eeprom_read_byte(0x50, 2));     
    Serial.println(" ");
    delay(1000);
   
    Serial.println(i2c_eeprom_read_byte(0x50, 3));     
    Serial.println(" ");
    delay(1000);   

  }


ypkdani

Tu fai :
Serial.println(i2c_eeprom_read_byte(0x50, 0));     
ma prova a cambiarlo in
Serial.println(i2c_eeprom_read_byte(0x50, 0),DEC);   

ferdinando

GRANDEEEEE!!

HO postato tutto il codice perchè mi era venuto il dubbio che quello che non andava era la stampa!!!
grazie, ma faccio ancora errori banali di programmazione
!!

ypkdani


Go Up