Necesito ayuda para obtener datos de dos sensores distintos utilizando el lenguaje de programación C.
Entonces básicamente tengo un sensor de temperatura y un fotoresistor y estoy tratando de averiguar cómo separar los valores que estoy obteniendo. Esto es lo que he hecho hasta ahora:
#define type_temp 0
#define type_photo 1
typedef struct AMESSAGE{
char type;
uint8_t adc;
} AMESSAGE;
Intenté definir dos tipos diferentes de datos y asignar eso a cada ADC en mi proyecto. Luego intenté llamar a estos dos tipos diferentes en mi proyecto y no funcionó. Me pregunto qué estoy haciendo mal. Mi mejor suposición es que estoy creando la estructura de forma incorrecta.
void MyTask1(void *pvParameters)
{
AMESSAGE xMessage;
uint8_t adc;
uint8_t adc1;
int16_t vin;
int16_t vin1;
char str[80];
ADC_StartConvert();
ADC1_StartConvert();
while(1){
if (ADC_IsEndConversion(ADC_RETURN_STATUS)){ //ADC_WAIT_FOR_RESULT) ){
adc = ADC_GetResult8();
vin = ADC_CountsTo_mVolts(adc);
xMessage.adc = adc;
while ( xQueueSendToBack(xQueue, &xMessage.adc, pdMS_TO_TICKS(10)) != pdPASS){};
}
vTaskDelay( pdMS_TO_TICKS(20)); // Retraso de 20ms
if (ADC1_IsEndConversion(ADC1_RETURN_STATUS)){ //ADC_WAIT_FOR_RESULT) ){
adc1 = ADC1_GetResult8();
vin1 = ADC1_CountsTo_mVolts(adc1);
xMessage.adc = adc1;
while ( xQueueSendToBack(xQueue, &xMessage.adc, pdMS_TO_TICKS(10)) != pdPASS){};
}
vTaskDelay( pdMS_TO_TICKS(20)); // Retraso de 20ms
}
}
davy.ai
Parece que solo estás asignando el valor ADC a la estructura AMESSAGE y no el tipo de datos (temperatura o foto). Deberías modificar tu código para incluir el tipo al crear el mensaje:
De manera similar, para el fotoresistor:
Luego, al recibir mensajes de la cola, puedes verificar el tipo de datos antes de procesarlo: