Paso 4: El código
El código:Aquí está la primera versión del código, necesita mucha mejora. Hay algunas i´m de las bibliotecas no usando el bucle principal, pero puede ser utilizado para modificar el comportamiento de la lámpara.
Así que ¡ disfrute! ;-)
/ * Para el concurso de SeeedStudio juguete Hack
Base don los ejemplos del sensor de movimiento, sensor de noción, servo de mando y otros.
www.arduinoarts.com * /
#include < Servo.h >
const int buttonPin = 4; Estado de interruptor
int buttonState = 0; variable para lectura del estado del pulsador
Ajuste de servos
Servo myservo2;
Servo myservo; crear objeto servo para controlar un servo
int pos = 0; variable para almacenar la posición del servo
int pos2 = 0; variable para almacenar la posición del servo
int val1;
int val2;
CONFIGURACIÓN DE LED
const int ledPin2 = 5; //Base luz
const int ledPin = 12; //Lamp luz
int countlamp2 = 0; número de bucles de servo
Instalación de la ruido
const int thresholdvalue = 300; respuesta de //The umbral ruido
CONFIGURACIÓN de acelerómetro
int ystate;
int xstate;
#include < Wire.h >
#define MMA7660addr 0x4c
#define MMA7660_X 0 x 00
#define MMA7660_Y 0 x 01
#define MMA7660_Z 0 x 02
#define MMA7660_TILT 0 x 03
#define MMA7660_SRST 0 x 04
#define MMA7660_SPCNT 0 x 05
#define MMA7660_INTSU 0 x 06
#define MMA7660_MODE 0x07
#define MMA7660_SR 0x08
#define MMA7660_PDET 0 x 09
#define MMA7660_PD 0x0A
clase de aceleración
{
público:
char x;
char y;
char z;
};
Índice de Char;
control de Char;
Estado de Char;
int audiodelay = 1000;
void mma7660_init(void)
{
Wire.Begin();
Wire.beginTransmission (MMA7660addr);
Wire.Send(MMA7660_MODE);
Wire.Send(0x00);
Wire.endTransmission();
Wire.beginTransmission (MMA7660addr);
Wire.Send(MMA7660_SR);
Wire.Send(0x07); Muestras/segundo activo y el modo de suspensión
Wire.endTransmission();
Wire.beginTransmission (MMA7660addr);
Wire.Send(MMA7660_MODE);
Wire.Send (0 x 01), de modo //active
Wire.endTransmission();
}
void setup()
{
mma7660_init(); Únete a bus i2c (dirección opcional para el maestro)
Serial.Begin(9600);
Sensor de movimiento
pinMode (6, entrada); //Use pin 2 para recibir la señal que se generan por el módulo
Luz de la lámpara y lámpara de base
pinMode (ledPin, salida);
pinMode (ledPin2, salida);
SERVOS
AUDIO
DDRD | 0X0C; D2 y D3 en el modo de escritura;
PORTD & = 0xF3; Conjunto D2 y D3 a la baja;
Sensor de ruido analógico 0
INTERRUPTOR
pinMode (buttonPin, entrada);
}
void rec_2_begin()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
}
void rec_2_stop()
{
PORTD & = 0xF3;
}
void play_2()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
Delay(audiodelay);
PORTD & = 0xF3;
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
función para el control de la segment_3
void rec_3_begin()
{
PORTD = (PORTD | 0b00001000) y 0b11111011;
}
void rec_3_stop()
{
PORTD & = 0xF3;
}
void play_3()
{
PORTD = (PORTD | 0b00001000) y 0b11111011;
Delay(audiodelay);
PORTD & = 0xF3;
}
/////////////////////////////////////////////////////
////////////////////////////////////////////////
función para el control de la segment_4;
void rec_4_begin()
{
PORTD = PORTD | 0b00001100;
}
void rec_4_stop()
{
PORTD & = 0xF3;
}
void play_4()
{
PORTD = PORTD | 0b00001100;
Delay(audiodelay);
PORTD & = 0xF3;
}
//////////////////////
void check_move()
{
int sensorValue = digitalRead(6);
if(sensorValue==1)
{
digitalWrite(ledPin,HIGH);
Serial.println (sensorValue, DEC); //Print el estado de la señal a través del monitor serie.
servo1();
}
otra cosa
{
digitalWrite(ledPin,LOW);
Serial.println (sensorValue, DEC); //Print el estado de la señal a través del monitor serie.
servo2();
}
}
void servo1_right()
{
myservo.Attach(9);
para (pos = 90; pos < 180; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
/ * play_2();
Delay(1000);
para (pos = 180; pos > = 90; pos-= 1) / / va de 180 grados a 0 grados
{
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}*/
}
void servo1_left()
{
myservo.Attach(9);
para (pos = 90; pos > 1; pos = 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}/*
play_2();
Delay(1000);
para (pos = 1; pos < = 90; pos += 1) / / va de 180 grados a 0 grados
{
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}*/
}
void servo1_return()
{
myservo.Attach(9);
int posact = myservo.read();
Si (myservo.read() > 90) {}
para (pos = posact; pos > 90; pos = 1) / / devuelve a 90
{/ / en pasos de 1 grado
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
}
Else {}
para (pos = posact; pos < = 90; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
}
}
void servo2_right()
{
myservo2.Attach(10);
para (pos = 90; pos < 120; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo2.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
/ * play_2();
Delay(1000);
para (pos = 180; pos > = 90; pos-= 1) / / va de 180 grados a 0 grados
{
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}*/
}
void servo2_left()
{
myservo2.Attach(10);
para (pos = 90; pos > 60; pos = 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo2.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}/*
play_2();
Delay(1000);
para (pos = 1; pos < = 90; pos += 1) / / va de 180 grados a 0 grados
{
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}*/
}
void servo2_return()
{
myservo2.Attach(10);
int posact = myservo2.read();
Si (myservo2.read() > 90) {}
para (pos = posact; pos > 90; pos = 1) / / devuelve a 90
{/ / en pasos de 1 grado
myservo2.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
}
Else {}
para (pos = posact; pos < = 90; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo2.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
}
}
void servo1_no()
{
myservo.Attach(9);
para (pos = 90; pos < 120; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
para (pos = 120; pos > = 90; pos-= 1) / / va de 180 grados a 0 grados
{
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(10); espera 15ms para el servo a la posición
}
}
void servo2()
{
myservo2.Attach(10);
para (pos2 = 110; pos2 < 140; pos2 += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo2.Write(POS2); Dile el servo a la posición en la variable 'pos'
Delay(15); espera 15ms para el servo a la posición
}
}
void servo1R()
{
myservo.Write(90);
myservo.Detach();
}
void servo2R()
{
myservo2.Write(90);
myservo2.Detach();
}
void lampblink()
{
int sensorValue = digitalRead(6);
Si (sensorValue = 1) {}
digitalWrite(ledPin,HIGH);
retardo (1);
digitalWrite(ledPin,LOW);
retardo (1);
//}
otra cosa
digitalWrite(ledPin,LOW);
}
void lamptest()
{
para (int i = 0; i < 100; i ++)
{
digitalWrite (12, HIGH);
Delay(50);
digitalWrite (12, bajo);
Delay(50);
}
}
void lampoff()
{
retrasar (2000);
digitalWrite (ledPin, LOW);
}
acelerómetro
void Ecom()
{
unsigned char val [3];
int cuenta = 0;
Val [0] = val [1] = val [2] = 64;
Wire.requestFrom(0x4c, 3); Reciba 3 bytes del dispositivo esclavo 0x4c
while(Wire.Available())
{
if(Count < 3)
mientras (val [cuenta] > 63) / / cargar la maldita cosa es malo
{
Val [cuenta] = Wire.receive();
}
cuenta ++;
}
transformar los 7 bits firmaron número en una de 8 bits firmado número.
Aceleración ret;
Ret.x = ((char) (val [0] << 2)) / 4;
Ret.y = ((char) (val [1] << 2)) / 4;
Ret.z = ((char) (val [2] << 2)) / 4;
ystate = ret.y;
xstate = ret.x;
Serial.Print ("x =");
Serial.println(Ret.x,DEC); imprimir la lectura
Serial.Print ("y =");
Serial.println(Ret.y,DEC); imprimir la lectura
Serial.Print ("z =");
Serial.println(Ret.z,DEC); imprimir la lectura * /
}
char la lectura = 0;
void loop()
{
Ecom(); comprobar estado de acelerómetro
digitalWrite(ledPin2,HIGH);
buttonState = digitalRead(buttonPin); leer el estado del interruptor
Si (buttonState == HIGH)
{
lampblink(); / / enciende el LED:
myservo.Attach(9); se fija el servo en el pin 9 al objeto servo
myservo2.Attach(10); se fija el servo en el pin 9 al objeto servo
val1 = ystate; Lee el valor del potenciómetro (valor entre 0 y 1023)
val1 = mapa (val1, 30, -30, 0, 179); la escala a utilizar con el servo (valor entre 0 y 180)
myservo2.Write(val1); ajusta la posición del servo según el valor de escala
val2 = xstate; Lee el valor del potenciómetro (valor entre 0 y 1023)
val2 = mapa (val2, -30, 30, 0, 179); la escala a utilizar con el servo (valor entre 0 y 180)
myservo.Write(val2); ajusta la posición del servo según el valor de escala
Si (ystate < -15) {}
play_3();
}
}
Else {}
control de ruido
int sensorValue2 = analogRead (A0); sensor de //noise
Serial.println(sensorValue2);
if(sensorValue2>thresholdvalue)
{
Serial.println("Yes");
digitalWrite(ledNoise,HIGH);
play_4();
lampoff();
lampblink();
servo1_no();
servo1_no();
servo1R();
Delay(1000);
}
otra cosa
{
lampoff();
}
control de movimiento
int sensorValue = digitalRead(6); sensor de movimiento
if(sensorValue==1)
{
Serial.println("Move");
movestate = 1;
lampblink();
servo2();
servo2_right();
servo1_right();
play_2();
retrasar (1000);
servo2_return();
servo1_return();
servo1_left();
servo2_left();
play_2();
retrasar (1000);
servo2_return();
servo1_return();
Delay(1000);
}
otra cosa
{
digitalWrite(ledNoise,LOW);
servo2();
servo1R();
servo2R();
lampoff();
play_2();
movestate = 0;
}
}
}