QUE ES ESTO? error: invalid use of member function [Solucionado]

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 :slight_smile:

Si.. eso no supe que era.. y lo dejé.
Si lo resolviste ponle SOLUCIONADO al título. Mejor dicho agrégalo