Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2014, 15:14   #1
pawel
Junior Member
 
Регистрация: 28.11.2013
Сообщений: 4
Вес репутации: 0
pawel is an unknown quantity at this point
По умолчанию

Сделал отображение 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=0i<7i++) digitalWrite (segmentPin[i], segment[n][i]);
}



void setup() {
  for (
int i=0i<8i++) pinMode(segmentPin[i], OUTPUT);
  for (
int i=0i<4i++) pinMode(catodPin[i], OUTPUT);
  
Serial.begin(9600);
  
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// получаем байт
         
millis();
         break;
       
    }
  }
  
  if ((
millis()-t)<120000) { // если больше 120 сек нет данных - гасим экран
    
int k 1000;
    for (
int i 04i++) {
      
int j data%(10*k)/k;
      
/= 10;
      
led (j);
      
digitalWrite(segmentPin[7], ((== 1) and ((millis()%1000) > 500))); // мигаем точкой второго разряда
      
if (!((== 0) and (== 0))) { // '0' в первом разряде не отображаем
        
digitalWrite(catodPin[i], HIGH);
        
delay(3);
        
digitalWrite(catodPin[i], LOW);
      }
    }
  } 

На OpenWrt в кроне ежеминутно запускаю:

PHP код:
#!/bin/sh

if [ -/dev/ttyUSB0 ]
then
    stty 
-/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.
pawel вне форума   Ответить с цитированием
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 16:37. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика