Shinji Tadenuma
/
ej_Photo_Frame
BlackOneサンプルプログラム ”フォトフレーム” 詳細はエレキジャックのページを参照ください。 BlackOne Sample Prrogram \"PhotoFrame\"
main.cpp@0:8ebca055e125, 2012-02-24 (annotated)
- Committer:
- techand
- Date:
- Fri Feb 24 09:44:18 2012 +0000
- Revision:
- 0:8ebca055e125
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
techand | 0:8ebca055e125 | 1 | /************************************************************************* |
techand | 0:8ebca055e125 | 2 | * |
techand | 0:8ebca055e125 | 3 | * mbed BlackOne |
techand | 0:8ebca055e125 | 4 | * Photo Frame Sample Program for Eleki Jack |
techand | 0:8ebca055e125 | 5 | * by Techand |
techand | 0:8ebca055e125 | 6 | ************************************************************************** |
techand | 0:8ebca055e125 | 7 | */ |
techand | 0:8ebca055e125 | 8 | |
techand | 0:8ebca055e125 | 9 | #include "mbed.h" |
techand | 0:8ebca055e125 | 10 | Serial pc(USBTX, USBRX); // tx, rx |
techand | 0:8ebca055e125 | 11 | Serial lcd(p9, p10); // lcd serial port |
techand | 0:8ebca055e125 | 12 | |
techand | 0:8ebca055e125 | 13 | |
techand | 0:8ebca055e125 | 14 | // Function prototypes ************************** |
techand | 0:8ebca055e125 | 15 | void set_RTC (); |
techand | 0:8ebca055e125 | 16 | void calendar(); |
techand | 0:8ebca055e125 | 17 | |
techand | 0:8ebca055e125 | 18 | |
techand | 0:8ebca055e125 | 19 | /*********************************** |
techand | 0:8ebca055e125 | 20 | * |
techand | 0:8ebca055e125 | 21 | * Photo Frame Main |
techand | 0:8ebca055e125 | 22 | * |
techand | 0:8ebca055e125 | 23 | ************************************ |
techand | 0:8ebca055e125 | 24 | */ |
techand | 0:8ebca055e125 | 25 | int main() { |
techand | 0:8ebca055e125 | 26 | wait(1); |
techand | 0:8ebca055e125 | 27 | lcd.printf("\x1b@14Z"); // 57600bps |
techand | 0:8ebca055e125 | 28 | lcd.baud(57600); |
techand | 0:8ebca055e125 | 29 | wait(1); |
techand | 0:8ebca055e125 | 30 | lcd.printf("\x1b@0Z"); // Clear all data (character & graphics) |
techand | 0:8ebca055e125 | 31 | lcd.printf("\x1b[>5h"); // Curser OFF |
techand | 0:8ebca055e125 | 32 | lcd.printf("\x1b@30Z"); // Set buffer0 for display |
techand | 0:8ebca055e125 | 33 | |
techand | 0:8ebca055e125 | 34 | set_RTC(); // Set and Start RTC |
techand | 0:8ebca055e125 | 35 | |
techand | 0:8ebca055e125 | 36 | calendar(); // format and display calender |
techand | 0:8ebca055e125 | 37 | |
techand | 0:8ebca055e125 | 38 | // Display "Photo" |
techand | 0:8ebca055e125 | 39 | for (;;) |
techand | 0:8ebca055e125 | 40 | { |
techand | 0:8ebca055e125 | 41 | for (int i=1 ;i<=8;i++) |
techand | 0:8ebca055e125 | 42 | { |
techand | 0:8ebca055e125 | 43 | lcd.printf("\x1b@%d;0I",i); |
techand | 0:8ebca055e125 | 44 | wait_ms(2000); |
techand | 0:8ebca055e125 | 45 | } |
techand | 0:8ebca055e125 | 46 | } |
techand | 0:8ebca055e125 | 47 | } |
techand | 0:8ebca055e125 | 48 | |
techand | 0:8ebca055e125 | 49 | |
techand | 0:8ebca055e125 | 50 | /***************************** |
techand | 0:8ebca055e125 | 51 | * |
techand | 0:8ebca055e125 | 52 | * Set and Init. RTC |
techand | 0:8ebca055e125 | 53 | * |
techand | 0:8ebca055e125 | 54 | ****************************** |
techand | 0:8ebca055e125 | 55 | */ |
techand | 0:8ebca055e125 | 56 | void set_RTC () { |
techand | 0:8ebca055e125 | 57 | time_t seconds = time(NULL); |
techand | 0:8ebca055e125 | 58 | |
techand | 0:8ebca055e125 | 59 | if ( (signed)seconds == -1 ) |
techand | 0:8ebca055e125 | 60 | { |
techand | 0:8ebca055e125 | 61 | // setup time |
techand | 0:8ebca055e125 | 62 | struct tm t; |
techand | 0:8ebca055e125 | 63 | |
techand | 0:8ebca055e125 | 64 | t.tm_sec = 00; // seconds 0-59 |
techand | 0:8ebca055e125 | 65 | t.tm_min = 00; // minuits 0-59 |
techand | 0:8ebca055e125 | 66 | t.tm_hour = 10; // hour 0-23 |
techand | 0:8ebca055e125 | 67 | t.tm_mday = 3; // day 1-31 |
techand | 0:8ebca055e125 | 68 | t.tm_mon = 2; // month 0-11 |
techand | 0:8ebca055e125 | 69 | t.tm_year = 112; // year from 1900 |
techand | 0:8ebca055e125 | 70 | |
techand | 0:8ebca055e125 | 71 | seconds = mktime(&t); |
techand | 0:8ebca055e125 | 72 | set_time(seconds); |
techand | 0:8ebca055e125 | 73 | } |
techand | 0:8ebca055e125 | 74 | } |
techand | 0:8ebca055e125 | 75 | |
techand | 0:8ebca055e125 | 76 | |
techand | 0:8ebca055e125 | 77 | |
techand | 0:8ebca055e125 | 78 | /***************************** |
techand | 0:8ebca055e125 | 79 | * |
techand | 0:8ebca055e125 | 80 | * format and Display Calender |
techand | 0:8ebca055e125 | 81 | * |
techand | 0:8ebca055e125 | 82 | ****************************** |
techand | 0:8ebca055e125 | 83 | */ |
techand | 0:8ebca055e125 | 84 | void calendar() |
techand | 0:8ebca055e125 | 85 | { |
techand | 0:8ebca055e125 | 86 | int w_today; |
techand | 0:8ebca055e125 | 87 | int today; |
techand | 0:8ebca055e125 | 88 | int w; |
techand | 0:8ebca055e125 | 89 | |
techand | 0:8ebca055e125 | 90 | char buff[16]; |
techand | 0:8ebca055e125 | 91 | |
techand | 0:8ebca055e125 | 92 | int md[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // size of month. Leap Year This Year! |
techand | 0:8ebca055e125 | 93 | char sun[] = {0x93,0xFA,0x00}; // sunday |
techand | 0:8ebca055e125 | 94 | char sat[] = {0x20,0x93,0x79,0x00}; // Saturday |
techand | 0:8ebca055e125 | 95 | char week[] = {0x20,0x8C,0x8E,0x20,0x89,0xCE,0x20,0x90,0x85,0x20,0x96,0xD8,0x20,0x8B,0xE0,0x00}; |
techand | 0:8ebca055e125 | 96 | // Week Header "sun mon tue wed thu fri sat" |
techand | 0:8ebca055e125 | 97 | |
techand | 0:8ebca055e125 | 98 | time_t seconds = time(NULL); |
techand | 0:8ebca055e125 | 99 | struct tm *t = localtime(&seconds); |
techand | 0:8ebca055e125 | 100 | |
techand | 0:8ebca055e125 | 101 | lcd.printf("\x1b[8;0H"); |
techand | 0:8ebca055e125 | 102 | lcd.printf("\x1b[1;32;m"); |
techand | 0:8ebca055e125 | 103 | strftime(buff,15, "%Y %B", localtime(&seconds)); |
techand | 0:8ebca055e125 | 104 | lcd.printf("%s",buff); |
techand | 0:8ebca055e125 | 105 | |
techand | 0:8ebca055e125 | 106 | lcd.printf("\x1b[9;0H"); |
techand | 0:8ebca055e125 | 107 | lcd.printf("\x1b[1;31;m"); |
techand | 0:8ebca055e125 | 108 | lcd.printf("%s",sun); |
techand | 0:8ebca055e125 | 109 | lcd.printf("\x1b[1;32;m"); |
techand | 0:8ebca055e125 | 110 | lcd.printf("%s",week); |
techand | 0:8ebca055e125 | 111 | lcd.printf("\x1b[1;34;m"); |
techand | 0:8ebca055e125 | 112 | lcd.printf("%s",sat); |
techand | 0:8ebca055e125 | 113 | |
techand | 0:8ebca055e125 | 114 | today = t->tm_mday; |
techand | 0:8ebca055e125 | 115 | w_today = t->tm_wday; |
techand | 0:8ebca055e125 | 116 | |
techand | 0:8ebca055e125 | 117 | w=0; |
techand | 0:8ebca055e125 | 118 | w_today = (w_today - ((today % 7)-1)); |
techand | 0:8ebca055e125 | 119 | |
techand | 0:8ebca055e125 | 120 | for ( int i = 1; i <= md[t->tm_mon]; i++) |
techand | 0:8ebca055e125 | 121 | { |
techand | 0:8ebca055e125 | 122 | lcd.printf("\x1b[%d;%dH",((w_today+w)/7)+10,(3*((w_today+w)%7))+0); |
techand | 0:8ebca055e125 | 123 | |
techand | 0:8ebca055e125 | 124 | lcd.printf("\x1b[1;32;m"); |
techand | 0:8ebca055e125 | 125 | |
techand | 0:8ebca055e125 | 126 | if ( (w_today+w)%7 == 0) |
techand | 0:8ebca055e125 | 127 | { |
techand | 0:8ebca055e125 | 128 | lcd.printf("\x1b[1;31;m"); |
techand | 0:8ebca055e125 | 129 | } |
techand | 0:8ebca055e125 | 130 | if ( (w_today+w)%7 == 6) |
techand | 0:8ebca055e125 | 131 | { |
techand | 0:8ebca055e125 | 132 | lcd.printf("\x1b[1;34;m"); |
techand | 0:8ebca055e125 | 133 | } |
techand | 0:8ebca055e125 | 134 | |
techand | 0:8ebca055e125 | 135 | if ( i == today) |
techand | 0:8ebca055e125 | 136 | { |
techand | 0:8ebca055e125 | 137 | lcd.printf("\x1b[7m"); |
techand | 0:8ebca055e125 | 138 | } else |
techand | 0:8ebca055e125 | 139 | { |
techand | 0:8ebca055e125 | 140 | lcd.printf("\x1b[27m"); |
techand | 0:8ebca055e125 | 141 | } |
techand | 0:8ebca055e125 | 142 | |
techand | 0:8ebca055e125 | 143 | lcd.printf("%2d",i); |
techand | 0:8ebca055e125 | 144 | w++; |
techand | 0:8ebca055e125 | 145 | } |
techand | 0:8ebca055e125 | 146 | } |