Hola, estos dias he estado trabajando en un trabajo del instituto que consiste en lo siguiente:
Usar sensores DS18B20 con protectores termicos conectados a una arduino nano para que envien la informacion a una eeprom externa modelo I2C, dicha informacion seria enviada gracias a dos botones, uno en la derecha y otro en la izquierda, el de la derecha permitiria selecionar el tiempo entre mesuras variando entre 1 hora, 2 o 3, y el boton izquierdo serviria para confirmar la orden mencionada anteriormente. Esta informacion seria enviada con un cable usb hacia un ordenador portatil.
Dado a unos problemas he tenido que convertir los floats que recibian los sensores a bytes para que se pudieran enviar correctamente a la eeprom. El codigo era usado anteriormente para que solo leyera 10 lecturas y las enviara por el serial de la aplicacion pero ahora no puedo usar esto ya que tengo que usar los pulsadores.
He tenido una idea, definir la address 0 para que se guarde ahi el numero de lecturas hechas durante el tiempo y que guarde los bytes en las address 1,2,3,4(los floats se dividiran en los numeros enteros y decimales y seran convertidos en bytes.).
Alguna idea para definir la address 0 como el sitio donde guardar el numero total de muestras?
Gracias
Ahora mismo tengo el codigo tal que asi:
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define disk1 0x50 //Address of 24LC256 eeprom chip
// Data wire is plugged into pin 10 on the Arduino
#define ONE_WIRE_BUS 9
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
//definim variables
byte temps_entre_mesures=0;
byte temp_enter;
byte temp_decimal;
float temp_aire;
float temp_aigua;
unsigned int address = 0;
byte prova;
void setup(void)
{
Serial.print("Tria temps entre mesures(hores) ");
Serial.println("boto dret====>+hores, boto Esquerra====>confirmar ");//definim que fa cada boto
//inici sensors
pinMode(13,OUTPUT);
Serial.begin(115200);
pinMode(2,INPUT);// configurem sortida digital
digitalWrite(2,HIGH);// definim resistencia pullup
pinMode(4,INPUT);// configurem sortida digital
digitalWrite(4,HIGH);//definim resistencia pullup
Serial.println("Granotes");
Wire.begin();
// Start up the library
sensors.begin();
}
void loop(){
address=0;
delay (1000);
while(digitalRead(4))
{
if (!digitalRead(2))
{//si s'activa el boto 1
delay(1000);
temps_entre_mesures++; // sumem 1 hora al apretar el boto
Serial.print("Vols que es prenguin dades cada ");
Serial.print (temps_entre_mesures);
Serial.println(" hores?");
}
}
Serial.println("confirmat");
while(1)
{
for (int vegades=0;vegades<temps_entre_mesures;vegades++)
{
for (int segons=0;segons<100;segons++)
{
delay(10);
}
}
}
/*for (char i=0;i<10;i++)*/
sensors.requestTemperatures(); // diguis que envii temperatures
//llegeixo temperatures dels sensors
temp_aigua= sensors.getTempCByIndex(0); // Why "byIndex"?
temp_aire= sensors.getTempCByIndex(1); // Why "byIndex"?
//Serial.println("Temperatures__________");
//trossejo part entera i part decimal
temp_enter=(byte)temp_aire;
temp_aire=temp_aire-temp_enter;
temp_aire=temp_aire*100;
temp_decimal=(byte)temp_aire;
writeEEPROM(disk1,address,temp_enter);
delay(20);
writeEEPROM(disk1,address+1,temp_decimal);
delay(100);
temp_enter=(byte)temp_aigua;
temp_aigua=temp_aigua-temp_enter;
temp_aigua=temp_aigua*100;
temp_decimal=(byte)temp_aigua;
writeEEPROM(disk1,address+2,temp_enter);
delay(20);
writeEEPROM(disk1,address+3,temp_decimal);
delay(100);
address=address+4;
delay(100);
//encendre led
digitalWrite(13,HIGH);
delay(200);
digitalWrite(13,LOW);
{
address=4*i;
//llegim part entera temp aire
//llegir eeprom i enviar dades
temp_enter=readEEPROM(disk1,address);
delay(20);
temp_decimal=readEEPROM(disk1,address+1);
delay(20);
temp_aire=temp_enter*100;
temp_aire=temp_aire+temp_decimal;
temp_aire=temp_aire/100;
delay(50);
temp_enter=readEEPROM(disk1,address+2);
delay(20);
temp_decimal=readEEPROM(disk1,address+3);
delay (20);
temp_aigua=temp_enter*100;
temp_aigua=temp_aigua+temp_decimal;
temp_aigua=temp_aigua/100;
Serial.print(temp_aire);
Serial.print("\t");
Serial.println(temp_aigua);
delay(50);
}
}
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data )
{
// Serial.println(eeaddress);
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(data);
Wire.endTransmission();
delay(5);
}
byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
//Serial.println(deviceaddress);
if (Wire.available()) rdata = Wire.read();
return rdata;
}
el problema aparece en : address=4*i; ya que la i no esta definida.