Pasar valores de variables entre clases de un mismo codigo

¡Hola! Buenos días, tardes o noches.
Estoy trabajando en un proyecto de un scooter eléctrico que cuenta con varios sensores y para cada sensor le asigné una clase. En este caso me enfocaré en la clase del sensor de velocidad que tiene instalado. El problema es que dentro de la clase asigné una variable PUBLICA llamada “velocidad” que tomará el valor calculado dentro de un método. La variable “velocidad” funciona bien solo que… Me gustaría pasar ese mismo valor obtenido en la clase “Velocimetro.h” a una clase diferente llamada “Pantalla” para despues mostrarlo en un display de 7 segmentos que estan conectados a un 74LS48.
Adjunto el código principal (.ino):

#include "Inicio.h"
#include "Bateria.h"
#include "Velocimetro.h"
#include <Arduino.h>

Bateria niveldebateria;
Inicio arranque;
Velocimetro veloz;

void setup() 
{
  arranque.configura(2,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2);
  arranque.chequeo(2,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2);
  niveldebateria.configsensordebateria(A3);
  veloz.configvelo(A4);
  Serial.begin(9600);
}

void loop() 
{
  niveldebateria.graficabat(10, 11, 12, 13, A3);
  veloz.sensorvelo(A4);
}

Adjunto el código de la clase donde se encuentra la variable “velocidad” y puse un comentario en la linea donde se encuentra dicha variable.

#include <Arduino.h>
class Velocimetro
{
  private:

  int boton=A4;
  int estadosalida;
  int contador;
  int estado;
  int distancia=44;
  unsigned long previousMillis;
  const long interval = 1000;
  unsigned long currentMillis;
  int t=0;
  
  public:
  int velocidad;


void configvelo(int boton)
{
pinMode(boton,INPUT);
}

void sensorvelo(int boton) 
{
  //Serial.println("Velocidad padre");
  //Serial.println(velocidad);
  estado=!digitalRead(boton);
  if(estado==1)
  {
    estadosalida=1;
  }
  
  if((estadosalida==1)&&(estado==0))
  {
    contador++;
    estadosalida=0;
  }
   
switch(contador)
{
  case 0:
        t=0;
        break;

  case 1:
            currentMillis = millis();
            if (currentMillis - previousMillis >= interval) 
                  {
                  previousMillis = currentMillis;
                  t=t+1;
                  }
            break;

  case 2:
            velocidad=(distancia)/(t);
            contador=0;
            break;

  default:

            break;
}
  }

};

Adjunto las otras clases si son de ayuda:
bateria

#include <Arduino.h>
class Bateria{
  private:
  int Bateria1= 10;
  int Bateria2= 11;
  int Bateria3= 12;
  int Bateria4= 13;
  int lectura= A3;

  public:
  
  void configsensordebateria(int lectura)
  {
  pinMode(lectura,INPUT);
  }
  void graficabat(int Bateria1,int Bateria2,int Bateria3,int Bateria4, int lectura)
  {
   lectura= map(analogRead(A3), 0, 1023, 0, 100);
   
    if((lectura>0)&&(lectura<=25))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,LOW);
      digitalWrite(Bateria3,LOW);
      digitalWrite(Bateria4,LOW);
    }
    if((lectura>25)&&(lectura<=50))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,HIGH);
      digitalWrite(Bateria3,LOW);
      digitalWrite(Bateria4,LOW);
    }
    if((lectura>50)&&(lectura<=75))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,HIGH);
      digitalWrite(Bateria3,HIGH);
      digitalWrite(Bateria4,LOW);
    }
    if((lectura>75)&&(lectura<=100))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,HIGH);
      digitalWrite(Bateria3,HIGH);
      digitalWrite(Bateria4,HIGH);
    }
    if(lectura==0)
    {
      digitalWrite(Bateria1,LOW);
      digitalWrite(Bateria2,LOW);
      digitalWrite(Bateria3,LOW);
      digitalWrite(Bateria4,LOW);
    }
  }
};

Inicio

#include <Arduino.h>
class Bateria{
  private:
  int Bateria1= 10;
  int Bateria2= 11;
  int Bateria3= 12;
  int Bateria4= 13;
  int lectura= A3;

  public:
  
  void configsensordebateria(int lectura)
  {
  pinMode(lectura,INPUT);
  }
  void graficabat(int Bateria1,int Bateria2,int Bateria3,int Bateria4, int lectura)
  {
   lectura= map(analogRead(A3), 0, 1023, 0, 100);
   
    if((lectura>0)&&(lectura<=25))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,LOW);
      digitalWrite(Bateria3,LOW);
      digitalWrite(Bateria4,LOW);
    }
    if((lectura>25)&&(lectura<=50))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,HIGH);
      digitalWrite(Bateria3,LOW);
      digitalWrite(Bateria4,LOW);
    }
    if((lectura>50)&&(lectura<=75))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,HIGH);
      digitalWrite(Bateria3,HIGH);
      digitalWrite(Bateria4,LOW);
    }
    if((lectura>75)&&(lectura<=100))
    {
      digitalWrite(Bateria1,HIGH);
      digitalWrite(Bateria2,HIGH);
      digitalWrite(Bateria3,HIGH);
      digitalWrite(Bateria4,HIGH);
    }
    if(lectura==0)
    {
      digitalWrite(Bateria1,LOW);
      digitalWrite(Bateria2,LOW);
      digitalWrite(Bateria3,LOW);
      digitalWrite(Bateria4,LOW);
    }
  }
};

Aquí es donde utilizaré el valor obtenido de “velocidad” en el metodo Número.

