#include "TM1637.h" // Подключаем библиотеку для работы с модулем
#include <OneWire.h>
#include <DallasTemperature.h>
#define F_CPU 1200000UL // Частота МК в герцах;
#include <avr/io.h>
#include <avr/sleep.h> // здесь описаны режимы сна;
#include <util/delay.h>
//#include <TickerScheduler.h>
//int8_t DispMSG[2]; // Настройка символов для последующего вывода на дислей
//Определяем пины для подключения к плате Arduino
//#define CLK 3 //Arduino UNO
//#define DIO 2 //Arduino UNO
#define CLK 0 //Attiny25
#define DIO 2 //Attiny25
//Создаём объект класса TM1637, в качестве параметров
//передаём номера пинов подключения
TM1637 tm1637(CLK, DIO);
// Номер пина Arduino с подключенным датчиком
//#define PIN_DS18B20 4 //Arduino UNO
#define PIN_DS18B20 4 //Attiny25
// Создаем объект OneWire
OneWire oneWire(PIN_DS18B20);
// Создаем объект DallasTemperature для работы с сенсорами, передавая ему ссылку на объект для работы с 1-Wire.
DallasTemperature dallasSensors(&oneWire);
// Специальный объект для хранения адреса устройства
DeviceAddress sensorAddress;
//TickerScheduler ts(1);
//char temperatureCString[6];
byte d0, d1, d3;
bool znak;
unsigned long interval = 0;
void setup() {
//Serial.begin(115200);
//Инициализация модуля
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
dallasSensors.begin();
/*ts.add(0, 5000, [&](void*) {
GettOut();
if (znak == 0) tm1637.point(POINT_OFF);
else tm1637.point(POINT_ON);
tm1637.display(0,d0);
tm1637.point(POINT_ON);
tm1637.display(1,d1);
tm1637.point(POINT_OFF);
tm1637.display(2,d3);
//Serial.print("Temperature is: ");
//Serial.print(d0);
//Serial.print(d1);
//Serial.println(d3);
}, nullptr, true);*/
}
void loop() {
//ts.update();
int i;
if (millis() - interval >= 2000) {
interval = millis();
i++;
GettOut();
if (znak == 0) tm1637.point(POINT_OFF);
else tm1637.point(POINT_ON);
tm1637.display(0,d0);
tm1637.point(POINT_ON);
tm1637.display(1,d1);
tm1637.point(POINT_OFF);
tm1637.display(2,d3);
}
if (i >= 600) {
system_sleep();
}
}
void ds18b20_init() {
dallasSensors.begin();
GettOut();
}
char* GettOut() {
float tempC;
int tempCI;
byte d1t;
dallasSensors.requestTemperatures();
tempC = dallasSensors.getTempCByIndex(0);
if (tempC < 0) znak = true;
else znak = false;
tempCI = tempC * 10;
//Serial.println(znak);
//Serial.println(tempC);
//Serial.println(tempCI);
d0 = abs(tempCI) / 100;
d1t = abs(tempCI) % 100;
d1 = d1t / 10;
d3 = d1t % 10;
}
void system_sleep() { // Функция сна;
ADCSRA &= ~(1 << ADEN); // Отключаем АЦП;
ACSR |= (1 << ACD); // Откл. компаратор;
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Самый глубокий сон;
sleep_enable(); // Разрешаем сон;
sleep_cpu(); // Спим;
}
Вся схема питается от двух батареек ААА. Соответственно хочется, чтобы они дольше работали. Для этого поставил кнопку. Если не забыл, выключил. А вот если забыл, хочу чтоб устройство заснуло намертво. Пробуждение отключением питания кнопкой и по новой его включение. Нашел код на форуме. И вроде он работает. Датчик на изменение температуры не реагирует. Но вот индикаторы не гаснут! Может надо им какую команду дать?
Этот код записан в Attiny45. Только что залил его туда через UNO. До момента засыпания все прекрасно работает. Да и с засыпанием как-то частично работает.
Чета твоя компетенция вызывает сомнения! Вот зачем мне? Говорю, что я его залил в 45 и он работает. Если уверен, что не работает, проходи мимо. Ну уж очень безапелляционные заявления.
Евгений Петрович, я прям в шоке. Так много написано, но о 61 строке - ни слова. В тоже время всегда первым сообщением от Вас идёт - код компилируется или нет. Неужели у Вас код компилируется?
Тем не менее - не понятна Ваша логика (в иных подобных темах). На чем основывается «компилируется/не компилируется»? Вы же компилируете перед ответом код? Или выборочно? Или просто сегодня лень?
Просто интересно.
Компилирую, когда нужно убедиться, что нигде не облажался случайно (т.е. чуть реже, чем всегда). А здесь мой ответ был “общие слова”, там невозможно облажаться.
А так, да, иногда резко наезжаю, что не компилируется, что мол “про запускал” - брехня, а иногда нет. Это как вожжа под хвост ляжет.
Вам скучно? Ну не прописалась почему-то точка с запятой, в коде она есть и все прекрасно компилится.
Вообще как-то странно сайт работает при наборе текста. То не печатает букву хоть обнажимайся, а то залипает. Вчера думал к какой у компа. сегодня весь день работал удаленно и все работало. А щас зашел на форум и опять такая хрень.
Спасибо огромное! Я думал раз выключил Attiny все должно погаснуть.
И еще вопрос. Почему-то после выключенияания кнопкой, если сразу ее нажать, ну в течении 10-20 секунт, то тинька не запускается. Надо секунд 30 подождать. Может какую команду при старте давать?
Блин! Ну говорю же! Копировал всё целиком. Почему точка с запятой пропала - не знаю! Ладно бы пол кода не было, а то из-за одной точки с запятой такой шум. Ну понятно что без нее не будет компилиться!
А как это сделать? У меня задействовано 3 пина. Два под индикаторы и один под датчик температуры. Принудительно на всех выходах низкий, а на всех входах высокий? Это я тут в другой теме видел. Типа так?
Дружище, тут каждый второй вываливает не пойми чего под видом своего кода, а через какое-то время оказывается, что в IDE у него совсем другой код. Он там уже чего-то наизменял, понадобавлял и поудалял, а мы тут, как идиоты, смотрим в филькину грамоту. Так что такие сказки здесь не прокатывают
И откуда у нас может быть уверенность, что не хватает ТОЛЬКО точки с запятой?