Junior Member
Регистрация: 28.11.2013
Сообщений: 4
Вес репутации: 0
|
Сделал отображение NTP-времени посредством Arduino Nano, подключенного к USB-порту роутера под OpenWrt.
По крону раз в минуту посылаю строку со временем в порт, ардуиной получаю строку и отображаю на сегментных LED индикаторах.
Получились часы точного времени, нетребующие настройки. Воткнул в USB и работают
Схема подключения индикатора к Arduino - стандартна, типа такой:
(на номера пинов не смотреть, это первая попавшаяся картинка, смотрите пины указанные в скетче)
Скетч для Arduino:
PHP код:
byte segmentPin[] = {3,4,5,6,7,8,9,2}; // пины сегментов A,B,C,D,E,F,G,DP byte catodPin[] = {10,11,12,13}; // пины разрядов
int data = 0; int tmp = 0; long t;
void led (int n) {
byte segment[][7] = { {1,1,1,1,1,1,0}, {0,1,1,0,0,0,0}, {1,1,0,1,1,0,1}, {1,1,1,1,0,0,1}, {0,1,1,0,0,1,1}, {1,0,1,1,0,1,1}, {1,0,1,1,1,1,1}, {1,1,1,0,0,0,0}, {1,1,1,1,1,1,1}, {1,1,1,1,0,1,1} };
for (int i=0; i<7; i++) digitalWrite (segmentPin[i], segment[n][i]); }
void setup() { for (int i=0; i<8; i++) pinMode(segmentPin[i], OUTPUT); for (int i=0; i<4; i++) pinMode(catodPin[i], OUTPUT); Serial.begin(9600); t = millis(); }
void loop() {
if (Serial.available()) { char ch = Serial.read(); switch(ch) { case 's': // начало передачи tmp = 0; break; case 'e': // конец передачи data = tmp; break; default: tmp = tmp*10 + ch-48; // получаем байт t = millis(); break; } } if ((millis()-t)<120000) { // если больше 120 сек нет данных - гасим экран int k = 1000; for (int i = 0; i < 4; i++) { int j = data%(10*k)/k; k /= 10; led (j); digitalWrite(segmentPin[7], ((i == 1) and ((millis()%1000) > 500))); // мигаем точкой второго разряда if (!((i == 0) and (j == 0))) { // '0' в первом разряде не отображаем digitalWrite(catodPin[i], HIGH); delay(3); digitalWrite(catodPin[i], LOW); } } } }
На OpenWrt в кроне ежеминутно запускаю:
PHP код:
#!/bin/sh
if [ -c /dev/ttyUSB0 ] then stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl date +s%H%Me > /dev/ttyUSB0 fi
Последний раз редактировалось pawel; 22.01.2014 в 18:52.
|