日本語表示に対応したRSSヘッドラインリーダです。 詳細は、エレキジャックWebをご参照ください。

Dependencies:   EthernetNetIf NTPClient_NetServices TextLCD mbed HTTPClient

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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