Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SDFileSystem.h"
00003 #include "NokiaLCD.h"
00004 #include "myBMP.h"
00005 #include "mpr121.h"
00006 #include "jpegutil.h"
00007 #include <string>
00008 #include <cctype>
00009 
00010 SDFileSystem sd(p5, p6, p7, p8, "sd");
00011 NokiaLCD lcd(p11, p13, p14, p15, NokiaLCD::LCD6610);
00012 DigitalOut led1(LED1);
00013 DigitalOut led2(LED2);
00014 DigitalOut led3(LED3);
00015 DigitalOut led4(LED4);
00016 InterruptIn interrupt(p26);
00017 I2C i2c(p9,p10);
00018 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
00019 Serial pc(USBTX,USBRX);
00020 vector<string> files;
00021 string file;
00022 int selectpos = 1;
00023 int oldvalue;
00024 int value;
00025 bool showingImage = false;
00026 bool displayImage = false;
00027 
00028 
00029 string toLower(string in)
00030 {
00031     for(int i = 0; i < in.length(); i++)
00032     {
00033         in[i] = tolower(in[i]);
00034     }
00035     return in;
00036 }
00037 
00038 void changepos(int val2,int val1){ //compares the current position with the old one andchanges currsor accordingly.
00039 //val1 is the lower value ond val2 th higher possibla value
00040 
00041 if (!showingImage) {
00042                 if (oldvalue==val1) {
00043                     if (selectpos != 1)
00044                     selectpos--;
00045                     // if (selectpos < 1)selectpos = files.size(); // no more raparround
00046                 } else if(oldvalue==val2){
00047                     if (selectpos != files.size())
00048                     selectpos++;
00049                     //if (selectpos > files.size()) selectpos = 1; // no more raparound
00050                 }
00051             }
00052 }
00053 
00054 void fallInterrupt() {
00055     value=mpr121.read(0x00);
00056     value +=mpr121.read(0x01)<<8;
00057     //pc.printf("%d\r\n",value);
00058     switch (value) {
00059         case 0: //no button is pressed (good only to execute actions on release)
00060                 switch (oldvalue) { //if not do action according to button realeased.
00061                     case (1<<4):
00062                         if (showingImage) {
00063                             lcd.background(0xFFFFFF);
00064                             lcd.foreground(0xFFFFFF);
00065                             lcd.cls();
00066                             showingImage = false;
00067                         }
00068                         break;
00069 
00070                     case (1<<5):
00071                         if (!showingImage) {
00072                             displayImage = true;
00073                             showingImage = true;
00074                         }
00075                         break;
00076                 
00077             }
00078             case 1:
00079             changepos(-1,3); //cannot have a lower value as 0 i no button
00080             break;
00081         case 3:
00082             changepos(1,2);
00083             break;
00084         case 2:
00085             changepos((2+1),(2+4));
00086             break;
00087         case (2+4):
00088             changepos(2,4);
00089             break;
00090         case 4:
00091             changepos((4+2),(4+8));
00092             break;
00093         case (4+8):
00094             changepos(4,8);
00095             break;
00096         case 8:
00097             changepos(4+8,-1); // cannot have a highe boundry
00098             break;
00099 
00100         default:
00101 
00102             break;
00103     };
00104 
00105     oldvalue=value;
00106 }
00107 
00108 void ls(char *dir)
00109 {
00110     DIR *dp;
00111     struct dirent *dirp;
00112     dp = opendir(dir);
00113     while((dirp = readdir(dp)) != NULL)
00114     {
00115         files.push_back(string(dirp->d_name));
00116     }
00117 }
00118 
00119 int main() {
00120     interrupt.fall(&fallInterrupt);
00121     interrupt.mode(PullUp);
00122     
00123     lcd.background(0xFFFFFF);
00124     lcd.foreground(0xFFFFFF);
00125     lcd.cls();
00126     ls("/sd");
00127     
00128     led1 = 1;
00129     
00130     while(1) {
00131         int ypos = 1;
00132         if(displayImage)
00133         {
00134             __disable_irq();
00135             file = files[selectpos - 1];
00136             string ext = file.substr(file.rfind('.')+1);
00137             ext = toLower(ext);
00138             if(!ext.compare("bmp"))
00139             {
00140                 RGBApixel *Colors = new RGBApixel [2];
00141                 file = "/sd/" + file;
00142                 lcd.background(0x000000);
00143                 lcd.foreground(0x000000);
00144                 lcd.cls();
00145                 ReadBMPFromFile(file.c_str(), Colors, &lcd);
00146                 showingImage = true;
00147             }
00148             else if(!ext.compare("jpeg") || !ext.compare("jpg"))
00149             {
00150                 file = "/sd/" + file;
00151                 lcd.background(0x000000);
00152                 lcd.foreground(0x000000);
00153                 lcd.cls();
00154                 ReadJPEGFromFile(file.c_str(), &lcd);
00155                 showingImage = true;
00156             }
00157             else
00158             {
00159                 showingImage = false;
00160             }
00161             displayImage = false;
00162             __enable_irq();
00163         }
00164         if(!showingImage)
00165         {
00166             lcd.background(0xFFFFFF);
00167             lcd.locate(0,ypos);
00168             for(vector<string>::iterator it=files.begin(); it < files.end(); it++)
00169             {
00170                 if(ypos == selectpos)
00171                 {
00172                     lcd.foreground(0xFF0000);
00173                 }
00174                 else
00175                 {
00176                     lcd.foreground(0x000000);
00177                 }
00178                 lcd.printf("%s",(*it).c_str());
00179                 ypos++;
00180                 lcd.locate(0,ypos);
00181             }
00182         }
00183         led1 = !led1;
00184         wait(0.05);
00185     }
00186 }