Paso 1: Ojos rojos
La bolsa es el dar a cada empleado para decorar. Usé un juguete robot Android de Google. Sale de la cabeza. Taladró los ojos y me insertó tri color LED de Radio Shack (http://www.radioshack.com/product/index.jsp?productId=3020765).
Hay un cable de cinta con que va a través de un agujero en la bolsa y un agujero en la tapa para conectar a la placa de prototipo conectada a Arduino (ver siguiente paso). El cable como utilizando un cable de cinta (https://www.adafruit.com/products/793), luego los LEDs y soldar en después de pelar un extremo de los cables de listón y colocar conectores hembra desnudos (http://www.pololu.com/catalog/product/1930), con alguna tubería del encogimiento del utilizado para mantener los cables de cortocircuito.
Código es el siguiente:
/*************************************************************
Escudo del motor
Pernos de función por Ch. Pernos por Ch. B
Dirección D12 D13
PWM D3 D11
Brake D9 D8
Actual sensor A0 A1
Código del LCD de http://www.arduino.cc/playground/Learning/SparkFunSerLCD
LCD es de 20 x 4
necesidad de Leonardo Serial1 clase
*************************************************************/
const int IRthreshold = 180;
const int Irpín = 3; Valor de lectura IR en analógico 3
const int SignalPin = A2; Enviar mensaje a Arduino sonido
const int RedPin = A4;
const int BluePin = A5;
Boolean cardsensed = false;
Boolean LEDflag = false;
las siguientes variables son largas de porque el tiempo, medido en milisegundos,
rápidamente se convertirá en un número más grande que puede ser almacenado en un int.
largo timestamp = 0; utilizado para realizar un seguimiento de cuánto IR sensor bloqueado
const MotorDelay largo = 500; mantener el motor a medio segundo después de sensor IR
const LEDdelay largo = 4000;
int val = 0;
int cuenta = 0;
void setup()
{
Configuración de canal A
pinMode (12, salida); A pin inicia canal de Motor
pinMode (9, salida); A pin inicia canal de freno
pinMode (SignalPin, salida);
digitalWrite (SignalPin, bajo);
pinMode (RedPin, salida);
pinMode (BluePin, salida);
Serial1.Begin(9600);
Delay(1000); tiempo de asentarse, en caso
clearLCD();
backlightOn();
selectLineOne();
Delay(10);
Serial1.Print ("feliz día de San Valentín");
Delay(10);
selectLineTwo();
Serial1.Print ("CCE!");
Delay(10);
selectLineThree();
Serial1.Print ("tengo:");
Delay(10);
blueLED(); azul en la línea de base
}
void loop()
{
Val = analogRead(IRPin);
Si (val > IRthreshold) / / camino bloqueado
{
cardsensed = true;
LEDflag = true;
timestamp = millis();
adelante a toda velocidad
digitalWrite (12, HIGH); Establece la dirección de avance de canal A
digitalWrite (9, bajo); Soltar el freno para el canal A
analogWrite (3, 255); Gira el motor en canal A toda velocidad
redLED(); rojo cuando ha conseguido una tarjeta de
}
if(Val < IRthreshold)
{
if(cardsensed)
{
Si ((millis()-timestamp) > = MotorDelay)
{
cardsensed = false;
analogWrite(3,0); Apague el motor y dejarlo sin freno de la costa
cuenta ++;
selectLineFour();
Serial1.Print(Count);
Serial1.Print ("San Valentín");
digitalWrite (SignalPin, alto);
Delay(20);
digitalWrite (SignalPin, bajo);
}
}
if(LEDflag)
{
Si ((millis()-timestamp) > = LEDdelay)
{
LEDflag = false;
blueLED(); volver a estar triste y azul
}
}
}
}
///////////////////////////// FUNCTIONS ////////////////////////////////
void selectLineOne() {//puts el cursor en carácter de la línea 0 0.
Serial1.Write(0xFE); Bandera del comando
Serial1.Write(128); posición
}
void selectLineTwo() {//puts el cursor en carácter de la línea 2 0.
Serial1.Write(0xFE); Bandera del comando
Serial1.Write(192); posición
}
void selectLineThree() {//puts el cursor en carácter de la línea 3 0.
Serial1.Write(0xFE); Bandera del comando
Serial1.Write(148); posición
}
void selectLineFour() {//puts el cursor en carácter de la línea 4 0.
Serial1.Write(0xFE); Bandera del comando
Serial1.Write(212); posición
}
void goTo (int posición) {//position = línea 1:0-19, línea 2: 20-39, etc., 79 + por defecto a 0
Si (posición < 20) {Serial1.write(0xFE); Bandera del comando
Serial1.Write((Position+128)); posición
} else if (posición < 40){Serial1.write(0xFE); Bandera del comando
Serial1.Write((Position+128+64-20)); posición
} else if (posición < 60){Serial1.write(0xFE); Bandera del comando
Serial1.Write((Position+128+20-40)); posición
} else if (posición < 80){Serial1.write(0xFE); Bandera del comando
Serial1.Write((Position+128+84-60)); posición
} else {goTo(0);}
}
void clearLCD() {}
Serial1.Write(0xFE); Bandera del comando
Serial1.Write(0x01); Desactive el comando.
}
void backlightOn() {//turns la retroiluminación
Serial1.Write(0x7C); Bandera de comando para la materia de fondo
Serial1.Write(157); nivel de luz.
}
void backlightOff() {//turns de la luz de fondo
Serial1.Write(0x7C); Bandera de comando para la materia de fondo
Serial1.Write(128); nivel de la luz apagado.
}
void backlight50() {//sets la luz de fondo en el 50% de brillo
Serial1.Write(0x7C); Bandera de comando para la materia de fondo
Serial1.Write(143); nivel de la luz apagado.
}
void serCommand() {//a función general para solicitar que la bandera del comando emitir otros comandos
Serial1.Write(0xFE);
}
void blueLED() {}
digitalWrite (BluePin, LOW); reverso de la habitual desde común
digitalWrite (RedPin, alto); ánodo de
}
void redLED() {}
digitalWrite (BluePin, alto);
digitalWrite (RedPin, LOW);
}