Paso 3: El Firmware de los gatos
Estas cuentas se muestran en la pantalla. Para los movimientos del brazo hay otro contador que pueden procesar múltiples movimientos de brazo independiente de los éxitos de sitio Web reales. Eso es porque el brazo balancea un rato después de ser golpeado por el servo.
Arduino controla la luz para que por la noche, el servo no funciona pero el LED RGB cambiará su color cada vez que sucede un golpe en el sitio web (esta parte sucede sin un retraso)
Aquí está el código:
/*
Servidor Web
Servidor Web escucha en la web y mueve un servo
LightSensor controla la luz para que el servo no mover cuando está oscuro
Una pantalla de siete segmentos funciona con la ayuda de shiftregisters para mostrar un contador de
*/
#include < SPI.h >
#include < Ethernet.h >
#include < Servo.h >
Introduzca una dirección de MAC y dirección IP para el controlador a continuación.
La dirección IP dependerá de tu red local:
mac de bytes [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip [] = {192, 168, 178, 188};
de dígitos:
int latchPin = 2; //muss noch angeschlossen werden
clockPin int = 4;
int dataPin = 3;
int yellowPin = 16;
redPin int = 18;
bluePin int = 17;
int greenPin = 19;
int btnPin = 7;
colores
int rojo;
int verde;
int azul;
int amarillo;
int ydir; Dirección de fade amarillo
dígito es la matriz de números 192 0, 249 1,... 255 para nada y 191-
dígitos de bytes [] = {192, 249, 164, 176, 153, 146, 130, 248, 128, 144, 255, 191, 225, 163, 171, 198, 167, 123};
int dig1;
int dig2;
int número;
int luz;
sensor de luz:
Apagado de int = 1; //light sensor
Inicializar la biblioteca de servidor Ethernet
con la dirección IP y el puerto que desea utilizar
(el puerto 80 es por defecto para HTTP):
Server(80) de EthernetServer;
Servo myservo; crear objeto servo para controlar el servo
int cuenta = 0;
tiempo
unsigned previousMillis largo = 0;
currentMil largo sin signo = 0;
previousMil largo sin signo = 0;
mil largo sin signo = 0;
Boolean timepassed = true;
void setup()
{
myservo.Attach(6); se fija el servo en el pin 6
Inicie la conexión Ethernet y servidor:
Ethernet.Begin (mac, ip);
Server.Begin();
pinMode (latchPin, salida);
pinMode (clockPin, salida);
pinMode (dataPin, salida);
pinMode (yellowPin, salida);
pinMode (redPin, salida);
pinMode (greenPin, salida);
pinMode (bluePin, salida);
pinMode (btnPin, entrada); //switch
Serial.Begin(9600);
digitalWrite (latchPin, bajo);
shiftOut (dataPin, dígitos clockPin, MSBFIRST, [11]); //ones
shiftOut (dataPin, dígitos clockPin, MSBFIRST, [11]); //tens
digitalWrite (latchPin, HIGH);
número = 0;
rojo = 0;
verde = 0;
azul = 0;
amarillo = 250;
Ydir = 1;
analogWrite (yellowPin, amarillo);
analogWrite (redPin, rojo);
analogWrite (greenPin, verde);
analogWrite (bluePin, azul);
myservo.Write(0);
Serial.Print ("server es a");
Serial.println(Ethernet.localIP());
}
void loop()
{
randomSeed(analogRead(A0)); Amarillo al azar
amarillo = random (111, 256);
amarillo = amarillo + (1 * ydir); tipo de fade
Si (amarillo == 255) ydir = -1;
Si (amarillo == 110) ydir = 1;
Serial.println(Yellow);
analogWrite (yellowPin, amarillo), //Eyes en
Escuchar para clientes entrantes
Cliente EthernetClient = server.available();
Si {} (cliente)
una solicitud http termina con una línea en blanco
Boolean currentLineIsBlank = true;
mientras (client.connected()) {}
Si (client.available()) {}
char c = client.read();
Si has llegado hasta el final de la línea (recibió una nueva línea
carácter) y la línea está en blanco, ha terminado la solicitud http,
para que puedan enviar una respuesta
Si (c == '\n' & & currentLineIsBlank) {}
Enviar un encabezado de respuesta http estándar
Client.println ("HTTP/1.1 200 OK");
Client.println ("tipo de contenido: texto/html");
Client.println();
cuenta = cuenta + 1; //there era una petición
número = número + 1; //Counter
SevenSegDis (); //Display
Si (número == 99) {//so 100 falta :(pero que le importa
digitalWrite (yellowPin, HIGH); no necesita más porque yellowPin es analogWrite todo el tiempo
número = 0;
}
rotura;
}
Si (c == '\n') {}
vas a empezar una nueva línea
currentLineIsBlank = true;
}
else if (c! = '\r') {}
Has conseguido un carácter en la línea actual
currentLineIsBlank = false;
}
}
}
darle tiempo al navegador de web para recibir los datos
Delay(1);
cerrar la conexión:
Client.STOP();
randomSeed(analogRead(A0));
rojo = random(256);
randomSeed(analogRead(A0));
verde = random(256);
randomSeed(analogRead(A0));
azul = random(256);
Serial.Print ("Servo:");
Serial.println(myservo.Read());
Serial.Print ("Timepassed:");
Serial.println(timepassed);
Serial.Print ("cuenta:");
Serial.println(Count);
Serial.Print ("número:");
Serial.println(Number);
Serial.Print ("Mil:");
Serial.println(mil);
Serial.Print ("Licht:");
Serial.println(Light);
Serial.Print ("rojo:");
Serial.println(red);
Serial.Print ("verde:");
Serial.println(Green);
Serial.Print ("azul:");
Serial.println(Blue);
}
lightsens(); comprueba la luz
marca_de_tiempo; / / comprueba el tiempo
Si (luz < 99 & & timepassed == true & & count > 0) {//so cuando su oscuro el servo no funciona y
myservo.Attach (6), //attaches Servo al Pin6 otra vez
Si (myservo.read() == 0) {}
myservo.Write(180); brazo para arriba
timepassed = false;
Count = count -1;
}
else if (myservo.read() == 180) {}
myservo.Write (0); //arm abajo
timepassed = false;
Count = count -1;
}
Delay(1000);
myservo.Detach (); //detaches Servo
encender las luces de si se está ejecutando servo
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
}
else if (luz > = 99 & & count > 0) {//so cuando su oscuro la luz cambia con cada golpe en el sitio web
analogWrite (redPin, rojo);
analogWrite (greenPin, verde);
analogWrite (bluePin, azul);
Count = count-1;
timepassed = false;
}
Si (digitalRead(btnPin) == HIGH) {//check si se presiona el botón
randomSeed(analogRead(A0));
rojo = random(256);
randomSeed(analogRead(A0));
verde = random(256);
randomSeed(analogRead(A0));
azul = random(256);
analogWrite (redPin, rojo);
analogWrite (greenPin, verde);
analogWrite (bluePin, azul);
}
}
---Segunda parte: siete segmentos pantalla
void SevenSegDis() {pantalla //controls con dos registros de desplazamiento
número = restringir (número, 0, 99); //number > = 0 y < 99 debido de gama de la exhibición
Si (número < 10) {}
dig1 = 10; no muestra nada
dig2 = número; unos
digitalWrite (latchPin, bajo);
shiftOut (dataPin, dígitos clockPin, MSBFIRST, [dig2]); //ones
shiftOut (dataPin, dígitos clockPin, MSBFIRST, [dig1]); //tens nada aquí
digitalWrite (latchPin, HIGH);
}
Else {}
dig1 = número/10; / / primer dígito decenas
dig2 = número - dig1 * 10; segundo dígito que
digitalWrite (latchPin, bajo);
shiftOut (dataPin, clockPin, MSBFIRST, digit[dig2]);
shiftOut (dataPin, clockPin, MSBFIRST, digit[dig1]);
digitalWrite (latchPin, HIGH);
}
}
---Tercera parte: la parte de sensor de luz
void lightsens() {}
luz = analogRead(lightPin);
luz / = 10;
}
---Cuarta parte: el tiempo cosita
tiempo vacío () {}
currentMil = millis();
Si (currentMil < previousMil) {/ / si millis se desborda
mil += 34359738 - previousMil + currentMil;
}
Else {/ / si no ha sobrevolado millis
mil += currentMil - previousMil;
Si (mil > 25000) {//if 20 segundos pasa
timepassed = true; //resets el timepassed en true para el servo
mil = mil-25000;
}
previousMil = currentMil;
}
}