Martin Sturm
/
Lab3
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Wed Jul 13 2022 18:08:25 by 1.7.2