Ansteuerung: http://10.0.0.8/
Arduino-Hexafnord-Shield + Ethernet
#include #include #include #include #include #define button 7 byte mac[] = {0xAF, 0xFE, 0xAF, 0xFE, 0x00, 0x08}; byte ip[] = {10,0,0,8}; char cmd[15]; char param1[15]; char param2[15]; char param3[15]; #define bufferMax 128 int bufferSize; char buffer[bufferMax]; int REMOTE_CMD_FADE_RGB=0x01; byte SERVO_ENABLE=0xA0; byte SERVO_DISABLE=0xA1; byte SERVO_SET_ALL=0xA3; byte posmiddle[] = {0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}; byte poscone[] = {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40}; byte poszu[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; byte posodd[] = {0x70,0xFF,0x70,0xFF,0x70,0xFF,0x70,0xFF,0x70,0xFF}; byte posodd1[] = {0xA0,0xCF,0xA0,0xCF,0xA0,0xCF,0xA0,0xCF,0xA0,0xCF}; byte posodd2[] = {0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70}; byte posodd3[] = {0xFF,0x80,0xFF,0x80,0xFF,0x80,0xFF,0x80,0xFF,0x80}; Server server(80); //Client webclient("", 80); void setup(){ Ethernet.begin(mac,ip); server.begin(); Serial.begin(19200); finit(); } void loop(){ Client client=server.available(); if(client){ WaitForRequest(client); ParseReceivedRequest(); PerformRequestedCommands(); client.stop(); } if(digitalRead(button)==HIGH){ switch(random(0,2)){ case 0: fsetrgb(0xFF,0xFF,0x00,255,0,0); break; case 1: fsetrgb(0xFF,0xFF,0x00,0,255,0); break; case 2: fsetrgb(0xFF,0xFF,0x00,0,0,255); break; } delay(1000); } } void WaitForRequest(Client client){ bufferSize=0; boolean currentLineIsBlank=true; while(client.connected()){ if(client.available()){ char c=client.read(); if(c=='\n' && currentLineIsBlank){ client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println(""); client.println(""); client.println("Hex-A-Fnord"); client.println(""); client.println(""); client.println("
Hex-A-Fnord
„); client.println(“
„); client.println(“
„); client.println(“
„); client.println(“
„); client.println(“
„); client.println(“
„); client.println(“ Mehr erfahren„); client.println(“
"); client.println(""); break; }else{ if(c=='\n'){ currentLineIsBlank=true; }else{ if(c!='\r'){ currentLineIsBlank=false; } if(bufferSizespace2) slash4=slash2; cmd[0]=0; param1[0]=0; param2[0]=0; param3[0]=0; strncat(cmd,slash1,slash2-slash1-1); strncat(param1,slash2,slash3-slash2-1); strncat(param2,slash3,space2-slash3-1); strncat(param3,slash4,space2-slash4-1); } void PerformRequestedCommands(){ if(strcmp(cmd,"fnord_demo")==0) fnord_demo(param1); } void fsetrgb(byte address, byte _step, byte _delay, byte red, byte green, byte blue){ Serial.write(byte(address)); // 1 Serial.write(byte(REMOTE_CMD_FADE_RGB)); Serial.write(byte(_step)); Serial.write(byte(_delay)); Serial.write(byte(red)); Serial.write(byte(green)); Serial.write(byte(blue)); // 7 Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); // 10 Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); // 15 } void finit(){ for (int i=0;icurrentMillis+500){ switched=1; fsetservoenable(0xff,0); } if(digitalRead(button)==HIGH || server.available()){ break; } fsetrgb(i,0xFF,0x00,j,0,0); delay(1); fsetrgb(oldi,0xFF,0x00,255-j,0,0); delay(1); } if(digitalRead(button)==HIGH || server.available()){ break; } oldi=i; } if(digitalRead(button)==HIGH || server.available()){ break; } } fsetservoenable(0xff,1); fsetservo(0xff, poszu); delay(500); fsetservoenable(0xff,0); delay(30); fsetrgb(0xFF,0xFF,0x00,0,0,0); delay(30); } void fnord_demo_2(){ unsigned long currentMillis = millis(); unsigned long otherMillis = millis(); int color=1; int value=1; int switched=0; fsetservoenable(0xff,1); fsetservo(0xff, poscone); while(millis()currentMillis+500 && !switched){ switched=1; fsetservoenable(0xff,0); } if(digitalRead(button)==HIGH || server.available()){ break; } if(color==1){ fsetrgb(0xFF,0xFF,0x00,value,0,255-value); } if(color==2){ fsetrgb(0xFF,0xFF,0x00,255-value,value,0); } if(color==3){ fsetrgb(0xFF,0xFF,0x00,0,255-value,value); } value=value+random(3,7); if(value>255){ value=1; color++; } if(color>3){ color=1; } delay(50); } fsetservoenable(0xff,1); fsetservo(0xff, poszu); delay(500); fsetservoenable(0xff,0); delay(30); fsetrgb(0xFF,0xFF,0x00,0,0,0); delay(30); } void fnord_demo_3(){ unsigned long currentMillis = millis(); unsigned long otherMillis = millis(); int switched=0; fsetservoenable(0xff,1); fsetservo(0xff, poscone); while(millis()currentMillis+500 && !switched){ switched=1; fsetservoenable(0xff,0); } if(digitalRead(button)==HIGH || server.available()){ break; } fsetrgb(0xFF,0xFF,0x00,random(0,255),random(0,255),random(0,255)); delay(50); } fsetservoenable(0xff,1); fsetservo(0xff, poszu); delay(500); fsetservoenable(0xff,0); delay(30); fsetrgb(0xFF,0xFF,0x00,0,0,0); delay(30); } void fsetservoenable(byte address, boolean enable) { Serial.write(byte(address)); // 1 if (enable) { Serial.write(byte(SERVO_ENABLE)); } else { Serial.write(byte(SERVO_DISABLE)); } Serial.write(byte(0x00)); // 3 Serial.write(byte(0x00)); Serial.write(byte(0x00)); // 5 Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); // 10 Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); // 15 } void fsetservo(byte address, byte pos[]) { fsetservoenable(0xff,1); delay(5); // 15 bytes Serial.write(byte(address)); // 1 Serial.write(byte(SERVO_SET_ALL)); Serial.write(pos[0]); Serial.write(byte(pos[1])); Serial.write(byte(pos[2])); // 5 Serial.write(byte(pos[3])); Serial.write(byte(pos[4])); Serial.write(byte(pos[5])); Serial.write(byte(pos[6])); Serial.write(byte(pos[7])); // 10 Serial.write(byte(pos[8])); Serial.write(byte(pos[9])); Serial.write(byte(0x00)); Serial.write(byte(0x00)); Serial.write(byte(0x00)); // 15 } void fsetservoall(byte p){ byte pos[] = {p,p,p,p,p,p,p,p,p,p}; fsetservo(0xff, pos); } void all(byte red, byte green, byte blue){ fsetrgb(0xFF, 0xff, 0x00, red, green, blue); } void odd(byte red, byte green, byte blue){ fsetrgb(0x01, 0xff, 0x00, red, green, blue); fsetrgb(0x03, 0xff, 0x00, red, green, blue); fsetrgb(0x05, 0xff, 0x00, red, green, blue); } void even(byte red, byte green, byte blue){ fsetrgb(0x00, 0xff, 0x00, red, green, blue); fsetrgb(0x02, 0xff, 0x00, red, green, blue); fsetrgb(0x04, 0xff, 0x00, red, green, blue); }