термостат на Attiny13 и DS18B20
- Войдите на сайт для отправки комментариев
Помогите переделать скетч под датчик температуры DS18B20 без функции Serial.begin(9600), для заливки в Attiny13.
Вот, пособирал что то. Скажите, если бы этот скетч влез в Attiny13 он бы заработал?
#define LED 0
#include <OneWire.h>
OneWire ds(1);
void setup() {
pinMode(LED, OUTPUT);
analogWrite(LED, OUTPUT);
}
void loop(){
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // начало коммуникации
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // читаем значение
for ( i = 0; i < 9; i++) { // смотрим 9 байтов
data = ds.read();
}
// Преобразуем получненный данные в температуру
// Используем int16_t тип, т.к. он равен 16 битам
// даже при компиляции под 32-х битный процессор
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
// Если температура достигает температуры кипения (с погрешностью), отключаем кипятильник
if (celsius > 33.5)
{
analogWrite(LED, 0);
}
if (celsius < 32)
{
analogWrite(LED, 1);
}
}
Т.к. визуально значение температуры визуально наблюдать не требуется, то возможно из скетча , что то можно удалить, чтоб облегчить его объем?
Что, никто не поможет?
чтобы помогали нужно, в первую очередь, уважать правила сообщества. То есть код вставить правильно.
Во вторых вставляемый код нехудо бы откомпилировать и проверить на ошибки. Как настроить IDE для компиляции под Attiny13 написано тут же, в шапке. Все вопросы сразу пропадут.
Вы спрашиваете: "Что выкинуть", но размер проги пока не знаете. Вы реально думаете, что комуто интересно подогнать ваш код по тиньку?
Сделайте сами, и если уперлись в нерешаемое - задавате вопрос.
То, что в программе для тиньки Вы использовали float и библиотеку - выдает полную безграмотность.
Все плавающие вычисления - выкинуть. 1-wire реализовать без библиотеки, руками. ТОгда точно влезет. А проще посмотреть готовое решение для тиньки.
bester, с библиотекой оно туда не влезет. Нужно писать на чистом СИ без ардуиновских фишек, и без каких-то ни было библиотек. Для опытного программиста пол дня работы. Но смысл отсутствует, проще взять МК с большей памятью.
PS: для датчика DHT22 я писал аналогичную программу для тини13
Для опытного программиста пол дня работы.
Ясно, спасибо. Я надеялся, что это будет менее сложно по времени для опытного программиста.
По времени может и менее сложно, но кто ЭТО будет отлаживать и доводить до ума?