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);
}