Visual C++ .NET - Ayuda con programa para conmutación de sensores

 
Vista:

Ayuda con programa para conmutación de sensores

Publicado por Ruben (1 intervención) el 10/07/2012 19:17:19
Hola a todos, me gustaría saber si pudieran ayudarme con este problema: Estoy leyendo dos señales análogas mediante una tarjeta de adquisición, la primer señal se encuentra en el rango de 1.1V a 6.0V , la otra señal está en entre 4.6V y 9.5V. Entonces requiero una rutina que haga lo siguiente: Si la primer señal se incrementa hasta los 6V (obviamente el segundo canal también empieza a leer a partir de los 4.6V) deseo que la salida de la función sea el primer canal, si la señal rebasa los 6V la salida cambia a lo leído por el segundo canal. Ahora bien si el valor de la señal empieza a disminuir el segundo canal seguirá siendo la salida de la función mientras este sea mayor o igual al valor mínimo (4.6V) , luego la salida cambiaría a la señal leída por el primer canal (o sea el rango de 4.6V - 1.1V).

Espero me puedan ayudar.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Rutina para selección de señal analógica

Publicado por Alejandro (265 intervenciones) el 09/02/2024 23:58:53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
 
using namespace std;
 
double leerCanalAnalogico(double valorMinimo, double valorMaximo) {
    // Simulación de lectura de señal analógica
    double lectura = valorMinimo + ((double)rand() / RAND_MAX) * (valorMaximo - valorMinimo);
 
    return lectura;
}
 
double seleccionarSalida(double valorPrimeraSenal, double valorSegundaSenal, double umbral) {
    static bool primeraSenalActiva = true; // Bandera para mantener el estado actual de la selección
 
    // Verificar si la primera señal supera el umbral
    if (valorPrimeraSenal >= umbral) {
        primeraSenalActiva = true;
        return valorPrimeraSenal;
    }
 
    // Verificar si la segunda señal supera el umbral
    if (valorSegundaSenal >= umbral) {
        primeraSenalActiva = false;
        return valorSegundaSenal;
    }
 
    // Si ambas señales están por debajo del umbral, mantener la última selección
    return (primeraSenalActiva) ? valorPrimeraSenal : valorSegundaSenal;
}
 
int main() {
    // Definir los rangos de las señales
    double rangoMinimoPrimeraSenal = 1.1;
    double rangoMaximoPrimeraSenal = 6.0;
 
    double rangoMinimoSegundaSenal = 4.6;
    double rangoMaximoSegundaSenal = 9.5;
 
    // Valor umbral para cambiar entre las señales
    double umbralCambio = 6.0;
 
    // Simular lecturas de señales analógicas durante 10 iteraciones
    for (int i = 0; i < 10; i++) {
        // Leer valores de los canales analógicos
        double valorPrimeraSenal = leerCanalAnalogico(rangoMinimoPrimeraSenal, rangoMaximoPrimeraSenal);
        double valorSegundaSenal = leerCanalAnalogico(rangoMinimoSegundaSenal, rangoMaximoSegundaSenal);
 
        // Seleccionar la salida según la lógica especificada
        double salida = seleccionarSalida(valorPrimeraSenal, valorSegundaSenal, umbralCambio);
 
        // Mostrar resultados
        cout << "Iteración " << i + 1 << ": ";
        cout << "Primera señal = " << valorPrimeraSenal << ", Segunda señal = " << valorSegundaSenal << ", Salida = " << salida << endl;
    }
 
    return 0;
}

Rubén, este programa en Visual C++ .NET simula la lectura de dos señales analógicas y selecciona la salida según la lógica especificada en el problema. Se utiliza una función `seleccionarSalida` para implementar la lógica de selección y se simulan las lecturas de las señales analógicas en cada iteración del bucle principal. Asegúrate de adaptar este código a tu entorno de desarrollo y hardware real para la lectura de señales analógicas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar