Go Down

Topic: Extraer datos de un case (Read 53 times) previous topic - next topic

Adalbert0

Buenos días, tengo una duda de como se puede extraer un dato de un case de inicio tengo esto en el case

 
Code: [Select]

 case 19:
       TPP = 21;
       Serial.print("TPP = ");
        Serial.println(TPP);
       break;
case 20:
       TPP = 22;
       Serial.print("TPP = ");
        Serial.println(TPP);
       break;
............etc


Entonces lo que necesito es usar la variable TPP fuera de los casos para una operación,se que se puede poniendo la operación dentro de cada caso de esta forma:

 
Code: [Select]
case 30:
       TPP = 7;
       Serial.print("TPP = ");
        Serial.println(TPP);
        SuperHead = (Temp -  TPP);
     Serial.print("SuperHerad = ");
        Serial.println(SuperHead);
       break;


el problema es que son 2500 casos los que ya tengo escritos y se me hace demasiado tedioso copiar y pegar en cada caso la operación.

Alguna manera de extraer el dato??

de antemano gracias por la atención.

UKHeliBob

Quote
what I need is to use the TPP variable outside of the cases
So what is stopping you ?

Quote
there are 2500 cases that I have already written
Then you are probably doing something wrong.  How unique are the cases and is there any fixed relationship between the case value and the actions that you take ?
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

Adalbert0

Then you are probably doing something wrong.  How unique are the cases and is there any fixed relationship between the case value and the actions that you take ?
Lo que pasa es que es una lectura de un sensor de presión que es de 0 a 500 psi entonces tenia que hacer una conversión pero no hay una relación matemática para esa conversión entonces se ingresan tablas de relación por ello los casos y son 2500 casos ya que son 5 tablas de 500 que ingrese.

Pero intente realizar la operación fuera de los casos y no me lee la variable TPP.
Solo se puede si es dentro del caso... pero me imagino que se tiene que poder sacara el dato.

Gracias por su atención 

surbyte

Hace falta ver todo el programa para responder algo.

Adjuntalo ya que se supone supera 9k

victorjam

A falta de saber cómo es el código entero, me imagino que el códig será similar a esto:

Code: [Select]

switch ( variable )
{
  case 1:
    tpp = x1;
    Serial.print("algo");
  case 2:
    tpp = x2;
    Serial.print("algo");
  case 3:
    tpp = x3;
    Serial.print("algo");
  
  // Aqui iran el resto.
  
  case 2500:
    tpp = x2500;
    Serial.print("algo");
  default:
    ...
}



Prácticamente haces los mismo en todos los case. El uso de tablas implica generalmente el uso de arrays, así que veo un mal enfoque del problema.

En este caso el tamaño del array (tabla) será de 2500 posiciones, con lo que el tamaño excede la memoria RAM del Uno con lo que habría que guardar esta tabla en la memoria flash usando el modificador PROGMEM

Y tú código debería parecerse a esto:

Code: [Select]

#include <avr/pgmspace.h>

// La tabla será un array del tanaño de las variables.
// Si la creo de tamaño "int" ocupará 2 bytes, total del array 5000.
// Si los x no tienen un valor superior a 256 se podría usar un byte.
const int variableArray[2500] PROGMEM = { x1, x2, x3, ..., x2500 };

// código extra..

// en el loop...
// Luego cuando quiera acceder a la variable, la leo de la memoria flash
// es el valor del "case".
tpp = prm_read_word_near(variableArray, variable);
Serial.print("algo");
// Y puedo trabajar con la variable tpp.


La ventaja de este código es que minimas el código a la mínima expresión, pero tienes que crear la tabla  de conversión. La desventaja es que comes memoria flash, pero creo que un case te va a comer tambíen mucho mas.

surbyte

Bueno por ahi iba mi respuesta tmb (similar a la de victorjam) pero a falta del código no quise adivinar.

Go Up