Buenos das soy nueva en este foro, tengo una duda relacionada con los potenciometros de la tarjeta shield que estoy utilizando, no soy capaz de independizar uno del otro.
El programa consiste en que los potenciometros simulen una temperatura y una concentración de CO2 y en función de estas encender un led RGB con tres colores posibles azul verde y rojo. El programa debe mostrarse en el ordenador y las variables del sensor de temperatura y co2 deben cambiarse de escala señalizando en la temperatura un intervalo de -50 a 100 y en co2 de 3000 a 200.
El programa debe leer la salidas del led cada 0.1 seg y la salida por pantalla debe ser cada segundo.
Por eso he introducido los bucles if.
Os dejo aquí mi código el cual no funciona correctamente ya que nbo son independientes lo potenciometros y no cambia bien la escala de los potencioemtros.
Muchas gracias =) =)
El programa consiste en que los potenciometros simulen una temperatura y una concentración de CO2 y en función de estas encender un led RGB con tres colores posibles azul verde y rojo. El programa debe mostrarse en el ordenador y las variables del sensor de temperatura y co2 deben cambiarse de escala señalizando en la temperatura un intervalo de -50 a 100 y en co2 de 3000 a 200.
El programa debe leer la salidas del led cada 0.1 seg y la salida por pantalla debe ser cada segundo.
Por eso he introducido los bucles if.
Os dejo aquí mi código el cual no funciona correctamente ya que nbo son independientes lo potenciometros y no cambia bien la escala de los potencioemtros.
Muchas gracias =) =)
Código:
// VARIABLES DE LOS POTENCIOMETROS
const int analogInPot1 = A0; // Entrada analogica del Pot1
const int analogInPot2 = A1; // Entrada analogica del Pot2
int sensortemperatura = 0; // Lectura de Pot-1
int sensorCO2 = 0; // Lectura de Pot-2
// VARIABLES PRIMER TRAMO
const int analogOutGreen = 9; // Salida, PWM, del led Verde
const int analogOutRed = 5; // Salida, PWM, del led Rojo
int outputValueGreen = 0; // Salida PWM para el LED Verde (analogica)
int outputValueRed = 0; // Salida PWM para el LED Rojo (analogica)
//LED AZUL
const int LedAzul = 8; // Pin del led Azul
//CONTADOR
int contador_med = 0;
int contador_tiempo = 0;
int n=0;
float tiempo;
//CAMBIO DE ESCALA
float value1;// Valor utilizado para cambiar de escala
float value2;// Valor utilizado para cambiar de escala
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
digitalWrite(LedAzul, HIGH); // led Azul, apagado
}
void loop() {
// Lectura de los dos canales analogicos:LECTURA DE LOS CANALES ANALÓGICOS (POTENCIOMETROS Y CAMBIO DE ESCALA)
sensortemperatura = analogRead(analogInPot1);
value1 =fmap(sensortemperatura, 0, 1023, -50, 100);
sensorCO2 = analogRead(analogInPot2);
value2 = fmap(sensorCO2, 0, 1023, 3000, 200);
analogWrite(analogInPot1, value1);
analogWrite(analogInPot2, value2);
if (contador_tiempo == 10)
{
// MENSAJES DE SALIDA EN PANTALLA ORDENADOR
Serial.print("Medida = ");
Serial.print(contador_med++);
if (contador_med > 99)
{
contador_med=0;
}
Serial.print("\t Temperatura actual = ");
Serial.print(value1);
Serial.println("ºC");
Serial.print("Nivel CO2 = ");
Serial.print(value2);
Serial.println("ppm");
Serial.println("");
Serial.print("\t Verde = ");
Serial.println(outputValueGreen);
Serial.print("\t Rojo = ");
Serial.println(outputValueRed);
Serial.println();
contador_tiempo = 0;
}
// "mapeo" del rango de valores inicial a los de la
// modulacion y luminosidad de cada LED (PWM):
outputValueGreen = map(sensortemperatura, 0, 1023, 255, 0);
outputValueRed = map(sensorCO2, 876, 0, 255, 0);
// Cambiamos el valor de la PWM de cada color:
analogWrite(analogOutGreen, outputValueGreen);
analogWrite(analogOutRed, outputValueRed);
// Esperamos un poco, 100ms, hasta la siguiente iteracion:
delay(100);
contador_tiempo++;
}
// cambio de escala entre floats
float fmap(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Última edición por un moderador: