Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 //Celeritous Technical Services, Corp. 2012 00002 //Mattehw R. Gattis 00003 00004 #include "math.h" 00005 #include "ST7565R.h" 00006 #include "QEI.h" 00007 #include "L25AA02EA48.h" 00008 #include "EthernetNetIf.h" 00009 #include "mbed.h" 00010 #include "defines.h" 00011 #include "HTTPServer.h" 00012 #include "RPCFunction.h" 00013 #include "RPCVariable.h" 00014 00015 ST7565R lcd(p12,p29,p7,p5, p30 , true); 00016 L25AA02EA48 mac_pins(P0_9,P0_8,P0_7,P0_18); //pins to MAC address chip on breakout board 00017 QEI OE(p14,p28,NC,1,QEI::X4_ENCODING); 00018 00019 //Timer keyttime; 00020 Ticker net_interrupt; 00021 volatile int inputnav; 00022 volatile char *macAddress; 00023 volatile unsigned int ethresult=(~0); 00024 IpAddr ip; 00025 float myObj; 00026 RPCVariable<float> MyVar(&myObj, "MyVar"); 00027 00028 EthernetNetIf eth; 00029 HTTPServer svr; 00030 LocalFileSystem fs("webfs"); 00031 00032 void print_menu(char **); 00033 void print_sensors(char line); 00034 void main_menu(); 00035 void key_handle(); 00036 void OE_menu(); 00037 void eth_menu(); 00038 void gfx_demo(); 00039 void net_poll(); 00040 void http_setup(); 00041 00042 extern "C" void mbed_mac_address(char *mac) { //calling my own mbed_mac_address function to use the Breakout board's MAC chip 00043 for (int i=0; i<6; i++) {mac[i] = macAddress[i];} 00044 } 00045 00046 int main() 00047 { 00048 MyVar.write(3.14159); 00049 NAV_UP_int.fall(&key_handle); 00050 NAV_LEFT_int.fall(&key_handle); 00051 NAV_DOWN_int.fall(&key_handle); 00052 NAV_RIGHT_int.fall(&key_handle); 00053 NAV_PRESS_int.fall(&key_handle); 00054 //keyttime.start(); 00055 main_menu(); 00056 } 00057 00058 void print_menu(char **buffer) { 00059 char i; 00060 for (i=0;i<4;i++) { 00061 lcd.moveto(2,i); 00062 lcd.printf("%s",buffer[i]); 00063 } 00064 } 00065 00066 void print_sensors(signed char line) { 00067 AnalogIn vtemp(p15); 00068 AnalogIn vrh(p16); 00069 AnalogIn vlight(p17); 00070 float temp; 00071 00072 temp=0.1*(vtemp.read()*3300)-60; 00073 if (line<=1) {lcd.moveto(9,1-line);lcd.printf("%0.2f C",temp);} 00074 if (line<=2) {lcd.moveto(9,2-line);lcd.printf("%0.2f %%",((25*(20000*(3.3*vrh.read())-9999))/10494)/(1.0546-0.0026*temp));} 00075 if (line<=3) {lcd.moveto(9,3-line);lcd.printf("%0.2f lux",0.0003f*pow(2.71828183f,9.2f*(1.6f-(3.3f*vlight.read()))));} 00076 return; 00077 } 00078 00079 void main_menu() { 00080 char *buffer[]={"Web Server","Temp :","Humid:","Light:","Optical Encoder","Graphics Demo"}; 00081 signed char cursor=0,line=0; 00082 00083 while (1) { 00084 lcd.clearBuffer(); 00085 if (cursor>line+2) {line=cursor-2;} 00086 if (cursor<=line) {line=cursor-1;} 00087 if (line<0) {line=0;} 00088 if (line>2) {line=2;} 00089 print_menu(&buffer[line]); 00090 print_sensors(line); 00091 lcd.moveto(0,cursor-line); 00092 lcd.printf("->"); 00093 lcd.swapBuffers(); 00094 if (inputnav&NAV_UP && cursor>0) {cursor--;} 00095 if (inputnav&NAV_DOWN && cursor<5) {cursor++;} 00096 if (inputnav==NAV_PRESS && cursor==4) {OE_menu();} 00097 if (inputnav==NAV_PRESS && cursor==0) {eth_menu();} 00098 if (inputnav==NAV_PRESS && cursor==5) {gfx_demo();} 00099 inputnav=0; 00100 wait_ms(20); 00101 } 00102 } 00103 00104 void key_handle() { 00105 wait_ms(20); 00106 /*if (keyttime.read_ms()>100) {*/inputnav=(~NAVIn.read())&0x1F;//keyttime.reset();} 00107 } 00108 00109 void OE_menu() { 00110 PwmOut led(LED1); 00111 char *buffer[]={"","","OE Pulse:","Back"}; 00112 char i,j,cursor=2; 00113 int last_pulse=0; 00114 int pulse=0; 00115 float output=0.0; 00116 00117 OE.reset(); 00118 while (1) { 00119 lcd.clearBuffer(); 00120 00121 print_menu(buffer); 00122 lcd.moveto(0,cursor); 00123 lcd.printf("->"); 00124 00125 lcd.moveto(12,2); 00126 lcd.printf("%d",pulse); 00127 output=-((float)pulse)/128; 00128 if (output>1.0f) {output=1.0f;} 00129 if (output<0.0f) {output=0.0f;} 00130 led=output; 00131 for (j=0;j<(int)(output*128);j++) { 00132 for (i=0;i<7;i++) { 00133 lcd.clearpixel(j,i); 00134 } 00135 } 00136 00137 lcd.swapBuffers(); 00138 00139 inputnav=0; 00140 while (!inputnav && pulse==last_pulse) {pulse=OE.getPulses();} 00141 if (inputnav&NAV_UP && cursor>2) {cursor--;} 00142 if (inputnav&NAV_DOWN && cursor<3) {cursor++;} 00143 if (inputnav==NAV_PRESS && cursor==3) { 00144 wait_ms(200); 00145 led=0.0f; 00146 inputnav=0; 00147 return; 00148 } 00149 00150 last_pulse=pulse; 00151 } 00152 } 00153 00154 void gfx_demo() { 00155 unsigned int iteration=0; 00156 unsigned int pixel=0; 00157 00158 unsigned int x=0; 00159 unsigned int y=0; 00160 00161 inputnav=0; 00162 while(inputnav!=NAV_PRESS) 00163 { 00164 00165 lcd.clearBuffer(); 00166 wait_ms(30); 00167 for(int i=0; i<32; i++) 00168 { 00169 for (int j=0; j<128; j++) 00170 { 00171 pixel = (i+iteration+y)*(j+iteration+x); 00172 pixel &= 15; 00173 00174 if (pixel == 0) lcd.clearpixel(j,i); 00175 } 00176 } 00177 00178 iteration++; 00179 lcd.swapBuffers(); 00180 } 00181 wait_ms(200); 00182 inputnav=0; 00183 } 00184 00185 void eth_menu() { 00186 lcd.clearBuffer(); 00187 if (ethresult==(~0)) { 00188 lcd.moveto(0,0);lcd.printf("Initializing..."); 00189 lcd.swapBuffers(); 00190 lcd.clearBuffer(); 00191 macAddress=mac_pins.getMacAddress(); 00192 } 00193 lcd.moveto(0,0); 00194 lcd.printf("Mac:%02X:%02X:%02X:%02X:%02X:%02X", macAddress[0], macAddress[1], macAddress[2], macAddress[3], macAddress[4], macAddress[5]); 00195 lcd.moveto(0,1); 00196 if (ethresult==(~0)) {ethresult=eth.setup();} 00197 if (ethresult==ETH_OK) { 00198 ip=eth.getIp(); 00199 lcd.printf("IP :%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]); 00200 http_setup(); 00201 net_interrupt.attach_us(&net_poll,2000); 00202 } 00203 else { 00204 lcd.printf("ERROR on startup!"); 00205 lcd.moveto(0,2); 00206 lcd.printf("Reset and try again."); 00207 } 00208 lcd.moveto(0,3); 00209 lcd.printf("->Back"); 00210 lcd.swapBuffers(); 00211 inputnav=0; 00212 //simply wait for the user to press the middle nav key 00213 while (inputnav!=NAV_PRESS) {wait_ms(20);} 00214 wait_ms(200); 00215 inputnav=0; 00216 return; 00217 } 00218 00219 void net_poll() { 00220 Net::poll(); 00221 } 00222 00223 void http_setup() { 00224 Base::add_rpc_class<AnalogIn>(); 00225 00226 FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path 00227 00228 svr.addHandler<RPCHandler>("/rpc"); 00229 svr.addHandler<FSHandler>("/"); //Default handler 00230 00231 svr.bind(80); 00232 }
Generated on Tue Jul 12 2022 13:41:30 by
1.7.2