Coding Sensor DS18B20
coding sensor suhu DS18B20 nih.
awalnya pusing pusing mikirin coding 1 ini, kenapa bisa gini??
sempat mikir, mungkin emang udah bawaannya. Jadi gak perlu ambil pusing lah, yang penting udah jalan.
eh pas mau digabungin sama program yang lain, lah sensor suhunya jadi eror. codingnya gak mau dipisah pisah :(
alhasil mikir lagi gimana cara menyederhanakan coding ini, setelah searching sana sini hasilnya tetep kayak coding diatas, menyerahlah daku untuk memikirkanmu wahai DS18B20. kutinggal tidur sajalah dikau.
(minna,gomen yah, edisi alay nih :p) [dengan gaya bicara juvia]
dan setelah bangun tidur, baru kepikiran lagi, kenapa kok gak bikin sendiri aja.
bikin yang sederhana gitu.
akhirnya cari cari contoh lewat sample bawaannya DallasTemperature.
jengjengjeng, diriku merasa terilhami, ternyata udah ada coding bawaannya DallasTemperature yang sederhana banget. coba aja bandingkan antara coding 1 sama 2, mana yang lebih gampang dipahami?
Mana yang gampang di mix sama coding yang lain?
kalau menurutku sih coding 2.
Yosh, sankyu telah membaca curhatan saya. [dengan gaya bicara natsu]
cekidot..
coding 1 (kepanjangan, i think this is so ruwet :p )
#include <LiquidCrystal.h>
#include <OneWire.h>
int DS18S20_Pin = 1; //DS18S20 Signal pin on digital 1
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(void) {
lcd.begin(16, 2);
}
void loop(void) {
float temperature = getTemp();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.setCursor(0, 1);
lcd.print(temperature);
lcd.setCursor(5, 1);
lcd.print(" C");
delay(1000); //just here to slow down the output so it is easier to read
}
float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) { //no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two’s compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
coding 2
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
sensors.begin();
}
void loop(void)
{
float temp = sensors.getTempCByIndex(0);
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println(temp);
}
awalnya pusing pusing mikirin coding 1 ini, kenapa bisa gini??
sempat mikir, mungkin emang udah bawaannya. Jadi gak perlu ambil pusing lah, yang penting udah jalan.
eh pas mau digabungin sama program yang lain, lah sensor suhunya jadi eror. codingnya gak mau dipisah pisah :(
alhasil mikir lagi gimana cara menyederhanakan coding ini, setelah searching sana sini hasilnya tetep kayak coding diatas, menyerahlah daku untuk memikirkanmu wahai DS18B20. kutinggal tidur sajalah dikau.
(minna,gomen yah, edisi alay nih :p) [dengan gaya bicara juvia]
dan setelah bangun tidur, baru kepikiran lagi, kenapa kok gak bikin sendiri aja.
bikin yang sederhana gitu.
akhirnya cari cari contoh lewat sample bawaannya DallasTemperature.
jengjengjeng, diriku merasa terilhami, ternyata udah ada coding bawaannya DallasTemperature yang sederhana banget. coba aja bandingkan antara coding 1 sama 2, mana yang lebih gampang dipahami?
Mana yang gampang di mix sama coding yang lain?
kalau menurutku sih coding 2.
Yosh, sankyu telah membaca curhatan saya. [dengan gaya bicara natsu]
cekidot..
coding 1 (kepanjangan, i think this is so ruwet :p )
#include <LiquidCrystal.h>
#include <OneWire.h>
int DS18S20_Pin = 1; //DS18S20 Signal pin on digital 1
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(void) {
lcd.begin(16, 2);
}
void loop(void) {
float temperature = getTemp();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.setCursor(0, 1);
lcd.print(temperature);
lcd.setCursor(5, 1);
lcd.print(" C");
delay(1000); //just here to slow down the output so it is easier to read
}
float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) { //no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two’s compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
coding 2
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
sensors.begin();
}
void loop(void)
{
float temp = sensors.getTempCByIndex(0);
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println(temp);
}
0 komentar:
Posting Komentar