Часы на СД-ленте. Питание ленты

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Мой косяк, питание ардуины брал с USB, сейчас соединил с БП, мерцание пропало)

теперь показывает цифры, 04 55 с легким мерцанием, золотистого цвета, на кнопки не реагирует)

 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@Wan-Derer, т.е. если брать цифру, беру выход D0, подключаю к пину D3, а на землю надо вешать 1Ком резистор?
ну скетч по сути поменять значения, как я понимаю...
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,129
412
Москва
wan-derer.ru
@ASM, если ты используешь цифровой выход, то там уже готовый сформированный сигнал. Резистор не нужен.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@Wan-Derer, понял, теперь надо как-то запустить часы) модуль часов ведь нужен для поддержания времени при отключения питания?
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@Wan-Derer, вообщем, сенсор получилось запустить, в коде исправил ошибки, такое ощущение, что специально вырезаны некоторые выражения, но на дисплее также 0455 ))
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
вообщем накодил, теперь загадочное число появляется) 06:79, что за число?)
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Новая ситуация, кнопка DST хоть и выключена в коде, но все равно меняет на летнее/зимнее время.
Кнопка Hour меняет часы последовательно, все норм.
Кнопка Minutes тоже меняет последовательно, но с каждым нажатием перезагружается программа.
При старте также 04 55
Яркость реагирует на фонарик.
 

Вложения

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Переделал снова код, убраны анимашки)
Сейчас результат интересный:
- при срабатывании сенсора реагирует DST, закоментил его, т.к. не нужен)
- также срабатывают непонятным образом часы, при срабатывании сенсора появляются новые значения)
- часы вроде как появлялись, даже точки загорались, но часы не идут.
- при нажатии кнопок часы и минуты, похоже на срабатывание DST

C++:
//#include <iarduino_RTC.h>
//iarduino_RTC time(RTC_DS1302,12,10,11);
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include "FastLED.h"
#define NUM_LEDS 114 // Number of LED controles (remember I have 3 leds / controler
#define COLOR_ORDER GRB // Define color order for your strip
#define DATA_PIN 6 // Data pin for led comunication

CRGB leds[NUM_LEDS]; // Define LEDs strip

byte digits[12][28] = {{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},  // Digit 0
                       {0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1},   // Digit 1
                       {1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0},   // Digit 2
                       {1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1},   // Digit 3
                       {1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1},   // Digit 4
                       {1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},   // Digit 5
                       {1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},   // Digit 6
                       {0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1},   // Digit 7
                       {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},   // Digit 8
                       {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},   // Digit 9 | Массив числе на 7 сегментах
                       {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},   // Digit *0
                       {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0}};  // Digit C
/*
byte firstdigit[2][12] = {{0,0,0,0,0,0,0,0,0,0,0,0}, // Digit 0 first number
{1,1,1,1,1,1,1,1,1,1,1,1}}; // Digit 1 first number | 2D Array for numbers on 7 segment
*/
bool Dot = true; //Dot state
bool DST = false; //DST state
long ledColor = 0x0000ff; // Color used (in hex)

void setup(){
Serial.begin(9600);
//time.begin();
//time.settime(0,20,19,26,12,18,3); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
Wire.begin();
LEDS.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // Set LED strip type
LEDS.setBrightness(40); // Set initial brightness
//pinMode(2, INPUT_PULLUP); // Define DST adjust button pin
pinMode(4, INPUT_PULLUP); // Define Minutes adjust button pin
pinMode(5, INPUT_PULLUP); // Define Hours adjust button pin
}

// Check Light sensor and set brightness accordingly
void BrightnessCheck(){
const byte sensorPin = 3; // light sensor pin
const byte brightnessLow = 40; // Low brightness value
const byte brightnessHigh = 100; // High brightness value
int sensorValue = digitalRead(sensorPin); // Read sensor
if (sensorValue == 0) {
//Serial.println("Brightness High");
LEDS.setBrightness(brightnessHigh);
}
else {
//Serial.println("Brightness Low");
LEDS.setBrightness(brightnessLow);
}
};

// Get time in a single number
int GetTime(){
tmElements_t Now;
RTC.read(Now);
int hour=Now.Hour;
if (DST) { if (hour==24) {hour=1;}
else {hour += 1;}
};
if (hour>12 ){hour -= 12;};
int minutes=Now.Minute;
int second =Now.Second;
if (second % 2==0) {Dot = false;}
else {Dot = true;};
return (hour*100+minutes);
};

void DSTcheck(){
int buttonDST = digitalRead(2);
Serial.print("DST is: ");Serial.println(DST);
if (buttonDST == LOW){
if (DST){
DST=false;
Serial.print("Switching DST to: ");Serial.println(DST);
}
else if (!DST){
DST=true;
Serial.print("Switching DST to: ");Serial.println(DST);
};
delay(500);
};
}

