#include #include #include byte ip[] = { 192,168, 0, 10 }; //ip from shield (server) byte netmask[] = { 255,255,255, 0 }; //netmask byte server[] = { 192,168, 0, 2 }; //i.e. Raspberry Pi uint8_t http=INVALID_SOCKET; //socket handle uint16_t http_len=0; //receive len char http_buf[1024]; //receive buffer //debug output functions (9600 Baud, 8N2) //Leonardo boards use USB for communication, so we dont need to disable the RedFly void debugout(char *s) { #if defined(__AVR_ATmega32U4__) Serial.print(s); #else RedFly.disable(); Serial.print(s); RedFly.enable(); #endif } void debugoutln(char *s) { #if defined(__AVR_ATmega32U4__) Serial.println(s); #else RedFly.disable(); Serial.println(s); RedFly.enable(); #endif } void setup() { for(int i=4; i<20; i++) pinMode(i, OUTPUT); digitalWrite(15, 1); digitalWrite(13, 1); uint8_t ret; #if defined(__AVR_ATmega32U4__) //Leonardo boards use USB for communication Serial.begin(9600); //init serial port and set baudrate while(!Serial); //wait for serial port to connect (needed for Leonardo only) #endif digitalWrite(12, 1); digitalWrite(11, 1); //init the WiFi module on the shield // ret = RedFly.init(br, pwr) //br=9600|19200|38400|57600|115200|200000|230400, pwr=LOW_POWER|MED_POWER|HIGH_POWER // ret = RedFly.init(pwr) //9600 baud, pwr=LOW_POWER|MED_POWER|HIGH_POWER // ret = RedFly.init() //9600 baud, HIGH_POWER ret = RedFly.init(); if(ret) { debugoutln("INIT ERR"); //there are problems with the communication between the Arduino and the RedFly } else { digitalWrite(10, 1); //scan for wireless networks (must be run before join command) RedFly.scan(); //join network // ret = join("wlan-ssid", "wlan-passw", INFRASTRUCTURE or IBSS_JOINER or IBSS_CREATOR, chn, authmode) //join infrastructure or ad-hoc network, or create ad-hoc network // ret = join("wlan-ssid", "wlan-passw", IBSS_CREATOR, chn) //create ad-hoc network with password, channel 1-14 // ret = join("wlan-ssid", IBSS_CREATOR, chn) //create ad-hoc network, channel 1-14 // ret = join("wlan-ssid", "wlan-passw", INFRASTRUCTURE or IBSS_JOINER) //join infrastructure or ad-hoc network with password // ret = join("wlan-ssid", INFRASTRUCTURE or IBSS_JOINER) //join infrastructure or ad-hoc network // ret = join("wlan-ssid", "wlan-passw") //join infrastructure network with password // ret = join("wlan-ssid") //join infrastructure network digitalWrite(9, 1); digitalWrite(8, 1); ret = RedFly.join("wlan-ssid", "wlan-passw", INFRASTRUCTURE); if(ret) { debugoutln("JOIN ERR"); for(;;); //do nothing forevermore } else { digitalWrite(7, 1); digitalWrite(6, 1); //set ip config // ret = RedFly.begin(); //DHCP // ret = RedFly.begin(1 or 2); //1=DHCP or 2=Auto-IP // ret = RedFly.begin(ip); // ret = RedFly.begin(ip, dnsserver); // ret = RedFly.begin(ip, dnsserver, gateway); // ret = RedFly.begin(ip, dnsserver, gateway, netmask); ret = RedFly.begin(ip, 0, 0, netmask); if(ret) { debugoutln("BEGIN ERR"); RedFly.disconnect(); for(;;); //do nothing forevermore } else { digitalWrite(5, 1); RedFly.getlocalip(ip); //receive shield IP in case of DHCP/Auto-IP http = RedFly.socketConnect(PROTO_TCP, server, 80); //start connection to server on port 80 if(http == 0xFF) { debugoutln("SOCKET ERR"); RedFly.disconnect(); for(;;); //do nothing forevermore } else { //send HTTP request RedFly.socketSendPGM(http, PSTR("GET /scroll.php HTTP/1.1\r\nHost: 192.168.0.2\r\n\r\n")); } digitalWrite(4, 1); } } } } void loop() { uint8_t sock, buf[32]; uint16_t rd, len; if(http == INVALID_SOCKET) //no socket open { return; } sock = 0xFF; //0xFF = return data from all open sockets rd = RedFly.socketRead(&sock, &len, buf, sizeof(buf)); if(sock == http) { if((rd != 0) && (rd != 0xFFFF)) { /*if((http_len+rd-250) > sizeof(http_buf)) //overflow { rd = sizeof(http_buf)-http_len; }*/ if(http_len >= 250) //ignore header { memcpy(&http_buf[http_len-250], buf, rd); } http_len += rd; } if((rd == 0xFFFF) || (len == 0)) //connection closed or all data received { //close connection RedFly.socketClose(sock); //show http buffer //http_buf[sizeof(http_buf)-1] = 0; debugout(http_buf); int start, width=sizeof(http_buf)-1, n=4; for(int x=sizeof(http_buf)-1;x>0;x--) { if(http_buf[x] == 10) { width=start-x; start=x; if (n>0) n--; else break; } } if(0 && http_buf[start+1] < 32) {//http_buf[start[0]]!='0' && http_buf[start[0]]!='1' digitalWrite(4, !digitalRead(4)); http = RedFly.socketConnect(PROTO_TCP, server, 80); //start connection to server on port 80 RedFly.socketSendPGM(http, PSTR("GET /led/scroll.php HTTP/1.1\r\nHost: 192.168.0.2\r\n\r\n")); } else { unsigned long ms=0; unsigned long refresh=0; int s=-9; refresh=millis()+5*60*1000; for(;;) { if(millis()>ms) { ms=millis()+100; s++; if (s>=width*7-7) { s=-9; if ( millis() > refresh) { digitalWrite(15, 1); digitalWrite(4, !digitalRead(4)); http_len=0; http = RedFly.socketConnect(PROTO_TCP, server, 80); //start connection to server on port 80 RedFly.socketSendPGM(http, PSTR("GET /led/scroll.php HTTP/1.1\r\nHost: 192.168.0.2\r\n\r\n")); break; } } } for(int a=15; a<20; a++){ digitalWrite(a, 1); for(int b=0; b<10; b++){ if(s+b>=0 && s+b> ((s+b)%7)) & 1); else digitalWrite(13-b, 0); } delay(1); for(int b=4; b<14; b++){ digitalWrite(b, 0); } digitalWrite(a, 0); } } } } } }