#include <Arduino.h>
class Pantalla : public Velocimetro
{ 
  private:
  
  int Pantalla1=A0;
  int Pantalla2=A1;
  int Pantalla4=A2;
  int Pantalla8=A3;

  public:
  
  void Modo(int Pantalla1, int Pantalla2,int Pantalla4,int Pantalla8)
  {
    pinMode(Pantalla1, OUTPUT);
    pinMode(Pantalla2, OUTPUT);
    pinMode(Pantalla4, OUTPUT);
    pinMode(Pantalla8, OUTPUT);
  }   
  
  void Numero(int Pantalla1, int Pantalla2,int Pantalla4,int Pantalla8)
  {
    switch(velocidad) //Valor que quiero obtener de la clase Velocimetro.h para después ejecutar un switch
    {
    case 0:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, LOW);
           digitalWrite(Pantalla8, LOW);
           break;

    case 1:
           digitalWrite(Pantalla1, HIGH);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, LOW);
           digitalWrite(Pantalla8, LOW);
           break;
           
    case 2:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, HIGH);
           digitalWrite(Pantalla4, LOW);
           digitalWrite(Pantalla8, LOW);
           break;
           
    case 3:
           digitalWrite(Pantalla1, HIGH);
           digitalWrite(Pantalla2, HIGH);
           digitalWrite(Pantalla4, LOW);
           digitalWrite(Pantalla8, LOW);
           break;

    case 4:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, HIGH);
           digitalWrite(Pantalla8, LOW);
           break;

    case 5:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, HIGH);
           digitalWrite(Pantalla8, LOW);
           break;

    case 6:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, HIGH);
           digitalWrite(Pantalla8, LOW);
           break;

    case 7:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, HIGH);
           digitalWrite(Pantalla8, LOW);
           break;

    case 8:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, HIGH);
           digitalWrite(Pantalla8, LOW);
           break;

    case 9:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, HIGH);
           digitalWrite(Pantalla8, LOW);
           break;

    case 10:
           digitalWrite(Pantalla1, LOW);
           digitalWrite(Pantalla2, LOW);
           digitalWrite(Pantalla4, HIGH);
           digitalWrite(Pantalla8, LOW);
           break;

    default:
            
            break;
    }
}
};

Muchísimas gracias y que tengan un excelente día :smiley:

Estoy preparando un material para mañana, lo miro más despacio, casi seguro que lo mejor es crear un método que permita consultar la propiedad, de echo es la mejor manera de usar objetos: nunca atacar las propiedades sin métodos

Es un vídeo y es un poco largo, si no te responden antes me lo bajo y le echo un vistazo ¿me pasas las 3 clases por favor?

Un saludo

TonyDiana:
Estoy preparando un material para mañana, lo miro más despacio, casi seguro que lo mejor es crear un método que permita consultar la propiedad, de echo es la mejor manera de usar objetos: nunca atacar las propiedades sin métodos

Es un vídeo y es un poco largo, si no te responden antes me lo bajo y le echo un vistazo ¿me pasas las 3 clases por favor?

Un saludo

Muchas gracias! Ya adjunté las demás clases. Me ayudaría muchísimo ver un ejemplo pequeñito de lo que usted habla.

La idea es hacerlo con tu propia clase el ejemplo, tengo mañana la clase a las 8 am y aquí son las 13:22, he de acabar un vídeo que se perdió misteriosamente en el campus académico, cuando eso lo tenga resuelto me pongo con tu ejemplo

TonyDiana:
La idea es hacerlo con tu propia clase el ejemplo, tengo mañana la clase a las 8 am y aquí son las 13:22, he de acabar un vídeo que se perdió misteriosamente en el campus académico, cuando eso lo tenga resuelto me pongo con tu ejemplo

Mil gracias!

Una primera respuesta rápida

veloz.velocidad te permite consultar el valor de esa propiedad, o asignarla.

Sólo debes llamar al objeto veloz según tu propio código para consultarlo ¿qué más dudas tienes?

Como no hay un sólo comentario, algo terrible, me va a costar un rato entender qué hace, pero luego te pondré el ejemplo de cómo usar la própiedad controlada con un método

Porque mis perros han decidido que no grabe nada de nada, vamos

Me has resuelto un problema que me ha estado quebrando la cabeza desde hace horas!!! Muchísimas gracias! “veloz.velocidad te permite consultar el valor de esa propiedad, o asignarla.” Esta fue la frase que me hizo entenderlo todo. Mil gracias por tu ayuda y te deseo suerte en lo que estas haciendo ahorita. Saludos.

Me alegro, un saludo

Moderador:
Lee el privado que te he enviado y extiende mi pedido a todo post repetido que tienes.

gusgaor:
Me has resuelto un problema que me ha estado quebrando la cabeza desde hace horas!!! Muchísimas gracias! "veloz.velocidad te permite consultar el valor de esa propiedad, o asignarla." Esta fue la frase que me hizo entenderlo todo. Mil gracias por tu ayuda y te deseo suerte en lo que estas haciendo ahorita. Saludos.

Cuidado, veloz.velocidad te devuelve el valor que tiene en ese momento, pero el calculo lo hace veloz.sensorvelo(A4), siempre tendrás que llamar a ese procedimiento antes, para que se actualice el valor. Lo correcto es que velocidad también sea un procedimiento que actualice el valor.

Exácto a eso me refería, no es buena idea colocar las propiedades públicas, sino crear un procedimiento/método que acepte el valor, incluso devuelva true o false si es correcto, algo que no puedes hacer con una propiedad.

Y POR DIOS PON COMENTARIOS EN EL CÓDIGO

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.