Hola
Tengo un problema, estoy haciendo un programa que mide la temperatura y si sobrepasa un valor máximo guarda ese valor en la memoria EEPROM de arduino a modo de caja negra pero me pone el mensaje que veis en el titulo y no se que tengo que hacer.
Este es el código
#include <EEPROM.h>
const int sensor=0;
int medida=0;
int miniVolts=0;
char C[29]="Imprimir valor de la memoria"
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{if (Serial.read = C)
{Serial.println="La memoria indica:";
Serial.println= EEPROM.read(1);
}}
miniVolts=(analogRead(sensor) * 5000L) / 1023;
medida= miniVolts / 10;
if (medida > 22.00)
{EEPROM.write(1,medida);};
Serial.println(medida);
delay(2000);
}
Si veis algún otro fallo decídmelo para corregirlo
Si claro, este es tu error
Hay muchos errores y esta desconectado tu código.
cuando pones
{if (Serial.read = C)
{Serial.println="La memoria indica:";
Serial.println= EEPROM.read(1);
esas 3 lineas estan mal.
Las ultimas dos puedo ponerlas correctamente
Pero la primera no tiene sentido.
No puedes definir C[29] y luego asignarle el valor que recibe por puerto serie
a menos que vayas desplazando el índice con algun contador desde 0 a 28 y en 29 volver a 0.
por eso te he pusto char c = Serial.read(); para que al menos leas en c el valor pero luego no se usa para nada
void loop()
{
if (Serial.available() > 0)
char c = Serial.read;
Serial.println("La memoria indica:");
Serial.println(EEPROM.read(1));
}}
miniVolts=(analogRead(sensor) * 5000L) / 1023;
medida= miniVolts / 10;
if (medida > 22.00)
{EEPROM.write(1,medida);};
Serial.println(medida);
delay(2000);
}
Gracias Surbyte
Hoy lo pruebo y te cuento como ha ido
He encontrado el error y lo he solucionado pero ahora me salta otro
error: lvalue required as left operand of assignment
He investigado un poco y creo que se debe a que estoy intentando convertir una variable escrita en un lenguaje en otra con otro lenguaje pero no se como solucionarlo.
#include <EEPROM.h>
const int sensor=0;
int medida=0;
int miniVolts=0;
int orden;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
Serial.read() = orden;
{if (orden == 1)
Serial.println("La memoria indica:");
Serial.println(EEPROM.read(1));
}}
miniVolts=(analogRead(sensor) * 5000L) / 1023;
medida= miniVolts / 10;
if (medida > 22.00)
{EEPROM.write(1,medida);};
Serial.println(medida);
delay(2000);
}
Cuando salta el error siempre dice en que linea es
Yo te corregí los errores
esto salta y esta mal
Serial.read() = orden;
en todo caso será
orden = Serial.read();
pero orden lo has definido como entero
entonces debes hacer esto
orden = Serial.read()-'0';
para que te devuelva un número entero
Gracias surbyte, pero cada vez que corrijo un error me salta otro a si que voy a crear un tema de solución de errores para no tener que crear muchos temas por cada error que me salte pasate a ver que opinas.
Sigue en este tema. No hace falta que crees otro nuevo cuando este sigue activo
Hola Surbyte, siento haber tardado en contestar.
He terminado el codigo y no me da errores pero el resultado no es el que esperaba.
Este es el codigo:
#include <EEPROM.h>//1
//2
const int sensor=0;//3
int medida=0;//4
int miniVolts=0;//5
int orden;
void setup()//8
{//9
Serial.begin(9600);//10
EEPROM.write(22,(1));
}//
void loop()
{//12
if (Serial.available() > 0){//13
orden = Serial.read()-'0';//14
{if (orden == 1)//15
Serial.println("La memoria 1 indica:");//16
Serial.println(EEPROM.read(1));//17
delay(500);}}//18
{if (orden == 2)//15
{
Serial.println("La memoria 2 indica:");//16
Serial.println(EEPROM.read(2));//17
delay(500);}};
{if (orden == 3)//15
{
EEPROM.write(1,(1));
Serial.println("La memoria 3 indica:");//16
Serial.println(EEPROM.read(3));//17
delay(500);}};
miniVolts=(analogRead(sensor) * 5000L) / 1023;//19
medida= miniVolts / 10;
Serial.println(medida);
if (medida > EEPROM.read(1))
{
EEPROM.write(medida,(1));
}
if (medida > EEPROM.read(1))
{
EEPROM.write(medida,(2));
}
if (medida > EEPROM.read(2))
{
EEPROM.write(medida,(3));
}
}//25
Y esto lo que me da en el monitor serial cuando le doy ordenes
1-La memoria 1 indica:
180
2-La memoria 2 indica:
255
20
La memoria 2 indica:
255
20
La memoria 2 indica:
255
20
La memoria 2 indica:
255
20
(el 20 es la temperatura del termómetro
3-Con la orden 3 indica lo mismo que o dos, entra en una especie de bucle hasta que le vuelvo a ordenar 1
No se ni por que entra en esos bucles ni por que indica esos valores a pesar que he intentado cambiarlos con una orden.
Prueba asi a ver si mejora o no
#include <EEPROM.h>
const int sensor=0;
int medida=0;
int miniVolts=0;
int orden;
void setup() {
Serial.begin(9600);
EEPROM.write(22,(1));
}
void loop()
{
if (Serial.available() > 0) {
orden = Serial.read()-'0';
case (orden) {
case 1:
Serial.println("La memoria 1 indica:");
Serial.println(EEPROM.read(1));
delay(500);
break;
case 2:
Serial.println("La memoria 2 indica:");
Serial.println(EEPROM.read(2));
delay(500);
break;
case 3:
EEPROM.write(1,(1));
Serial.println("La memoria 3 indica:");
Serial.println(EEPROM.read(3));
delay(500);
break;
}
}
miniolts=(analogRead(sensor) * 5000L) / 1023;
medida= miniVolts / 10;
Serial.println(medida);
if (medida > EEPROM.read(1))
EEPROM.write(medida,(1));
if (medida > EEPROM.read(1))
EEPROM.write(medida,(2));
if (medida > EEPROM.read(2))
EEPROM.write(medida,(3));
}
Mira, probé tu código y probé también a quitarle las dos ultimas memorias. Me di cuenta de que el error de los valores estaba en que estaba poniendo EEPROM.write(22,(1)); y no EPROM.write(1,(22));.Un fallo tonto pero que te fastidia el programa, ahora funciona perfectamente, este es el código, por si te interesa probarlo.
#include <EEPROM.h>
const int sensor=0;
int medida=0;
int miniVolts=0;
int orden;
void setup() {
Serial.begin(9600);
EEPROM.write(1,(22));
}
void loop()
{
if (Serial.available() > 0) {
orden = Serial.read()-'0';
if (orden == 1){
Serial.println("La memoria 1 indica:");
Serial.println(EEPROM.read(1));
delay(500);}}
miniVolts=(analogRead(sensor) * 5000L) / 1023;
medida= miniVolts / 10;
Serial.println(medida);
if (medida > EEPROM.read(1))
EEPROM.write(1,(medida));
delay(1000);
}
Gracias por ayudarme 
Si.. eso no supe que era.. y lo dejé.
Si lo resolviste ponle SOLUCIONADO al título. Mejor dicho agrégalo