Часы должны тикать. Причём тикать с частотой 5 герц, как это делают кошерные механизмы из шестерёнок и винтиков, а не 1 герц как тикают богомерзкие кварцевые.
Подвижные элементы отрисовки тускнеют при движении. Библиотека U8g2lib имеет своеобразие как я понял (а другой для этого экране не очень есть :-) - при рисовании элементов с координатами за пределами 0-127, 0-63 их не должно быть на экране, а они есть в виде различных артефактов. В скетче пришлось вводить ограничение на допустимые значения координат.
Подвижные элементы отрисовки тускнеют при движении.
Это особенность любых tf-дисплеев и от библиотеки никак не зависит.
Цитата:
Библиотека U8g2lib имеет своеобразие как я понял (а другой для этого экране не очень есть :-) - при рисовании элементов с координатами за пределами 0-127, 0-63 их не должно быть на экране, а они есть в виде различных артефактов. В скетче пришлось вводить ограничение на допустимые значения координат.
Перед разработчиком всегда стоит дилемма: чему отдать предпочтение, скорости или универсальности.
МК обычно используются для решения конкретных задач, а не как универсальное устройство обработки информации, да и производительность их невысока, поэтому вполне естественно, что разработчики выбирают скорость. В конце концов, если пользователю нужна проверка, он сам может ее добавить в своей программе, а курочить стандартную библиотеку (убирая из нее эту проверку), особенно если периодически выходят ее обновления, станет далеко не каждый.
Для часов экранчик пойдёт (как и для всяких меню на отдельном МК :-). Забавно-символично смотреть как секундная стрелка расщепляется на 2 и одна гаснет. Попробовал этот же скетч на маленьком ssd1306 экране. Он поедает 86 процентов динамической памяти и пишется предупреждение о возможной некорректной работе. Зато на этой же библиотеке можно запустить ещё кучу разных экранов. интересно, а можно эту кучу одновременно запустить?
///////////////// часы с мелодией
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
//SDA-A4,SCL-A5
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS3231);
extern const unsigned char schkala_C[];
///////////////////////////
// НОВОГОДНЯЯ МЕЛОДИЯ фрагмент
int tonePin = 7;
const struct sound{
int freq, duration, dly;
} sounds[] PROGMEM = {
{293, 225, 250}, {493, 225, 250}, {440, 225, 250}, {391, 225, 250}, {293, 450, 750},
{293, 225, 250}, {293, 225, 250}, {493, 225, 250}, {440, 225, 250}, {391, 225, 250},
{329, 450, 750}, {329, 225, 250}, {329, 225, 250}, {523, 225, 250}, {493, 225, 250},
{440, 225, 250}, {587, 450, 750}, {587, 225, 250}, {659, 225, 250}, {587, 225, 250},
{523, 225, 250}, {440, 225, 250}, {493, 675, 750}
};
const uint8_t melodieLength = sizeof(sounds) / sizeof(sound);
sound SoundSRAM;
///////////////////////////////
int t=222;// пауза между считываниями данных
float minuti = 0.00; //пременные хранения углов
float tcshasi = 0.00; //
float sekundi = 0.00; //
int dlina_1 = 60;//задаём геометрию-форму стрелок часов
int dlina_2 = 28;
void setup()
{
u8g2.begin();
u8g2.setContrast (20);
time.begin();
}
void loop()
{
if(time.minutes==0&&time.seconds<10){midi();}// играем мелодию в начале каждого часа
vremia_A();
delay(t);
}
////////////////////////////////////////
void vremia_A (){
time.gettime();//
sekundi=time.seconds*2*PI/60.0;//
minuti=time.minutes*2*PI/60.0;//
tcshasi=time.hours*2*PI/12.0+minuti/12.0 ;//
u8g2.clearBuffer();//очистка экрана
u8g2.drawXBMP(0, 0, 128, 64,schkala_C);// рисование контура часов по рисунку
u8g2.drawLine(63,32,63 + cos(sekundi - PI / 2) * (dlina_1), 32 + sin(sekundi - PI / 2)* (dlina_2));//секундная стрелка рисуется
u8g2.drawLine(63 + cos(minuti-0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(minuti-0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(minuti - PI / 2) * (dlina_1*1.1), 32 + sin(minuti - PI / 2) * (dlina_2*1.1)); //минутная стрелка рисуется
u8g2.drawLine(63 + cos(minuti+0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(minuti+0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(minuti - PI / 2) * (dlina_1), 32 + sin(minuti - PI / 2) * (dlina_2)); //минутная стрелка рисуется
u8g2.drawLine(63 + cos(tcshasi-0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(tcshasi-0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(tcshasi - PI / 2) * (dlina_1*0.5), 32 + sin(tcshasi - PI / 2) * (dlina_2*0.5)); //часовая стрелка рисуется
u8g2.drawLine(63 + cos(tcshasi+0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(tcshasi+0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(tcshasi - PI / 2) * (dlina_1*0.5), 32 + sin(tcshasi - PI / 2) * (dlina_2*0.5)); //часовая стрелка рисуется
u8g2.drawCircle( 63, 32, 4);//точка крепления стрелки
u8g2.sendBuffer();
}
///////////////////////////////////////
void midi() {
for (uint8_t i = 0; i < melodieLength; i++) {
memcpy_P( &SoundSRAM, &sounds[i], sizeof(sound));
tone(tonePin, SoundSRAM.freq, SoundSRAM.duration);
vremia_A();//не забываем двигать стрелки часов во время исполнения мелодии
delay(SoundSRAM.dly);
}
}
/////////////////////////////////////////
https://electronics-project-hub.com/analog-clock-using-arduino/
А замысел уже реализовали, дешево и сердито :-)
https://electronics-project-hub.com/analog-clock-using-arduino/
А замысел уже реализовали, дешево и сердито :-)
сервы слишком много жрут
Да, жрут-то ладно - понты дороже денег.
Проблема в том, что они неправильно звучат.
Часы должны тикать. Причём тикать с частотой 5 герц, как это делают кошерные механизмы из шестерёнок и винтиков, а не 1 герц как тикают богомерзкие кварцевые.
Дошёл заказанный дисплей по мотивам темы http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-displeya-gmg12864-06d-na-st7565r
Попробовал его на шкалах.
Вывод: не очень то он годится для шкал.
Подвижные элементы отрисовки тускнеют при движении. Библиотека U8g2lib имеет своеобразие как я понял (а другой для этого экране не очень есть :-) - при рисовании элементов с координатами за пределами 0-127, 0-63 их не должно быть на экране, а они есть в виде различных артефактов. В скетче пришлось вводить ограничение на допустимые значения координат.
Подвижные элементы отрисовки тускнеют при движении.
Это особенность любых tf-дисплеев и от библиотеки никак не зависит.
Библиотека U8g2lib имеет своеобразие как я понял (а другой для этого экране не очень есть :-) - при рисовании элементов с координатами за пределами 0-127, 0-63 их не должно быть на экране, а они есть в виде различных артефактов. В скетче пришлось вводить ограничение на допустимые значения координат.
Перед разработчиком всегда стоит дилемма: чему отдать предпочтение, скорости или универсальности.
МК обычно используются для решения конкретных задач, а не как универсальное устройство обработки информации, да и производительность их невысока, поэтому вполне естественно, что разработчики выбирают скорость. В конце концов, если пользователю нужна проверка, он сам может ее добавить в своей программе, а курочить стандартную библиотеку (убирая из нее эту проверку), особенно если периодически выходят ее обновления, станет далеко не каждый.
https://electronics-project-hub.com/analog-clock-using-arduino/
А замысел уже реализовали, дешево и сердито :-)
сервы слишком много жрут
А так? На каждый сегмент по серве.) Во где тикают!
Тикают раз в минуту :-)
Для часов экранчик пойдёт (как и для всяких меню на отдельном МК :-). Забавно-символично смотреть как секундная стрелка расщепляется на 2 и одна гаснет. Попробовал этот же скетч на маленьком ssd1306 экране. Он поедает 86 процентов динамической памяти и пишется предупреждение о возможной некорректной работе. Зато на этой же библиотеке можно запустить ещё кучу разных экранов. интересно, а можно эту кучу одновременно запустить?
Тикают раз в минуту :-)
Аха, особенно много шума при переходах через 0-ли.) Человеку делал countdown до конца проекта.
Ещё пара идей для имитации на олед дисплее нашлась.
Догорающая ардуино, свеча пламенеющая, тихий зимний вечер - хорошо:-)
Китай давно уже сделал проще, реалистичней и дешевле: https://youtu.be/invuAhcgIvo
Стоят у меня 3 таких. Метров с 5 реалистичны :-)
Пламя вяло дёргается.
Делал по аналогии на моторе от сидишника - пламя трепещет лучше.
А тут буржуйский, дорогой подход.
https://www.instructables.com/Clapper-LED-Candle/
По мотивам вот таких свеч.
:-)
Сегодня мой ответ буржуям такой.
Цветосвечение
или свечицветение :-)
Цепляю OLED дисплей 1,3 дюйма к ардуине Нано, заливаю Ваши скетчи и ничего не вижу
Стал разбираться, а дисплей на контроллере CH1106, следовательно библиотека U8g2
А как ее прицепить к Вашим скетчам не знаю. Там какие-то заморочки нужно добавлять в скетч
Выручайте!
С какой IDE вы работаете?