Go Down

Topic: QUE ES ESTO? error: invalid use of member function [Solucionado] (Read 825 times) previous topic - next topic

Luxuxs01

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

Code: [Select]
#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


surbyte

Si claro, este es tu error
Hay muchos errores y esta desconectado tu código.
cuando pones 
Code: [Select]
{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


Code: [Select]
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);







Luxuxs01


Luxuxs01

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.

Code: [Select]
#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);



surbyte

Cuando salta el error siempre dice en que linea es
Yo te corregí los errores
esto salta y esta mal

Code: [Select]
Serial.read() = orden;
en todo caso será 


Code: [Select]
orden = Serial.read();

pero orden lo has definido como entero 
entonces debes hacer esto

Code: [Select]
orden = Serial.read()-'0';
para que te devuelva un número entero

Luxuxs01

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.

surbyte

Sigue en este tema. No hace falta que crees otro nuevo cuando este sigue activo

Luxuxs01

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:

Code: [Select]
#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.

surbyte

Prueba asi a ver si mejora o no

Code: [Select]
#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)); 

}

Luxuxs01

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.

Code: [Select]
#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 :)

surbyte

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

Go Up