게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[약스압] 베오베 시계 프로그래밍 해보기..
게시물ID : science_38696짧은주소 복사하기
작성자 : 엔델
추천 : 11
조회수 : 1653회
댓글수 : 22개
등록시간 : 2014/07/15 21:51:22
english_string_clock2.jpg

이 시계를 직접 만들어 보진 못하겠지만, 그래도 이를 프로그래밍 해보는 정도야 시도해 볼 수 있지 않겠냐 생각해 봤습니다.

프로그래밍이라서 과학 게시판이 아니라 프로그래밍 게시판에 올려야 맞겠지만, 그냥 여기에 올립니다.

일단, 시계의 동작을 이해해야 겠지요.

주어진 힌트는 사진 뿐이므로, 이를 분석해 본 시계의 동작은 다음과 같습니다.

===================================================================================================
1. 이 시계는 5분 단위이다. 
  12:00 , 12:05 는 표시 가능하지만, 12:01, 12:02 는 표기가 안된다.

2. 이 시계는 12시간제 이며. AM, PM 도 따로 표기하지 않는다.

3. 이 시계는 영어식 시계 표현을 사용한다. 즉 past 와 to 를 이용한 시간 표기를 한다.
단, 영어에는 정오를 뜻하는 noon 과, 자정을 뜻하는 midnight 이라는 표현이 있지만, 이는 사용하지 않는다. 

