Hola, necesito hacer un programa que cuando presiono un pulsador comienza a guardar datos obtenidos de un LM35, si vuelvo a presionar el pulsador deja de guardar los datos. Los datos que se guardan se separan en highByte y lowByte, y se guardan uno seguido del otro. Cuando se presiona otro pulsador comienza a leer la memoria tantas veces como se hayan guardado datos. Luego se unifican el highByte y el lowByte, y del resultado se obtiene la temperatura final.
El código que desarrolle es el siguiente, y el problema que tengo es en la escritura y lectura.
#include <Wire.h>
#define eeprom 0x50
const int pulsador1 = 2;
const int pulsador2 = 3;
const int led = 11;
const int led2 = 12;
int flag1 = 0;
int flag2 = 0;
int direccion = 00;
int entrada;
int entrada2;
float temp;
float temp2;
byte E[2];
byte MAS;
byte MEN;
byte RMAS;
byte RMEN;
int W;
int cont;
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(pulsador1, INPUT);
pinMode(pulsador2, INPUT);
attachInterrupt(digitalPinToInterrupt(pulsador1), Write, RISING);
attachInterrupt(digitalPinToInterrupt(pulsador2), Read, RISING);
}
void loop() {
digitalWrite(led,HIGH);
direccion = 00;
//WRITE
while(flag1==1){
flag2=0;
entrada = analogRead(A2);
temp = (5.0 * entrada * 100.0)/1024;
MAS = highByte(entrada);
MEN = lowByte(entrada);
Serial.print("MAS= ");Serial.println(MAS,BIN);
Serial.print("MEN= ");Serial.println(MEN,BIN);
E[0]=MAS;
E[1]=MEN;
for(int x=1; x>=0; x--){
Wire.beginTransmission(eeprom);
Wire.write(0x00);
Wire.write(direccion);
Wire.write(E[x]);
Wire.endTransmission();
delay(100);
direccion++;
}
direccion++;
W++;
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
Serial.print("Temperatura Guardada=");
Serial.println(temp);
cont=0;
delay(5000);
}
//READ
if(flag2==1){
flag2=0;
direccion=00;
digitalWrite(led2,HIGH);
for(int i=W-1; i>=0; i--){
Wire.beginTransmission(eeprom);
Wire.write(0x00);
Wire.write(direccion);
Wire.endTransmission();
delay(10);
Wire.requestFrom(eeprom,1);
delay(30);
RMAS = Wire.read();
delay(500);
Wire.beginTransmission(eeprom);
Wire.write(0x00);
Wire.write(direccion+1);
Wire.endTransmission();
delay(10);
Wire.requestFrom(eeprom,1);
delay(30);
RMEN = Wire.read();
delay(500);
Serial.print("RMAS= ");Serial.println(RMAS,BIN);
Serial.print("RMEN= ");Serial.println(RMEN,BIN);
entrada2=RMAS<<8|RMEN;
temp2 = (5.0 * entrada2 * 100.0)/1024;
Serial.print("Temperatura ");
Serial.print(i);
Serial.print("=");
Serial.println(temp2);
delay(500);
direccion = direccion+2;
}
digitalWrite(led2,LOW);
delay(1000);
}
}
void Write(){
cont++;
if (cont==1){
delay(5000);
if(flag1==1){
flag1=0;
}
else{
flag1=1;
}
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
}
}
void Read(){
delay(5000);
if(flag2==1){
flag2=0;
}
else{
flag2=1;
}
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
}