日本語表示に対応したRSSヘッドラインリーダです。 詳細は、エレキジャックWebをご参照ください。
Dependencies: EthernetNetIf NTPClient_NetServices TextLCD mbed HTTPClient
main.cpp
- Committer:
- techand
- Date:
- 2012-04-05
- Revision:
- 0:0936e2c7769b
File content as of revision 0:0936e2c7769b:
#include "mbed.h" #include "EthernetNetIf.h" #include "HTTPClient.h" #include "NTPClient.h" #define RSS1M "CQ Interface>" #define RSS1 "http://www.kumikomi.net/interface/atom.xml" #define RSS2M "Sports Topic>" #define RSS2 "http://news.goo.ne.jp/news/rss/topics/sports/index.rdf" #define RSS3M "Make:Japan >" #define RSS3 "http://jp.makezine.com/blog/index.xml" #define RSS4M "Weather NEWS>" #define RSS4 "http://feeds.feedburner.jp/hitokuchi_4410" Ticker rss_img; // For RSS animation DigitalIn sw1(p17); DigitalIn sw2(p19); DigitalIn sw3(p20); DigitalIn sw4(p21); int img = 26; // animate img 26-29 int rss_no = 0; Serial pc(USBTX, USBRX); // tx, rx Serial lcd(p9, p10); // tx, rx EthernetNetIf eth; HTTPClient http; NTPClient ntp; LocalFileSystem local("local"); HTTPResult result; bool completed = false; //* HTTP request callback ****************************************** void request_callback(HTTPResult r) { result = r; completed = true; } //* animate RSS icon *********************************************** void animate () { img++; if (img > 29) img = 26; lcd.printf("\x1b@%d;0;30;64I",img); } //* Display menu **************************************************** void menu () { lcd.printf("\x1b@20;0I"); // Display Openning lcd.printf("\x1b[1;24H"); // lcd.printf(RSS1M); // lcd.printf("\x1b[5;24H"); // lcd.printf(RSS2M); // lcd.printf("\x1b[9;24H"); // lcd.printf(RSS3M); // lcd.printf("\x1b[13;24H"); // lcd.printf(RSS4M); // } //* Blink selected Item ********************************************* void select(int rss) { for (int i=0;i<=3;i++) { lcd.printf("\x1b@25;0;180;%dI", ((rss-1)*64)+14); wait_ms(100); lcd.printf("\x1b@0;0;133;20;180;%d;0z", ((rss-1)*64)+14); wait_ms(50); } lcd.printf("\x1b@25;0;180;%dI", ((rss-1)*64)+14); } //**************************************************************************** //* M A I N //**************************************************************************** int main() { int color = 0; int flag = 0; int count = 0; char c; char buffer[100]; char BigBuf[512 + 1] = {0}; // Init SW sw1.mode(PullUp); sw2.mode(PullUp); sw3.mode(PullUp); sw4.mode(PullUp); // Set lcd baudrate lcd.printf("\x1b@14Z"); // 57600bps lcd.baud(57600); lcd.printf("\x1b@80Z"); // Set Curser off lcd.printf("\x1b@0Z"); // clear all lcd.printf("\x1b@30Z"); // set buffer 0 lcd.printf("\x1b[1;23;m"); // bold;white // Display gend Get menu ******************************** menu(); while ( rss_no == 0) { if (sw1 == 0 ) {rss_no = 1; select(1);} if (sw2 == 0 ) {rss_no = 2; select(2);} if (sw3 == 0 ) {rss_no = 3; select(3);} if (sw4 == 0 ) {rss_no = 4; select(4);} } rss_img.attach(&animate, 0.3); // the address of the function to be attached (flip) and the interval (2 seconds) EthernetErr ethErr = eth.setup(); if(ethErr) { lcd.printf("Error %d in setup.\n\r", ethErr); return -1; } rss_img.detach(); lcd.printf("\x1b[1;19;4;m"); //Set char to Blue lcd.printf("\x1b@21;0I"); // Dsiaplay backGround lcd.printf("\x1b[*"); // Claer all char and set curser to HP // Set UTF8 lcd.printf("\x1b@21Z"); // Not CR/LF lcd.printf("\x1b[4;0H"); // Set Cuser to LINE 4 lcd.printf("\x1b@3Z"); // Set Char code to UTF-8 HTTPStream stream; completed=false; stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read if (rss_no == 1) { // lcd.printf("%s ...\n\r", RSS1); HTTPResult r = http.get(RSS1, &stream, request_callback); } if (rss_no == 2) { // lcd.printf("%s ...\n\r", RSS2); HTTPResult r = http.get(RSS2, &stream, request_callback); } if (rss_no == 3) { // lcd.printf("%s ...\n\r", RSS3); HTTPResult r = http.get(RSS3, &stream, request_callback); } if (rss_no == 4) { // lcd.printf("%s ...\n\r", RSS4); HTTPResult r = http.get(RSS4, &stream, request_callback); } rss_no = 0; FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing while(!completed) { Net::poll(); //Polls the Networking stack if(stream.readable()) { BigBuf[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string fprintf(fp,BigBuf); //Note: some servers do not like if you throttle them too much, so printf'ing during a request is generally bad practice stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it } } fclose(fp); fp = fopen( "/local/out.txt", "r"); if (fp==NULL) printf ("Error opening file"); else { do { c = fgetc (fp); if (c == '<') { c = fgetc(fp); if(c == 't') { c = fgetc(fp); if(c == 'i') { c = fgetc(fp); if(c == 't') { c = fgetc(fp); if( c == 'l') { c = fgetc(fp); if( c == 'e') { c = fgetc(fp); if(c == '>') { count++; if((count >=1) && (count <=10)) { if(count == 11) break; int i = 0; c = fgetc(fp); while(c != '<') { buffer[i] = c; i++; c = fgetc(fp); } buffer[i] = '\0'; lcd.printf("%s\n\r",buffer); if (color == 0) { lcd.printf("\x1b[29;23;24m"); //Set char to BLUE color = 1; } else { lcd.printf("\x1b[29;18;24m"); //Set char to RED color = 0; } } } } } } } } } } while (count <= 11); fclose (fp); } // END OF else } // END OF main