Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
LM35 y Contador binario
#1
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.

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.
Citar
#2
Lo de representarlo por el serial monitor es para ver como voy al probar.
Citar
#3
No pude ver Buenos en todo. Pero lo ultimo me suena raro...
Citar
#4
No pude ver bien todo digo. Pero lo ultimo me suena raro...
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Arduino Yun LM35 javiec 3 868 28-11-2015, 02:23 AM
Último mensaje: biketrial981
  Contador de créditos ElHera 47 2,562 08-02-2015, 06:17 PM
Último mensaje: ElHera
  contador bolas airsoft harian33 15 2,177 24-06-2014, 08:00 PM
Último mensaje: harian33