Как разобрать на части показания датчика DS18B20
- Войдите на сайт для отправки комментариев
Вс, 13/10/2013 - 12:15
Показания с часиков на модуле DS1307 разбираю на части без проблем
#include <DS1307.h>
#include <LiquidCrystal.h>
DS1307 rtc(A4, A5);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int asd=0;
void setup()
{
lcd.begin(16, 2);
rtc.halt(false);
}
void loop()
{
lcd.setCursor(1,0);
lcd.print(rtc.getTimeStr());
String stringOne = rtc.getTimeStr();
asd = stringOne.substring(6,7).toInt();
lcd.setCursor(1,1);
lcd.print(asd);
}
А вот никак не могу разобрать показания датчика температуры DS18B20
Простой скетч для разборки
#include <OneWire.h>
OneWire ds(7);
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
lcd.begin(16, 2);
}
void loop()
{
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
int Temp = (data[1]<<8)+data[0];
int f = round(Temp*9.0/5.0 + 32.0);
Temp = Temp>>4;
lcd.setCursor(0,0);
lcd.print(Temp);
}
Пробовал так
но ругается
если я правильно понял, что вам нужно:
Спасибо большое , помню где то читал на форуме, но не смог найти --- все работает...
А как разобрать частоту ???
#include <Wire.h> unsigned char frequencyH = 0; unsigned char frequencyL = 0; unsigned int frequencyB; double frequency = 0; void setup() { Wire.begin(); frequency = 87.5; //starting frequency setFrequency(); Serial.begin(9600); } void loop() { int reading = 868; //frequency = map((float)reading, 0.0, 1024.0, 87.5, 108.0); frequency = ((double)reading * (108.0 - 87.5)) / 1024.0 + 87.5; frequency = ((int)(frequency * 10)) / 10.0; setFrequency(); Serial.println(frequency); } void setFrequency() { frequencyB = 4 * (frequency * 1000000 + 225000) / 32768; frequencyH = frequencyB >> 8; frequencyL = frequencyB & 0XFF; delay(100); Wire.beginTransmission(0x60); Wire.write(frequencyH); Wire.write(frequencyL); Wire.write(0xB0); Wire.write(0x10); Wire.write((byte)0x00); Wire.endTransmission(); delay(100); }Изначально приемник настроен на частоту 104.8
Как разобрать на части frequency, которая отображает в мониторе порта 104.80
Заранее спасибо за помощь ...
точно так же - комбинация деления и операции %, например цифру обозначающую сотни:
для десятых и сотых долей можно frequency преобразовать в целоче число, умножим перед этим на 100 - тогда у вас все цифры сдвинуться и в нулевом разряде будут сотые доли, в первом - десятые и т.е. и далее кобинируя деление и % выделите цифру любого разряда
Пробовал так
Ошибка
Строка
отображает 10 ( но работает когда убрать строку " uint8_t digit1 =frequency % 10;" )
Когда указана строка
ругается
FM_tea5767.ino: In function 'void loop()':
Умножил частоту на 104,8 на 10 и получил 1048... А потом разобрал на части как указано выше !!! Всем спасибо !!!
мои примеры для целочисленных типов данных. У вас дисплей какой? Так возиться с цифрами имеет смысл только для семисегментных индикаторов, которые текст не понимают. Для дисплеев понимающих текст проще использовать форматирование, исопльзуя например sprintf:
давно не использовал форматирование чисел с плавающей точкой, но вроде так. Тоже можно для частоты использовать. только формат должен быть "%3.2f".
У меня дисплей 1602, но я там отображаю символи в таком формате, потому и требуется разбор на части...
пока только отображается время, а я хочу добавить отображение температуры и частоты на какой работает радио, --- управление с IR пульта...
Что -то наподобии радиобудильника )))
А тут видео работы на дисплее С242-08D
http://youtu.be/PXjy2RxKfqM
inhelp, красивые часы. :)
Через 2 - 3 дня опубликую полностью проэкт "Радиобудильник с датчиком температуры" .
Приятно, когда толковые люди публикуют толковые проекты, а не длинные списки "хотелок"...
Ждем-с.
Пока тестирую и исправляю ошибки...
Видео http://www.youtube.com/watch?v=jl8MyHcIffY
Все спасибо за помощь...
Класс! Для полного счастья не хватает, пожалуй, регулировки яркости подсветки, но это уже мелочь.
Зачётно !!!