Étape 12 : Arduino Code attaché
#include //use lib de la minuterie
#include
#define no_registre 0
#define Register_2D 0x2D
#define Register_X0 0 x 32
#define Register_X1 0 x 33
#define Register_Y0 0 x 34
#define Register_Y1 0 x 35
#define Register_Z0 0 x 36
#define Register_Z1 0 x 37
int ADXAddress = 0xA7 >> 1 ;
variable pour garder les infos d’accéléromètre
int X0, X1, Xg ;
int Y0, Y1, Yg ;
int Z1, Z0, Zg ;
broches pour trois couleurs
ledx int = 9 ;
ledy int = 5 ;
khald int = 6 ;
déclarer 7 compteurs
int counterX, counterY, counterZ, counterT, counterx, countery, counterz ;
3 variable pour garder l’État
int stateX, stateY, stateZ ;
valeur de la respiration
valx int = 60 ;
valy int = 130 ;
valz int = 195 ;
Vitesse de respiration
int fadeAmount1 = 3 ;
int fadeAmount2 = 6 ;
int fadeAmount3 = 9 ;
void setup() {}
Serial.Begin(9600) ; utiliser le port série pour déboguer
initiales
Wire.Begin() ;
Delay(10) ;
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_2D) ;
Wire.Write(8) ;
Wire.endTransmission() ;
pinMode (ledx, sortie) ;
pinMode (ledy, sortie) ;
pinMode (khald, sortie) ;
counterY = 0 ;
counterX = 0 ;
counterT = 0 ;
définir l’État x, Y, Z dans l’état off
stateX = 0 ;
stateY = 0 ;
stateZ = 0 ;
}
void loop() {}
tout éteint
digitalWrite (ledx, 0) ;
digitalWrite (ledy, 0) ;
digitalWrite (khald, 0) ;
lire les infos acc de X, Y, Z
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_X0) ;
Wire.Write(Register_X1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
X0 = Wire.read() ;
X1 = Wire.read() ;
X1 = X1 << 8 ;
XG = X0 + X1 ;
}
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_Y0) ;
Wire.Write(Register_Y1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
Y0 = Wire.read() ;
Y1 = Wire.read() ;
Y1 = Y1 << 8 ;
Yg = Y0 + Y1 ;
}
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_Z0) ;
Wire.Write(Register_Z1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
Z0 = Wire.read() ;
Z1 = Wire.read() ;
Z1 = Z1 << 8 ;
ZG = Z0 + Z1 ;
}
juger si acc valeur de X arrive au seuil, ajoutez le compteur
Si (Xg > = 500 || XG < = -500) {}
counterX ++ ;
démarrage de compteur X, minuteur commencera et entrer dans la fonction claire après 0,5 s
Si (counterX == 1) {}
MsTimer2::set (500, Clear) ;
MsTimer2::start() ;
}
}
Si la counterX est supérieur à 16 avant d’effacer, ouvrir X trig État (couleur automatique)
Si (counterX > = 16) {//16 peut être changé à autre numéro, le plus petit plus sensible
stateX =! stateX ;
tandis que (stateX == 1) {}
Fading() ;
}
}
Si (Yg > = 500 || Yg < = -500) {}
vérification de Y
counterY ++ ;
Si (counterY == 1) {}
MsTimer2::set (500, Clear) ;
MsTimer2::start() ;
}
}
Si (counterY > = 16) {}
stateY =! stateY ;
même si (stateY == 1) {}
following() ;
}
}
Si (Zg > = 500 || ZG < = -500) {}
vérification de Z
counterZ ++ ;
Si (counterZ == 1) {}
MsTimer2::set (500, Clear) ;
MsTimer2::start() ;
}
}
Si (counterZ > = 14) {}
stateZ =! stateZ ;
tandis que (stateZ == 1) {}
White() ;
}
}
Delay(6) ;
Serial.Print("X=") ;
Serial.Print(XG) ;
Serial.Print ("Y =") ;
Serial.Print(yg) ;
Serial.Print ("Z =") ;
Serial.Print(ZG) ;
Serial.Print ("CX =") ;
Serial.Print(counterX) ;
Serial.Print ("CY =") ;
Serial.Print(counterY) ;
Serial.Print (« CZ = ") ;
Serial.println(counterZ) ;
}
Sub Clear() {}
effacer tous les compteurs
counterX = 0 ;
counterx = 0 ;
counterY = 0 ;
countery = 0 ;
counterZ = 0 ;
counterz = 0 ;
}
void white() {}
couleur blanche
digitalWrite (ledx, 1) ;
digitalWrite (ledy, 1) ;
digitalWrite (khald, 1) ;
lire le CAC de Z
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_Z0) ;
Wire.Write(Register_Z1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
Z0 = Wire.read() ;
Z1 = Wire.read() ;
Z1 = Z1 << 8 ;
ZG = Z0 + Z1 ;
}
Si (Zg > = 500 || ZG < = -500) {}
counterz ++ ;
Si (counterz == 1) {}
MsTimer2::set (500, Clear) ;
MsTimer2::start() ;
}
}
Si counterZ n’est plus de 140, fermez l’État trig de Z et revenir à la fonction principale
Si (counterz > = 140) {}
stateZ =! stateZ ;
retour ;
}
Serial.Print("Z=") ;
Serial.Print(ZG) ;
Serial.Print (« CZ = ") ;
Serial.println(counterz) ;
}
void following() {}
跟随姿态变色的程序
int xfollow, yfollow, zfollow ;
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_X0) ;
Wire.Write(Register_X1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
X0 = Wire.read() ;
X1 = Wire.read() ;
X1 = X1 << 8 ;
XG = X0 + X1 ;
}
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_Y0) ;
Wire.Write(Register_Y1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
Y0 = Wire.read() ;
Y1 = Wire.read() ;
Y1 = Y1 << 8 ;
Yg = Y0 + Y1 ;
}
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_Z0) ;
Wire.Write(Register_Z1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
Z0 = Wire.read() ;
Z1 = Wire.read() ;
Z1 = Z1 << 8 ;
ZG = Z0 + Z1 ;
}
garder la couleur stable par FORMULEE que la valeur de X, Z. Y est utilisée pour quitter
XG = contraindre (Xg,-272, 272) ;
Yg = contraindre (Yg,-272, 272) ;
ZG = contraindre (Zg,-272, 272) ;
xfollow = carte (Xg,-272, 272, 5 250) ;
analogWrite (ledx, xfollow) ;
yfollow = carte (GY,-290, 290, 5 250) ;
analogWrite (ledy, yfollow) ;
zfollow = carte (Zg,-272, 272, 5 250) ;
analogWrite (khald, zfollow) ;
garder la couleur stable par FORMULEE la valeur
xfollow = contraindre (xfollow, 1, 255) ;
yfollow = contraindre (yfollow, 1, 255) ;
zfollow = contraindre (zfollow, 1, 255) ;
Si (Yg > = 500 || Yg < = -500) {}
countery ++ ;
Si (countery == 1) {}
MsTimer2::set (500, Clear) ;
MsTimer2::start() ;
}
}
Si (countery > = 40) {}
stateY =! stateY ;
retour ;
}
Serial.Print("Y=") ;
Serial.Print(yg) ;
Serial.Print ("CY =") ;
Serial.println(countery) ;
}
void fading() {}
Auto-chaning couleur
analogWrite (ledx, valx) ;
analogWrite (ledy, valy) ;
analogWrite (khald, valz) ;
VALX = valx + fadeAmount1 ;
valy = valy + fadeAmount2 ;
Valz = valz + fadeAmount3 ;
Si (valx < = 4 || valx > = 252) {}
fadeAmount1 = - fadeAmount1 ;
}
Si (valy < = 7 || valy > = 249) {}
fadeAmount2 = - fadeAmount2 ;
}
Si (valz < = 10 || valz > = 246) {}
fadeAmount3 = - fadeAmount3 ;
}
Delay(90) ;
Wire.beginTransmission(ADXAddress) ;
Wire.Write(Register_X0) ;
Wire.Write(Register_X1) ;
Wire.endTransmission() ;
Wire.requestFrom (ADXAddress, 2) ;
Si (Wire.available() < = 2) ;
{
X0 = Wire.read() ;
X1 = Wire.read() ;
X1 = X1 << 8 ;
XG = X0 + X1 ;
}
Si (Xg > = 500 || XG < = -500) {}
counterx ++ ;
Si (counterx == 1) {}
MsTimer2::set (500, Clear) ;
MsTimer2::start() ;
}
}
Si (counterx > = 2) {}
stateX =! stateX ;
retour ;
}
Serial.Print("X=") ;
Serial.Print(XG) ;
Serial.Print ("CX =") ;
Serial.println(counterx) ;