desktop

Codigo de Arduino con tarjeta mbed

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 =) =)

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:
como usas código Arduino en una tarjeta de mbed? o mejor dicho, lo estas haciendo en el compilador de mbed?

Aparte de que se pierde tiempo en la transmisión y proceso (cosa que un delay() NO consideara) no entiendo muy bien cual es tu problema.
 
La tarjeta MBED esta acoplada al arduino, tambien son llamadas shields.

E problema que tengo es que no consigo independizar los potenciometros ni cambia bien de escala en estos para que el valor que me de no este comprendido de 0 a 1023 sino de -50 a 100.
 
Última edición:
Realmente no entiendo lo de la tarjeta mbed, tengo una FRDM-KL25Z, y las de mbed usan su lenguaje en C++, no se como le metes el lenguaje Arduino o que API le agregaste, ahora me confundes con que tiene conectada un Arduino.

Aclaremos que mbed es la plataforma online y las tarjetas son de distintos fabricantes, todas basadas en ARM Cortex-M y estas tienen ADC de 12 bits, no de 10 como los Arduino basados en AVR, tu lectura no se hace de 0~1023 sino de 0~4095, no se si tu API traduce a 10bits la lectura de 12, pero si no lo hace, es natural que termines teniendo valores raros en tu calculo.

Lo de "independizar" seria posible si usas una interrupción y que esta dispare la lectura independientemente de lo que esta haciendo tu programa, eso seria la única forma de corregir los efectos del proceso y que los tiempos sean acordes, no cada ves que termine el resto de procesos con un delay() que NO sabe cuanto tiempo ha pasado.

Por favor aclara que tarjetas y como las estas conectando para que tengamos una mejor idea de lo que estas haciendo, así como explicas es algo confuso.
 
Última edición:
Realmente no entiendo lo de la tarjeta mbed, tengo una FRDM-KL25Z, y las de mbed usan su lenguaje en C++, no se como le metes el lenguaje Arduino o que API le agregaste, ahora me confundes con que tiene conectada un Arduino.

Aclaremos que mbed es la plataforma online y las tarjetas son de distintos fabricantes, todas basadas en ARM Cortex-M y estas tienen ADC de 12 bits, no de 10 como los Arduino basados en AVR, tu lectura no se hace de 0~1023 sino de 0~4095, no se si tu API traduce a 10bits la lectura de 12, pero si no lo hace, es natural que termines teniendo valores raros en tu calculo.

Lo de "independizar" seria posible si usas una interrupción y que esta dispare la lectura independientemente de lo que esta haciendo tu programa, eso seria la única forma de corregir los efectos del proceso y que los tiempos sean acordes, no cada ves que termine el resto de procesos con un delay() que NO sabe cuanto tiempo ha pasado.

Por favor aclara que tarjetas y como las estas conectando para que tengamos una mejor idea de lo que estas haciendo, así como explicas es algo confuso.


Tiene mucha razón pero recuerda que habla de una Shield :unsure: que son completamente compatible con otras Shield Arduino;), no olvidemos que también existen las mbeduino, pero si usa la LPC1768 que tiene mas capacidad para que usar un Arduino? Ahí esta el dilema.

mbed-shield-s3ed-mbed-shield-43a.jpg
 
Última edición:
La Due y Zero igual usan Cortex-M junto con el ADC de 12 bits, pero para evitar confusiones, mejor que diga que Arduino es y el diagrama si se puede, esa función map debería estar bien.
 
Atrás
Arriba