// Convert time to array needet for display
void TimeToArray(){
int Now = GetTime(); // Get time
int cursor = 114;
Serial.print("Time is: ");Serial.println(Now);

if (Dot)
{leds[56]=ledColor;leds[57]=ledColor;}
else
{leds[56]=0x000000;leds[57]=0x000000;};

for(int i=1;i<=4;i++){
int digit = Now % 10; // get last digit in time

if (i==1){
cursor =86;
//Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}

else if (i==2){
cursor =58;
//Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}

else if (i==3){
cursor =28;
//Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}

else if (i==4){
cursor =0;
//Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
};
Now /= 10;
};
};

void TimeAdjust(){
int buttonH = digitalRead(5);
//Serial.print("Hour");
//Serial.println(buttonH);
int buttonM = digitalRead(4);
//Serial.print("Minutes");
//Serial.println(buttonH);
if (buttonH == LOW || buttonM == LOW){
delay(500);
tmElements_t Now;
RTC.read(Now);
int hour=Now.Hour;
int minutes=Now.Minute;
if (buttonH == LOW){
if (Now.Hour== 24){Now.Hour=1;}
else {Now.Hour += 1;};
}else {

if (Now.Minute== 59){Now.Minute=0;}
else {Now.Minute += 1;};
};
RTC.write(Now);
}
}
void loop() // Main loop
{
BrightnessCheck(); // Check brightness
//DSTcheck(); // Check DST
TimeAdjust(); // Check to se if time is geting modified
TimeToArray(); // Get leds array with required configuration
FastLED.show(); // Display leds array
}
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Уррраааа)))))
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311

обновление, убрал показ даты, добавил уличный термометр, сделал корпус к часам, вот теперь вопрос, в какой цвет красить?)
 

Boomer

✩✩✩✩✩✩✩
2 Янв 2019
3
0
Вопрос автору, как выглядит сам конструктив в корпусе, как проложена лента?
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Лента проложена как и у всех, конструктив такой: двп, лента, сендвич панель, лист плотной бумаги.
Корпус собран из реек, внутри приклеен по лицевому периметру штапик угловой)
Питание на ардуино припаяно, остальное всё на разъемах, думаю нет смысла паять)
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Выручайте, заменил все крепления на пайку)
после включения показывает все нули, при попытке прошить, выдает
avrdude: stk500_recv(): programmer is not responding
что могло случиться?)
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Скетч пока такой)
Просили показать, выкладываю)
 

Вложения

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Выручайте, заменил все крепления на пайку)
после включения показывает все нули, при попытке прошить, выдает
avrdude: stk500_recv(): programmer is not responding
что могло случиться?)
2 месяца прошло, плата еще не приехала))
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Ура, приехала)) удалось наладить, с небольшими трудностями))
завтра заменю уличный датчик, на герметичный и буду думать дальше))
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Вообщем, пока все работает.
Единственный минус, это точность времени, убегают немного за месяц или более, не замечал, надо в коде действие по нажатию на минутную кнопку поставить на минус, а не перематывать)
Ну и косяк походу с проводным уличным датчиком, плохо паяется телефонный кабель, теряется с ним связь, на улице так вообще не пропаян, ветер)
Думаю купить одножильный 4*0,5 да все не по пути) поэтому долго и не писал в теме)

Заказал другой модуль времени, качественнее, боюсь, придется код переписывать, т.к. код изначально был под этот модуль, который переделывал)
И заказал модуль Bluetooth, может что и получится)
Заказал датчики освещенности, думаю сделать больше градаций, с модулем только два)
Надо будет код вспоминать)
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Урра, пришла посылка))
Какие функции можно реализовать с модулем bluetooth?
На вскидку пришла одна идея, корректировка времени, можно и часы и минуты в разные направления.
И еще мысль есть, запилить будильник, но чую, места не хватит, нано на УНО переходить, благо заказал ее))
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@Wan-Derer, приветствую, важный вопрос.
DS3231 и BMP 280 вешают на А4 и А5 пины, можно ли оба датчика повесить на одни и те же пины?
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Заменил модуль часов, думал придется весь код переписывать, а оказалось все очень просто, заменил
C++:
//iarduino_RTC time(RTC_DS1302,12,10,11);
iarduino_RTC time(RTC_DS3231);
и заменил цифровой датчик освещенности на фоторезистор и прописал 4 сценария яркости)
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
последняя версия кода)
заметил один нюанс, что на пороге значений пограничных сценарий, подсветка скачет между ними, происходит мерцание)
возможно ли как-то сделать плавную смену подсветки, ну или следить поставить задержку, чтобы лишний раз не мерцало)
 

Вложения