Étape 4: Le Code
Le Code :Voici la première version du code, ont besoin de beaucoup d’amélioration. Il y a quelques bibliothèques i´m pas utiliser sur la boucle principale, mais peut être utilisé pour modifier le comportement du feu.
Alors profitez ! ;-)
/ * Faite par pour le concours de SeeedStudio jouet Hack
Base de don les exemples du détecteur de mouvement, capteur de notion, servo de bouton et d’autres.
www.arduinoarts.com * /
#include < Servo.h >
const int buttonPin = 4 ; État de l’interrupteur
buttonState int = 0 ; variable pour la lecture de l’état de bouton poussoir
Installation de servo
Servo myservo2 ;
Servo myservo ; Créez l’objet servo pour contrôler un servo
int pos = 0 ; variable pour stocker la position du servo
pos2 int = 0 ; variable pour stocker la position du servo
int val1 ;
val2 int ;
INSTALLATION DE LED
const int ledPin2 = 5; //Base lumière
const int ledPin = 12 ; //Lamp Light
int countlamp2 = 0 ; nombre de boucles sur servo
Installation de bruit
const int thresholdvalue = 300 ; réponse de bruit pour le seuil //The
Accéléromètre SETUP
int ystate ;
xstate int ;
#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 0 x 07
#define MMA7660_SR 0 x 08
#define MMA7660_PDET 0 x 09
#define MMA7660_PD 0x0A
Accélération de la classe
{
public :
char x ;
char y ;
z de char ;
};
indice de char ;
contrôle de char ;
État de char ;
int audiodelay = 1000 ;
Sub 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) ; Échantillons/seconde Active et Auto-Sleep Mode
Wire.endTransmission() ;
Wire.beginTransmission (MMA7660addr) ;
Wire.Send(MMA7660_MODE) ;
Wire.Send (0 x 01); //active mode
Wire.endTransmission() ;
}
void setup()
{
mma7660_init() ; Joignez-vous à bus i2c (adresse facultatif pour maître)
Serial.Begin(9600) ;
Détecteur de mouvement
pinMode (entrée 6,); //Use broche 2 de recevoir le signal émis par le module
Lampe lumière et lumière de base
pinMode (ledPin, sortie) ;
pinMode (ledPin2, sortie) ;
SERVOS
AUDIO
DDDR | = 0X0C ; D2 et D3 en mode écriture ;
PORTD & = 0xF3 ; D2 et D3 réglé à basse ;
Bruit du capteur analogique 0
INTERRUPTEUR
pinMode (buttonPin, entrée) ;
}
Sub rec_2_begin()
{
PORTD = (PORTD | 0b00000100) & 0b11110111 ;
}
Sub rec_2_stop()
{
PORTD & = 0xF3 ;
}
Sub play_2()
{
PORTD = (PORTD | 0b00000100) & 0b11110111 ;
Delay(audiodelay) ;
PORTD & = 0xF3 ;
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
fonction pour contrôler la segment_3
Sub rec_3_begin()
{
PORTD = (PORTD | 0b00001000) & 0b11111011 ;
}
Sub rec_3_stop()
{
PORTD & = 0xF3 ;
}
Sub play_3()
{
PORTD = (PORTD | 0b00001000) & 0b11111011 ;
Delay(audiodelay) ;
PORTD & = 0xF3 ;
}
/////////////////////////////////////////////////////
////////////////////////////////////////////////
fonction pour contrôler la segment_4 ;
Sub rec_4_begin()
{
PORTD = PORTD | 0b00001100 ;
}
Sub rec_4_stop()
{
PORTD & = 0xF3 ;
}
Sub play_4()
{
PORTD = PORTD | 0b00001100 ;
Delay(audiodelay) ;
PORTD & = 0xF3 ;
}
//////////////////////
Sub check_move()
{
int sensorValue = digitalRead(6) ;
if(sensorValue==1)
{
digitalWrite(ledPin,HIGH) ;
Serial.println (sensorValue, DEC); //Print l’état du signal par le moniteur de la série.
SERVO1() ;
}
d’autre
{
digitalWrite(ledPin,LOW) ;
Serial.println (sensorValue, DEC); //Print l’état du signal par le moniteur de la série.
Servo2() ;
}
}
Sub servo1_right()
{
myservo.Attach(9) ;
pour (pos = 90; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
/ * play_2() ;
Delay(1000) ;
pour (pos = 180; pos > = 90; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}*/
}
Sub servo1_left()
{
myservo.Attach(9) ;
pour (pos = 90; pos > 1; pos = 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}/*
play_2() ;
Delay(1000) ;
pour (pos = 1; pos < = 90; pos += 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}*/
}
Sub servo1_return()
{
myservo.Attach(9) ;
int posact = myservo.read() ;
Si (myservo.read() > 90) {}
pour (pos = posact; pos > 90; pos = 1) / / retour à 90
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
}
else {}
pour (pos = posact; pos < = 90; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
}
}
Sub servo2_right()
{
myservo2.Attach(10) ;
pour (pos = 90; pos < 120; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo2.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
/ * play_2() ;
Delay(1000) ;
pour (pos = 180; pos > = 90; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}*/
}
Sub servo2_left()
{
myservo2.Attach(10) ;
pour (pos = 90; pos > 60; pos = 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo2.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}/*
play_2() ;
Delay(1000) ;
pour (pos = 1; pos < = 90; pos += 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}*/
}
Sub servo2_return()
{
myservo2.Attach(10) ;
int posact = myservo2.read() ;
Si (myservo2.read() > 90) {}
pour (pos = posact; pos > 90; pos = 1) / / retour à 90
{/ / par incréments de 1 degré
myservo2.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
}
else {}
pour (pos = posact; pos < = 90; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo2.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
}
}
Sub servo1_no()
{
myservo.Attach(9) ;
pour (pos = 90; pos < 120; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
pour (pos = 120; pos > = 90; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(10) ; attend 15 ms pour le servo atteindre la position
}
}
Sub servo2()
{
myservo2.Attach(10) ;
pour (pos2 = 110 ; pos2 < 140 ; pos2 += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
myservo2.Write(POS2) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
}
Sub servo1R()
{
myservo.Write(90) ;
myservo.Detach() ;
}
Sub servo2R()
{
myservo2.Write(90) ;
myservo2.Detach() ;
}
Sub lampblink()
{
int sensorValue = digitalRead(6) ;
Si (sensorValue = 1) {}
digitalWrite(ledPin,HIGH) ;
retard (1) ;
digitalWrite(ledPin,LOW) ;
retard (1) ;
//}
d’autre
digitalWrite(ledPin,LOW) ;
}
Sub lamptest()
{
pour (int i = 0; i < 100; i ++)
{
digitalWrite (12, HIGH) ;
Delay(50) ;
digitalWrite (12, faible) ;
Delay(50) ;
}
}
Sub lampoff()
{
retarder (2000) ;
digitalWrite (ledPin, basse) ;
}
accéléromètre
Sub Ecom()
{
unsigned char val [3] ;
int count = 0 ;
Val [0] = val [1] = val [2] = 64 ;
Wire.requestFrom(0x4c, 3) ; demander 3 octets du périphérique esclave 0x4c
while(Wire.available())
{
if(Count < 3)
tandis que (val [count] > 63) / / recharger cette saloperie c’est mauvais
{
Val [count] = Wire.receive() ;
}
Count ++ ;
}
transformer les 7 bits signé nombre dans un 8 bits signé nombre.
Accélération 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) ; imprimer la lecture
Serial.Print ("y =") ;
Serial.println(RET.y,DEC) ; imprimer la lecture
Serial.Print ("z =") ;
Serial.println(RET.z,DEC) ; imprimer la lecture * /
}
char de lecture = 0 ;
void loop()
{
Ecom() ; vérifier l’état de l’accéléromètre
digitalWrite(ledPin2,HIGH) ;
buttonState = digitalRead(buttonPin) ; lire l’état de l’interrupteur
Si (buttonState == HIGH)
{
lampblink(); / / LED s’allume :
myservo.Attach(9) ; attache le servo sur la broche 9 à l’objet de servo
myservo2.Attach(10) ; attache le servo sur la broche 9 à l’objet de servo
val1 = ystate ; lit la valeur du potentiomètre (valeur comprise entre 0 et 1023)
val1 = carte (val1, 30 -30, 0, 179) ; redimensionnez-la pour l’utiliser avec le servo (valeur comprise entre 0 et 180)
myservo2.Write(val1) ; définit la position du servo selon la valeur à l’échelle
val2 = xstate ; lit la valeur du potentiomètre (valeur comprise entre 0 et 1023)
val2 = carte (val2, -30, 0, 30, 179) ; redimensionnez-la pour l’utiliser avec le servo (valeur comprise entre 0 et 180)
myservo.Write(val2) ; définit la position du servo selon la valeur à l’échelle
Si (ystate < -15) {}
play_3() ;
}
}
else {}
recherche de bruit
int sensorValue2 = analogRead (A0); //noise capteur
Serial.println(sensorValue2) ;
if(sensorValue2>thresholdValue)
{
Serial.println("Yes") ;
digitalWrite(ledNoise,HIGH) ;
play_4() ;
lampoff() ;
lampblink() ;
servo1_no() ;
servo1_no() ;
servo1R() ;
Delay(1000) ;
}
d’autre
{
lampoff() ;
}
vérification de la requête
int sensorValue = digitalRead(6) ; détecteur de mouvement
if(sensorValue==1)
{
Serial.println("Move") ;
movestate = 1 ;
lampblink() ;
Servo2() ;
servo2_right() ;
servo1_right() ;
play_2() ;
retarder (1000) ;
servo2_return() ;
servo1_return() ;
servo1_left() ;
servo2_left() ;
play_2() ;
retarder (1000) ;
servo2_return() ;
servo1_return() ;
Delay(1000) ;
}
d’autre
{
digitalWrite(ledNoise,LOW) ;
Servo2() ;
servo1R() ;
servo2R() ;
lampoff() ;
play_2() ;
movestate = 0 ;
}
}
}