4. 매시 0분은 o'clock 이라는 표현을 쓴다. 
  예를 들어 12:00 은 it is twelve o'clock
  단 카타스트로피 (') 는 실제로는 없다.

5. 15분과 30분은 quarter 와 half 가 쓰인다.

6. 5분부터 30분 사이는 past 용법을 사용한다. 
  예를 들어 12:05 부터 차례대로
   12:05 - five minutes past twelve
   12:10 - ten minutes past twelve
   12:15 - quarter past twelve
   12:20 - twenty minutes past twelve
   12:25 - twenty five minutes past twelve
   12:30 - half past twelve
   
6. 35분부터 55분 사이는 to 용법(X시 Y분전)을 사용한다. 
  예를 들어 12:35 부터 차례대로
   12:35 - twenty five minutes to one
   12:40 - twenty minutes to one
   12:45 - quarter to one
   12:50 - ten minutes to one
   12:55 - five minutes to one
   
7. 별도의 날짜 표기는 없지만, 생일 처리가 가능한 것으로 봐서, 내부의 컴퓨터는 날짜 관리도 된다.

8. 띄어쓰기를 처리하기 위해서 약간의 더미 글자가 추가 되어 있다. 
  예를 들어 IT IS 사이에 있는 R 같은 것은 전혀 켜질 일 이 없다.

9. DEAN 과 SHELBEY 라는 이름은 그냥 새겨져 있다. 제작자가 직접 새겨 넣은 것.
   만약 다른 이름으로 변경하려면, 더미 글자와 숫자 배열을 적절히 재배열할 필요가 있다.
   최대 12자까지 이름으로 새겨 볼 여지가 있으며, 더 긴 이름을 쓰려면, 한줄 늘리거나 할 필요가 있다. 

===================================================================================================

* 구현 #1 *
시와 분을 넣으면 문자열로 출력해 주기
예를 들어 12 55 를 넣으면 it is five minutes to one 이라는 문자열을 출력하기.

=> 그냥 문자열 가지고 놀기 수준으로 코딩이 가능합니다.

* 구현 #2 *
시와 분을 넣으면 필요한 비트맵을 뽑아 내기

저 시계에서 유의미한 문자열은 다음과 같습니다
"IT IS" "TEN" "HALF"
"QUARTER" "TWENTY"
"FIVE" "MINUTES"
"HAPPY" "PAST" "TO"
"ONE" "BIRTH" "THREE"
"ELEVEN" "FOUR" "DAY"
"TWO" "DEAN" "EIGHT"
"SIX" "SHELBEY" "TEN"
"TWELVE" "OCLOCK"

이중 생일과 관련된 "HAPPY" "BIRTH" "DAY" "DEAN" "SHELBEY" 별도 처리한다 생각 하고 논외 처리 합니다.
"IT IS" 는 항상 켜집니다.
저기에 선택이 안된 글자는 띄어쓰기를 위한 더미 글자 이며, 전혀 켜지지 않습니다.

처음 네줄에 나오는 TEN,HALF,QUARTER,TWENTY,FIVE, MINUTES, PAST,TO 는 분을 표기 하기 위해서 필요합니다.

그 다음에 나오는 ONE 부터 TWELVE 까지는 시를 표시하기 위해서 사용합니다.

OCLOCK 은 당연히 정각을 의미합니다.

구현 #1 을 살짝 변현해서 시와 분을 넣어주면 어떤 단어들을 켜야 할지 비트맵으로 표현하는 함수를 작성합니다.

* 구현 #3 *
H/W 로 구성하기 위해서는 비트맵을 가지고 해당 글자에 대한 LED 를 켜주면 됩니다.
하지만, S/W 로 시뮬레이션 하려면 대략 아래와 같은 문자열로 장난 쳐야 합니다.

        "itxisctenhalf"
        "quartertwenty"
        "fivecminutesh"
        "nhappypasttod"
        "onebirththree"
        "elevenfourday"
        "twodeaneightv"
        "ninesevenfive"
        "sixshelbeyten"
        "twelveuoclock"

이런 문자열 배열을 하나 만들고, 켜는 것을 시뮬레이션 하기 위해서 해당 글자만 대문자로 바꿔 봤습니다.

그래픽을 이용하면 좀더 사실적으로 시뮬레이션 해 볼 수 있겠지만, 일단 그냥 텍스트로만 구현 했습니다.

===================================================================================================

실제 프로그램

코드가 더러워서 공개는 못하겠고, 결과만 뽑아 봅니다.

켜는 것을 시뮤레이션 하기위해서 소문자를 대문자로 바꾼 버전과,
좀더 보기 편하게 대문자만 남겨 놓은 버전 2가지로 출력 되도록 했습니다.

테스트를 위해서 12:00, 1:05, 2:10, 3:15, 4:20, 5:25, 6:30, 7:35, 8:40, 9:45, 10:50, 11:55 의 결과를 뽑아 내었습니다.

./a.out 
-----------------------
[12:00]
-----------------------
ITxISctenhalf
quartertwenty
fivecminutesh
nhappypasttod
onebirththree
elevenfourday
twodeaneightv
ninesevenfive
sixshelbeyten
TWELVEuOCLOCK
-----------------------
IT.IS........
.............
.............
.............
.............
.............
.............
.............
.............
TWELVE.OCLOCK
=======================

-----------------------
[ 1:05]
-----------------------
ITxISctenhalf
quartertwenty
FIVEcminutesh
nhappyPASTtod
ONEbirththree
elevenfourday
twodeaneightv
ninesevenfive
sixshelbeyten
twelveuoclock
-----------------------
IT.IS........
.............
FIVE.........
......PAST...
ONE..........
.............
.............
.............
.............
.............
=======================

-----------------------
[ 2:10]
-----------------------
ITxIScTENhalf
quartertwenty
fivecminutesh
nhappyPASTtod
onebirththree
elevenfourday
TWOdeaneightv
ninesevenfive
sixshelbeyten
twelveuoclock
-----------------------
IT.IS.TEN....
.............
.............
......PAST...
.............
.............
TWO..........
.............
.............
.............
=======================

-----------------------
[ 3:15]
-----------------------
ITxISctenhalf
QUARTERtwenty
fivecminutesh
nhappyPASTtod
onebirthTHREE
elevenfourday
twodeaneightv
ninesevenfive
sixshelbeyten
twelveuoclock
-----------------------
IT.IS........
QUARTER......
.............
......PAST...
........THREE
.............
.............
.............
.............
.............
=======================

-----------------------
[ 4:20]
-----------------------
ITxISctenhalf
quarterTWENTY
fivecminutesh
nhappyPASTtod
onebirththree
elevenFOURday
twodeaneightv
ninesevenfive
sixshelbeyten
twelveuoclock
-----------------------
IT.IS........
.......TWENTY
.............
......PAST...
.............
......FOUR...
.............
.............
.............
.............
=======================

-----------------------
[ 5:25]
-----------------------
ITxISctenhalf
quarterTWENTY
FIVEcminutesh
nhappyPASTtod
onebirththree
elevenfourday
twodeaneightv
nineseveFIVEe
sixshelbeyten
twelveuoclock
-----------------------
IT.IS........
.......TWENTY
FIVE.........
......PAST...
.............
.............
.............
........FIVE.
.............
.............
=======================

-----------------------
[ 6:30]
-----------------------
ITxISctenHALF
quartertwenty
fivecminutesh
nhappyPASTtod
onebirththree
elevenfourday
twodeaneightv
ninesevenfive
SIXshelbeyten
twelveuoclock
-----------------------
IT.IS....HALF
.............
.............
......PAST...
.............
.............
.............
.............
SIX..........
.............
=======================

-----------------------
[ 7:35]
-----------------------
ITxISctenhalf
quarterTWENTY
FIVEcminutesh
nhappypastTOd
onebirththree
elevenfourday
twodeanEIGHTv
ninesevenfive
sixshelbeyten
twelveuoclock
-----------------------
IT.IS........
.......TWENTY
FIVE.........
..........TO.
.............
.............
.......EIGHT.
.............
.............
.............
=======================

-----------------------
[ 8:40]
-----------------------
ITxISctenhalf
quarterTWENTY
fivecminutesh
nhappypastTOd
onebirththree
elevenfourday
twodeaneightv
NINEsevenfive
sixshelbeyten
twelveuoclock
-----------------------
IT.IS........
.......TWENTY
.............
..........TO.
.............
.............
.............
NINE.........
.............
.............
=======================

-----------------------
[ 9:45]
-----------------------
ITxISctenhalf
QUARTERtwenty
fivecminutesh
nhappypastTOd
onebirththree
elevenfourday
twodeaneightv
ninesevenfive
sixshelbeyTEN
twelveuoclock
-----------------------
IT.IS........
QUARTER......
.............
..........TO.
.............
.............
.............
.............
..........TEN
.............
=======================

-----------------------
[10:50]
-----------------------
ITxIScTENhalf
quartertwenty
fivecminutesh
nhappypastTOd
onebirththree
ELEVENfourday
twodeaneightv
ninesevenfive
sixshelbeyten
twelveuoclock
-----------------------
IT.IS.TEN....
.............
.............
..........TO.
.............
ELEVEN.......
.............
.............
.............
.............
=======================

-----------------------
[11:55]
-----------------------
ITxISctenhalf
quartertwenty
FIVEcminutesh
nhappypastTOd
onebirththree
elevenfourday
twodeaneightv
ninesevenfive
sixshelbeyten
TWELVEuoclock
-----------------------
IT.IS........
.............
FIVE.........
..........TO.
.............
.............
.............
.............
.............
TWELVE.......
=======================


===================================================================================================

* 사족 *

이제 그래픽을 가미하면 되지만, 이건 제 분야가 아니라 패스.

실제 코딩은 C 로 했지만, 결국 문자열 장난이 되어 버린 바람에, 그냥 PERL 로 짜는게 더 편했을 것 같네요.

JAVA 로 컨버전 하고, 그래픽 껍데기를 잘 입혀서 안드로이드 앱으로 한번 만들어 보고 싶긴 하네요.

아니면, 원 저작자처럼 H/W 로 구현해 보던가요.

- 엔델 -

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호