01-04-2015, 07:36 PM
Buenas a todos,
En uno de los trabajos que tengo que hacer para la universidad, a estas altura de la vida estudiando otra vez :nuse: , me han puesto un ejercicio en el cual tengo que medir la temperatura con un LM35 y representarla en un contador binario con 4 leds.
Os pongo como lo he resuelto y acepto comentarios para ir mejorando en programación que estoy un poco verde.
Todo aquello que me digais será bien recibido :aplauso:
Ahora voy a montarlo en la protoboard y probar.
En uno de los trabajos que tengo que hacer para la universidad, a estas altura de la vida estudiando otra vez :nuse: , me han puesto un ejercicio en el cual tengo que medir la temperatura con un LM35 y representarla en un contador binario con 4 leds.
Os pongo como lo he resuelto y acepto comentarios para ir mejorando en programación que estoy un poco verde.
Código:
int led1 = 13; // Posición 0 binario
int led2 = 12; // Posición 1 binario
int led3 = 11; // Posición 2 binario
int led4 = 10; // Posición 3 binario
int sensor_temp = 0; // Sensor de temperatura conectado a pin A0 de Arduino
float temperatura = 0; // Variable para almacenar la temperatura en grados
int valor_sensor = 0; // Variable para almacenar el valor crudo del sensor de temperatura (de 0 - 1024)
const int tempMin = 14; // Temperatura mínima a mostrar
const int tempMax = 30; // Temperatura máxima a mostrar
void setup() {
Serial.begin(9600); // Empezar comunicacion serie con el PC
// Seteamos puertos como salida para leds + entrada para el sensor de temperatura
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(sensor_temp,INPUT);
}
void loop () {
valor_sensor = analogRead(sensor_temp); // Leer el calor del sensor (valor de 0 a 1024)
temperatura = (5.0 * valor_sensor * 100.0)/1024.0; // Calcular temperatura en ºC con formula
int rango = map(temperatura, tempMin, tempMax, 0, 15);
Serial.print(temperatura); // Mandar temperatura al serial monitor
Serial.println("C"); // Mandar el simbolo de grados y pasar a la siguiente linea
delay(1000); // Espera 1 segundo antes de empezar de nuevo
switch (rango) {
case 0:
temperatura1();
break;
case 1:
temperatura2();
break;
case 2:
temperatura3();
break;
case 3:
temperatura4();
break;
case 4:
temperatura5();
break;
case 5:
temperatura6();
break;
case 6:
temperatura7();
break;
case 7:
temperatura8();
break;
case 8:
temperatura9();
break;
case 9:
temperatura10();
break;
case 10:
temperatura11();
break;
case 11:
temperatura12();
break;
case 12:
temperatura13();
break;
case 13:
temperatura14();
break;
case 14:
temperatura15();
break;
case 15:
temperatura16();
break;
}
delay(1);
}
void temperatura1() {
if (temperatura <= 15) // si la temperatura es menor o igual a 15 se encendera 0000
{
digitalWrite (led1, LOW);
digitalWrite (led2, LOW);
digitalWrite (led3, LOW);
digitalWrite (led4, LOW);
}
}
void temperatura2() {
if (temperatura > 15 && temperatura <= 16) // si la temperatura es mayor de 15 y menor o igual a 16 se encendera 0001
{
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, LOW);
digitalWrite (led4, LOW);
}
}
void temperatura3() {
if (temperatura > 16 && temperatura <= 17) // Si la temperatura es mayor de 16 y menor o igual a 17 se encendera 0010
{
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, LOW);
}
}
void temperatura4() {
if (temperatura > 17 && temperatura <= 18) // si la temperatura es mayor de 17 y menor o igual a 18 se encendera 0011
{
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, LOW);
}
}
void temperatura5() {
if (temperatura > 18 && temperatura <= 19) // si la temperatura es mayor de 18 y menor o igual a 19 se encenderan 0100
{
digitalWrite (led1, LOW);
digitalWrite (led2, LOW);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
}
}
void temperatura6() {
if (temperatura > 19 && temperatura <= 20) // si la temperatura es mayor de 19 y menor o igual a 20 se encendera 0101
{
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
}
}
void temperatura7() {
if (temperatura > 20 && temperatura <= 21) // si la temperatura es mayor de 20 y menor o igual a 21 se encendera 0110
{
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
}
}
void temperatura8() {
if (temperatura > 21 && temperatura <= 22) // Si la temperatura es mayor de 21 y menor o igual a 22 se encendera 0111
{
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
}
}
void temperatura9() {
if (temperatura > 22 && temperatura <= 23) // si la temperatura es mayor de 22 y menor o igual a 23 se encendera 1000
{
digitalWrite (led1, LOW);
digitalWrite (led2, LOW);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
}
}
void temperatura10() {
if (temperatura > 23 && temperatura <= 24) // si la temperatura es mayor de 23 y menor o igual a 24 se encenderan 1001
{
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
}
}
void temperatura11() {
if (temperatura > 24 && temperatura <= 25) // si la temperatura es mayor de 24 y menor o igual a 25 se encendera 1010
{
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
}
}
void temperatura12() {
if (temperatura > 25 && temperatura <= 26) // si la temperatura es mayor de 25 y menor o igual a 26 se encendera 1011
{
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
}
}
void temperatura13() {
if (temperatura > 26 && temperatura <= 27) // Si la temperatura es mayor de 26 y menor o igual a 27 se encendera 1100
{
digitalWrite (led1, LOW);
digitalWrite (led2, LOW);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
}
}
void temperatura14() {
if (temperatura > 27 && temperatura <= 28) // si la temperatura es mayor de 27 y menor o igual a 28 se encendera 1101
{
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
}
}
void temperatura15() {
if (temperatura > 28 && temperatura <= 29) // si la temperatura es mayor de 28 y menor o igual a 29 se encenderan 1110
{
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
}
}
void temperatura16() {
if (temperatura > 29 && temperatura <= 30) // si la temperatura es mayor de 28 y menor o igual a 30 se encenderan 1111
{
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
}
}
Todo aquello que me digais será bien recibido :aplauso:
Ahora voy a montarlo en la protoboard y probar.