A lampost demo program - it takes in SMS commands to control a light using the shiftbrite LED.
Dependencies: VodafoneUSBModem_bleedingedge mbed-rtos mbed
Fork of 3GShiftBrite by
main.cpp
00001 #define __DEBUG__ 4 //Maximum verbosity 00002 #ifndef __MODULE__ 00003 #define __MODULE__ "net_3g_basic_http_test.cpp" 00004 #endif 00005 00006 #include "mbed.h" 00007 #include "rtos.h" 00008 #include "VodafoneUSBModem.h" 00009 #include "socket/bsd_socket.h" 00010 00011 DigitalOut led1(LED1); 00012 DigitalOut led2(LED2); 00013 DigitalOut led3(LED3); 00014 DigitalOut led4(LED4); 00015 00016 DigitalOut latch(p15); 00017 DigitalOut enable(p16); 00018 SPI spi(p11, p12, p13); 00019 00020 void setLEDColor(int red, int green, int blue) { 00021 unsigned int low_color=0; 00022 unsigned int high_color=0; 00023 high_color=(blue<<4)|((red&0x3C0)>>6); 00024 low_color=(((red&0x3F)<<10)|(green)); 00025 spi.write(high_color); 00026 spi.write(low_color); 00027 latch=1; 00028 latch=0; 00029 } 00030 00031 void setupShifty() { 00032 spi.format(16,0); 00033 spi.frequency(500000); 00034 enable=0; 00035 latch=0; 00036 } 00037 00038 void doRainbow() { 00039 for(int r=0; r<500; r++) { 00040 for(int g=0; g<500; g++) { 00041 for(int b=0; b<500; b++) { 00042 setLEDColor(r,g,b); 00043 } 00044 } 00045 } 00046 setLEDColor(500,500,500); 00047 Thread::wait(1000); 00048 setLEDColor(0,0,0); 00049 } 00050 00051 void doFlash() { 00052 int interval = 100; 00053 for(int i=0; i<5; i++) { 00054 setLEDColor(500,0,0); 00055 Thread::wait(interval); 00056 setLEDColor(0,0,0); 00057 Thread::wait(interval); 00058 setLEDColor(500,500,500); 00059 Thread::wait(interval); 00060 setLEDColor(0,0,0); 00061 Thread::wait(interval); 00062 setLEDColor(0,0,500); 00063 Thread::wait(interval); 00064 setLEDColor(0,0,0); 00065 Thread::wait(interval); 00066 } 00067 setLEDColor(500,0,0); 00068 } 00069 00070 00071 void lightListener(void const*) { 00072 VodafoneUSBModem modem; 00073 // socket stuff 00074 int sockfd,ret = OK; 00075 uint16_t port = 3232; 00076 struct sockaddr_in serverAddress; 00077 struct hostent *server; 00078 char urlBuffer[128]; 00079 int urlBufferLength = 128; 00080 00081 // declare space for phone number and message storage 00082 char numBuffer[20], msgBuffer[256]; 00083 size_t numSMS; // variable to track number of received messages 00084 00085 //int ret = modem.connect("internet","web","web"); 00086 00087 if(ret == OK) { 00088 int count = 30; 00089 int rssi; 00090 int r=0,g=0,b=0; 00091 LinkMonitor::REGISTRATION_STATE regState; 00092 LinkMonitor::BEARER bearer; 00093 while(1) { 00094 00095 //modem.getLinkState(&rssi, ®State, &bearer); 00096 //DBG("RSSI: %d dBm; Reg state: %d; Bearer: %d", rssi, regState, bearer); 00097 00098 // retrieve the short message count into numSMS 00099 if(modem.getSMCount(&numSMS)==OK) { 00100 // check if any short messages have been received 00101 if(numSMS>0) { 00102 DBG("SM count > 0"); 00103 // get the oldest short message in the queue 00104 if(modem.getSM(numBuffer,msgBuffer,256)==OK) { 00105 if(strcmp(msgBuffer,"flash")==0) { 00106 doFlash(); 00107 continue; 00108 } else if(strcmp(msgBuffer,"rainbow")==0) { 00109 doRainbow(); 00110 continue; 00111 } else if(strcmp(msgBuffer,"red")==0) { 00112 setLEDColor(1000,0,0); 00113 continue; 00114 } else if(strcmp(msgBuffer,"green")==0) { 00115 setLEDColor(0,1000,0); 00116 continue; 00117 } else if(strcmp(msgBuffer,"blue")==0) { 00118 setLEDColor(0,0,1000); 00119 continue; 00120 } else if(strcmp(msgBuffer,"purple")==0) { 00121 setLEDColor(1000,0,1000); 00122 continue; 00123 } else if(strcmp(msgBuffer,"off")==0) { 00124 setLEDColor(0,0,0); 00125 continue; 00126 } 00127 00128 if(sscanf(msgBuffer,"%d,%d,%d",&r,&g,&b)!=3) { 00129 continue; 00130 } 00131 DBG("Setting light to: %d,%d,%d",r,g,b); 00132 00133 if(r<256) { 00134 r *= 4; 00135 } 00136 00137 if(g<256) { 00138 g *= 4; 00139 } 00140 00141 if(b<256) { 00142 b *= 4; 00143 } 00144 00145 if(r>1023) { 00146 r = 1023; 00147 } 00148 00149 if(g>1023) { 00150 g = 1023; 00151 } 00152 00153 if(b>1023) { 00154 b = 1023; 00155 } 00156 00157 setLEDColor(r,g,b); 00158 00159 00160 // connect to socket and push message 00161 /* 00162 // create the socket 00163 if((sockfd=::socket(AF_INET,SOCK_STREAM,0))<0) { DBG("Error opening socket\r\n"); } else { DBG("Socket open\r\n"); } 00164 00165 // create the socket address 00166 std::memset(&serverAddress, 0, sizeof(struct sockaddr_in)); 00167 if((server=::gethostbyname("m2mthings.com"))==NULL) { 00168 DBG("Error resolving address, setting manually."); 00169 serverAddress.sin_addr.s_addr = inet_addr("109.74.199.96"); 00170 } else { 00171 DBG("Address resolved OK"); 00172 memcpy((char*)&serverAddress.sin_addr.s_addr, (char*)server->h_addr_list[0], server->h_length); 00173 } 00174 // set server address family 00175 serverAddress.sin_family = AF_INET; 00176 // set server port 00177 serverAddress.sin_port = htons(port); 00178 00179 // do socket connect 00180 DBG("Connecting socket to %s:%d", inet_ntoa(serverAddress.sin_addr), ntohs(serverAddress.sin_port)); 00181 if((ret=::connect(sockfd, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)))<0) { 00182 ::close(sockfd); 00183 DBG("Could not connect"); 00184 } else { 00185 DBG("Connection OK"); 00186 } 00187 00188 DBG("Sending password"); 00189 ::write(sockfd,"hi3h892!",8); 00190 00191 ret = ::recv(sockfd,urlBuffer,urlBufferLength,0); 00192 if (ret<0) { 00193 DBG("Error receiving ACK."); 00194 } else { 00195 DBG("Received(%d): %s",urlBufferLength,urlBuffer); 00196 modem.sendSM(numBuffer,urlBuffer); 00197 } 00198 00199 ::close(sockfd); 00200 */ 00201 00202 } 00203 } 00204 } 00205 // wait 500ms 00206 Thread::wait(500); 00207 } 00208 00209 } 00210 00211 //modem.disconnect(); 00212 //DBG("Disconnected"); 00213 00214 while (1) { 00215 Thread::wait(100); 00216 } 00217 } 00218 00219 void keepAlive(void const*) { 00220 while (1) { 00221 led1 = !led1; 00222 Thread::wait(250); 00223 led1 = !led1; 00224 Thread::wait(750); 00225 } 00226 } 00227 00228 int main() { 00229 DBG_INIT(); 00230 DBG_SET_SPEED(115200); 00231 DBG_SET_NEWLINE("\r\n"); 00232 int red=0; 00233 int green=0; 00234 int blue=0; 00235 setupShifty(); 00236 setLEDColor(500,200,200); 00237 00238 Thread lightTask(lightListener, NULL, osPriorityNormal, 1024 * 6); 00239 keepAlive(NULL); 00240 }
Generated on Tue Jul 19 2022 17:13:13 by 1.7.2