des pues de 4 horas he conseguido que todos los leds hagan lo que kiero y como deben xD Ah y he descubierto xq demonios se encendia ese led a la vez que el led tx cuando el arduino enviaba los datos al pc era el pin 12 que nose xq le ocurre esto pero conectandolo en un pin pwm en el 9 en concreto ha dejado de tener esa interferencia acople o lo que fuese. subo el codigo por si alguien kiere usar algo para algun proyecto suyo: el codigo se compone de que cuando hay mas de 26 grados hace calor y se enciende el led rojo, cuando la temperatura es entre 25 y 26 grados se enciende un led amarillo y cuando la temperatura es inferior a 25 grados hace frio y se enciende el lez azul, (aparte de esas funciones junto con la temperatura en pantalla lcd y puerto com por supuesto hay 1 de los 3 led siempre encendiendose y apagandose de manera lenta alternando de no parpadear nunca el que esta indicando la temperatura para evitar confundir una cosa con otra.
#include <OneWire.h> //Libreria para el sensor
#include <DallasTemperature.h> //Libreria para el sensor
#include <LiquidCrystal.h> //Libreria para el LCD
// Conectamos el sensor de temperatura al pin 10 de Arduino
#define ONE_WIRE_BUS 7
// Setup de oneWire instance para que se comunique con dispositivos OneWire
OneWire OneWire(ONE_WIRE_BUS);
// Pasomos la referencia de oneWire a Dallas Temperature.
DallasTemperature sensors(&OneWire);
//Iniciamos la libreria del LCD con los respectivos pines
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int ledPinc = 13; //Pin led caliente
const int ledPinf = 6; //Pin led frio
const int ledPini = 9; //Pin led intermedio
const int ledPinp = 11; //Pin led parpadeo
int contador = 0; //Variable que almacena el valor
void setup(void)
{
//Setup de las lineas y columnas.
lcd.begin(16, 2);
//Escribimos Temperatura en el LCD.
lcd.print("Temperatura:");
// Inicializar los led:
pinMode(ledPinc, OUTPUT);
pinMode(ledPinf, OUTPUT);
pinMode(ledPini, OUTPUT);
pinMode(7, OUTPUT);
// Inicializar el puerto com
Serial.begin(9600);
Serial.println("Control de Temperatura");
// Inicializar la libreria
sensors.begin();
}
float val = 0; // Importante usar el float para obtener la temperatura en formato ºC y NN,NN
void loop(void)
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
Serial.print("\n Solicitando Temperatura... ");
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println(" Recibida");
Serial.print("La Temperatura es: ");
Serial.print(sensors.getTempCByIndex(0)) ; // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
Serial.print(" ");
float val = sensors.getTempCByIndex(0) ; // Almacenar la temperatura
//Serial.println(val); // print the value to
// the serial port
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(val);
if (val >= 27) {
// encender led:
digitalWrite(ledPinc, HIGH);
}
else {
// apagar led:
digitalWrite(ledPinc, LOW);
}
if (val < 27 && val >= 26) {
digitalWrite(ledPini, HIGH);
// led intermedio
}
else {
digitalWrite(ledPini, LOW);
}
if (val < 26 && val >=25) {
digitalWrite(ledPinf, HIGH);
//led frio
}
else {
digitalWrite(ledPinf, LOW);
}
if (val < 26 or val >= 27) {
{
for (contador = 0 ; contador <= 255; contador ++) // ciclo para ir subiendo el voltaje desde 0 a 5 voltios
{
analogWrite(ledPinp, contador); // PWM
delay(7);
}
delay(5);
for (contador = 255 ; contador >=0 ; contador --) // ciclo para ir bajando el voltaje desde 5 a 0 voltios
{
analogWrite(ledPinp, contador); // PWM
delay(7);
}
delay(50);
}
}
else {
for (contador = 0 ; contador <= 255; contador ++) // ciclo para ir subiendo el voltaje desde 0 a 5 voltios
{
analogWrite(ledPinf, contador); // PWM
delay(7);
}
delay(5);
for (contador = 255 ; contador >=0 ; contador --) // ciclo para ir bajando el voltaje desde 5 a 0 voltios
{
analogWrite(ledPinf, contador); // PWM
delay(7);
}
delay(50);
}
delay(250); // actualizar temperatura cada 1/2 segundo
}
Si alguien ve algun error que pudiese mejorarse o bien estoi forzando el micro por los retardos muy cortos o por la cantidad de ellos a la vez que me avise por favor.