日本語表示に対応したRSSヘッドラインリーダです。 詳細は、エレキジャックWebをご参照ください。
Dependencies: EthernetNetIf NTPClient_NetServices TextLCD mbed HTTPClient
main.cpp
00001 #include "mbed.h" 00002 #include "EthernetNetIf.h" 00003 #include "HTTPClient.h" 00004 #include "NTPClient.h" 00005 00006 #define RSS1M "CQ Interface>" 00007 #define RSS1 "http://www.kumikomi.net/interface/atom.xml" 00008 #define RSS2M "Sports Topic>" 00009 #define RSS2 "http://news.goo.ne.jp/news/rss/topics/sports/index.rdf" 00010 #define RSS3M "Make:Japan >" 00011 #define RSS3 "http://jp.makezine.com/blog/index.xml" 00012 #define RSS4M "Weather NEWS>" 00013 #define RSS4 "http://feeds.feedburner.jp/hitokuchi_4410" 00014 00015 Ticker rss_img; // For RSS animation 00016 00017 DigitalIn sw1(p17); 00018 DigitalIn sw2(p19); 00019 DigitalIn sw3(p20); 00020 DigitalIn sw4(p21); 00021 00022 int img = 26; // animate img 26-29 00023 int rss_no = 0; 00024 00025 Serial pc(USBTX, USBRX); // tx, rx 00026 Serial lcd(p9, p10); // tx, rx 00027 00028 EthernetNetIf eth; 00029 HTTPClient http; 00030 NTPClient ntp; 00031 00032 LocalFileSystem local("local"); 00033 HTTPResult result; 00034 bool completed = false; 00035 00036 //* HTTP request callback ****************************************** 00037 void request_callback(HTTPResult r) 00038 { 00039 result = r; 00040 completed = true; 00041 } 00042 00043 //* animate RSS icon *********************************************** 00044 void animate () 00045 { 00046 img++; 00047 if (img > 29) img = 26; 00048 lcd.printf("\x1b@%d;0;30;64I",img); 00049 } 00050 00051 //* Display menu **************************************************** 00052 void menu () 00053 { 00054 lcd.printf("\x1b@20;0I"); // Display Openning 00055 lcd.printf("\x1b[1;24H"); // 00056 lcd.printf(RSS1M); // 00057 lcd.printf("\x1b[5;24H"); // 00058 lcd.printf(RSS2M); // 00059 lcd.printf("\x1b[9;24H"); // 00060 lcd.printf(RSS3M); // 00061 lcd.printf("\x1b[13;24H"); // 00062 lcd.printf(RSS4M); // 00063 00064 } 00065 00066 //* Blink selected Item ********************************************* 00067 void select(int rss) 00068 { 00069 for (int i=0;i<=3;i++) 00070 { 00071 lcd.printf("\x1b@25;0;180;%dI", ((rss-1)*64)+14); 00072 wait_ms(100); 00073 lcd.printf("\x1b@0;0;133;20;180;%d;0z", ((rss-1)*64)+14); 00074 wait_ms(50); 00075 } 00076 lcd.printf("\x1b@25;0;180;%dI", ((rss-1)*64)+14); 00077 } 00078 00079 //**************************************************************************** 00080 //* M A I N 00081 //**************************************************************************** 00082 int main() { 00083 00084 int color = 0; 00085 int flag = 0; 00086 int count = 0; 00087 char c; 00088 char buffer[100]; 00089 char BigBuf[512 + 1] = {0}; 00090 00091 // Init SW 00092 sw1.mode(PullUp); 00093 sw2.mode(PullUp); 00094 sw3.mode(PullUp); 00095 sw4.mode(PullUp); 00096 00097 // Set lcd baudrate 00098 lcd.printf("\x1b@14Z"); // 57600bps 00099 lcd.baud(57600); 00100 00101 lcd.printf("\x1b@80Z"); // Set Curser off 00102 lcd.printf("\x1b@0Z"); // clear all 00103 lcd.printf("\x1b@30Z"); // set buffer 0 00104 lcd.printf("\x1b[1;23;m"); // bold;white 00105 00106 // Display gend Get menu ******************************** 00107 menu(); 00108 while ( rss_no == 0) 00109 { 00110 if (sw1 == 0 ) {rss_no = 1; select(1);} 00111 if (sw2 == 0 ) {rss_no = 2; select(2);} 00112 if (sw3 == 0 ) {rss_no = 3; select(3);} 00113 if (sw4 == 0 ) {rss_no = 4; select(4);} 00114 } 00115 00116 00117 rss_img.attach(&animate, 0.3); // the address of the function to be attached (flip) and the interval (2 seconds) 00118 EthernetErr ethErr = eth.setup(); 00119 if(ethErr) 00120 { 00121 lcd.printf("Error %d in setup.\n\r", ethErr); 00122 return -1; 00123 } 00124 00125 rss_img.detach(); 00126 00127 lcd.printf("\x1b[1;19;4;m"); //Set char to Blue 00128 lcd.printf("\x1b@21;0I"); // Dsiaplay backGround 00129 lcd.printf("\x1b[*"); // Claer all char and set curser to HP 00130 00131 // Set UTF8 00132 lcd.printf("\x1b@21Z"); // Not CR/LF 00133 lcd.printf("\x1b[4;0H"); // Set Cuser to LINE 4 00134 lcd.printf("\x1b@3Z"); // Set Char code to UTF-8 00135 00136 HTTPStream stream; 00137 00138 completed=false; 00139 00140 stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read 00141 00142 if (rss_no == 1) 00143 { 00144 // lcd.printf("%s ...\n\r", RSS1); 00145 HTTPResult r = http.get(RSS1, &stream, request_callback); 00146 } 00147 if (rss_no == 2) 00148 { 00149 // lcd.printf("%s ...\n\r", RSS2); 00150 HTTPResult r = http.get(RSS2, &stream, request_callback); 00151 } 00152 if (rss_no == 3) 00153 { 00154 // lcd.printf("%s ...\n\r", RSS3); 00155 HTTPResult r = http.get(RSS3, &stream, request_callback); 00156 } 00157 if (rss_no == 4) 00158 { 00159 // lcd.printf("%s ...\n\r", RSS4); 00160 HTTPResult r = http.get(RSS4, &stream, request_callback); 00161 } 00162 rss_no = 0; 00163 00164 FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing 00165 while(!completed) 00166 { 00167 Net::poll(); //Polls the Networking stack 00168 if(stream.readable()) 00169 { 00170 BigBuf[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string 00171 fprintf(fp,BigBuf); 00172 //Note: some servers do not like if you throttle them too much, so printf'ing during a request is generally bad practice 00173 stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it 00174 } 00175 } 00176 fclose(fp); 00177 00178 fp = fopen( "/local/out.txt", "r"); 00179 00180 if (fp==NULL) printf ("Error opening file"); 00181 else 00182 { 00183 do 00184 { 00185 c = fgetc (fp); 00186 if (c == '<') 00187 { 00188 c = fgetc(fp); 00189 if(c == 't') 00190 { 00191 c = fgetc(fp); 00192 if(c == 'i') 00193 { 00194 c = fgetc(fp); 00195 if(c == 't') 00196 { 00197 c = fgetc(fp); 00198 if( c == 'l') 00199 { 00200 c = fgetc(fp); 00201 if( c == 'e') 00202 { 00203 c = fgetc(fp); 00204 if(c == '>') 00205 { 00206 count++; 00207 if((count >=1) && (count <=10)) 00208 { 00209 if(count == 11) break; 00210 int i = 0; 00211 c = fgetc(fp); 00212 while(c != '<') 00213 { 00214 buffer[i] = c; 00215 i++; 00216 c = fgetc(fp); 00217 } 00218 buffer[i] = '\0'; 00219 lcd.printf("%s\n\r",buffer); 00220 if (color == 0) 00221 { lcd.printf("\x1b[29;23;24m"); //Set char to BLUE 00222 color = 1; 00223 } else { 00224 lcd.printf("\x1b[29;18;24m"); //Set char to RED 00225 color = 0; 00226 } 00227 00228 } 00229 } 00230 } 00231 } 00232 } 00233 } 00234 } 00235 } 00236 } 00237 while (count <= 11); 00238 fclose (fp); 00239 } // END OF else 00240 00241 } // END OF main
Generated on Sat Jul 23 2022 05:59:33 by 1.7.2