Paso 2: Sensor de temperatura de un cable + código
Arreglé los componentes en un protoboard siguiendo el diagrama de arriba, luego he descargado el archivo zip de aquí (http://bildr.org/2011/07/ds18b20-arduino/) y seguido el proceso de dos pasos necesario para imprimir los datos de temperatura en el monitor serie. Porque proporcionan el código de sensor modificado a continuación, sin embargo, todo lo que necesitas para poner la carpeta "Un cable" en la librería de Arduino y usted debe ser bueno para ir.
Para lograr el desvanecimiento del LED, que necesitaba para almacenar los dos últimos valores para la comparación y no que hice una copia de la función de getTemp(), le cambió el nombre y había llamado las dos funciones en tándem con un retraso de entre. El código de acabado (con pasadores LED asignados y fade establecido) no es tan óptimo como podría ser, sin embargo parece funcionar perfectamente.
También tenga en cuenta qué pines los colores se asignan a y asegurarse de que esto se refleja en el protoboard.
#define REDPIN1 10
#define GREENPIN1 9
#define BLUEPIN1 11
#define REDPIN2 5
#define GREENPIN2 6
#define BLUEPIN2 3
#define FADESPEED 8 / / esto hace más lento
#include < OneWire.h >
flotador tempData [1];
Float tempDataPrev [1];
int DS18S20_Pin = 2; Pin señal DS18S20 digital 2
Temperatura chip entrada-salida
OneWire ds(DS18S20_Pin); el pin digital 2
void setup(void) {}
Serial.Begin(9600);
pinMode (REDPIN1, salida);
pinMode (GREENPIN1, salida);
pinMode (BLUEPIN1, salida);
pinMode (REDPIN2, salida);
pinMode (GREENPIN2, salida);
pinMode (BLUEPIN2, salida);
}
Violeta valor 200, 0, 255
Valor rojo 255, 0, 0
Azul valor 0, 0, 255
void loop(void) {}
Float temperatura = getTemp();
Delay(1000);
Float temperaturePrev = getTempPrev();
int i;
int r1, g1, b1;
int r2, g2, b2;
para (int i = 0; i < 1; i ++) {}
tempDataPrev [i] = temperaturePrev;}
para (int i = 0; i < 1; i ++) {}
tempData [i] = temperatura;}
analogWrite (BLUEPIN1, 255);
analogWrite (REDPIN1, 255);
analogWrite (GREENPIN1, 0);
analogWrite (BLUEPIN2, 255);
analogWrite (REDPIN2, 255);
analogWrite (GREENPIN2, 0);
Si (tempDataPrev [0] == {} tempData[0])
valores iniciales
analogWrite (BLUEPIN1, 255);
analogWrite (REDPIN1, 255);
analogWrite (GREENPIN1, 0);
analogWrite (BLUEPIN2, 255);
analogWrite (REDPIN2, 255);
analogWrite (GREENPIN2, 0);
}
Si (tempDataPrev [0] < tempData[0]) {}
analogWrite (BLUEPIN2, 255);
analogWrite (REDPIN2, 255);
analogWrite (GREENPIN2, 0);
desde el violeta al azul al violeta
para (r1 = 255; r1 > 0 y r1--) {}
analogWrite (REDPIN1, r1);
Delay(FADESPEED);}
para (r1 = 0; r1 < 256; r1 ++) {}
analogWrite (REDPIN1, r1);
Delay(FADESPEED);}
}
Si (tempDataPrev [0] > tempData[0]) {}
analogWrite (BLUEPIN1, 255);
analogWrite (REDPIN1, 255);
analogWrite (GREENPIN1, 0);
desde el violeta hasta el rojo a la violeta
para (b2 = 255; b2 > 0; b2--) {}
analogWrite (BLUEPIN2, b2);
Delay(FADESPEED);}
para (b2 = 0 b2 < 256; b2 ++) {}
analogWrite (BLUEPIN2, b2);
Delay(FADESPEED);}
} }
Float getTempPrev() {}
Devuelve la temperatura de un DS18S20 en grados Celsius
datos del octeto [12];
addr Byte [8];
Si (! {ds.search(addr))}
no hay más sensores en cadena, de la búsqueda reset
DS.reset_search();
volver -1000;
}
Si (OneWire::crc8 (addr, 7)! = {addr[7])}
Serial.println ("CRC no es válido!");
volver -1000;
}
Si (addr [0]! = 0 x 10 & & addr [0]! = 0x28) {}
Serial.Print ("dispositivo no se reconoce");
volver -1000;
}
DS.Reset();
DS.Select(ADDR);
DS.Write(0X44,1); iniciar la conversión, con la energía del parásito en el final
byte actual = ds.reset();
DS.Select(ADDR);
DS.Write(0xBE); Bloc de notas de lectura
para (int i = 0; i < 9; i ++) {/ / necesitamos 9 bytes
datos [i] = ds.read();
}
DS.reset_search();
el byte MSB = datos [1];
octeto LSB = datos [0];
Float tempRead = ((MSB << 8) | LSB); utilizando el complemento de dos
Float TemperatureSum = tempRead / 16;
volver TemperatureSum;
}
Float getTemp() {}
Devuelve la temperatura de un DS18S20 en grados Celsius
Delay(2000);
datos del octeto [12];
addr Byte [8];
Si (! {ds.search(addr))}
no hay más sensores en cadena, de la búsqueda reset
DS.reset_search();
volver -1000;
}
Si (OneWire::crc8 (addr, 7)! = {addr[7])}
Serial.println ("CRC no es válido!");
volver -1000;
}
Si (addr [0]! = 0 x 10 & & addr [0]! = 0x28) {}
Serial.Print ("dispositivo no se reconoce");
volver -1000;
}
DS.Reset();
DS.Select(ADDR);
DS.Write(0X44,1); iniciar la conversión, con la energía del parásito en el final
byte actual = ds.reset();
DS.Select(ADDR);
DS.Write(0xBE); Bloc de notas de lectura
para (int i = 0; i < 9; i ++) {/ / necesitamos 9 bytes
datos [i] = ds.read();
}
DS.reset_search();
el byte MSB = datos [1];
octeto LSB = datos [0];
Float tempRead = ((MSB << 8) | LSB); utilizando el complemento de dos
Float TemperatureSum = tempRead / 16;
volver TemperatureSum;
}