Paso 12: Código de Arduino conectado
#include //use lib de temporizador
#include
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37
int ADXAddress = 0xA7 >> 1;
variable para guardar la información del acelerómetro
int X0, X1, Xg;
int Y0, Y1, Yg;
int Z1, Z0, Zg;
pernos para el tricolor
ledx int = 9;
ledy int = 5;
ledz int = 6;
declarar 7 contadores
counterX int counterY, counterZ, counterT, counterx, countery, counterz;
3 variable para mantener el estado
int stateX, stateY, stateZ;
valor de la respiración
int valx = 60;
valy int = 130;
valz de int = 195;
velocidad de respiración
int fadeAmount1 = 3;
int fadeAmount2 = 6;
int fadeAmount3 = 9;
void setup() {}
Serial.Begin(9600); utilizar el puerto serie de depuración
inicial
Wire.Begin();
Delay(10);
Wire.beginTransmission(ADXAddress);
Wire.Write(Register_2D);
Wire.Write(8);
Wire.endTransmission();
pinMode (ledx, salida);
pinMode (ledy, salida);
pinMode (ledz, salida);
counterY = 0;
counterX = 0;
counterT = 0;
establecer el estado de X, Y, Z en estado
stateX = 0;
stateY = 0;
stateZ = 0;
}
void loop() {}
Apagar todas
digitalWrite (ledx, 0);
digitalWrite (ledy, 0);
digitalWrite (ledz, 0);
leer la información de X, Y, Z de la acc
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;
}
juzgar si acc valor de X llega al umbral, agregue el contador
Si (Xg > = 500 || XG < = -500) {}
counterX ++;
Cuando se inicia el contador X, temporizador comenzará y entrar en función clara después de 0.5s
Si (counterX == 1) {}
MsTimer2::set (500, claro);
MsTimer2::start();
}
}
Si el counterX es más de 16 antes claro, abierto X estado trig (color auto-cambiar)
Si (counterX > = 16) {//16 puede cambiar a otro número, el más pequeño cuanto más sensible
stateX =! stateX;
mientras que (stateX == 1) {}
fading();
}
}
Si (Yg > = 500 || YG < = -500) {}
comprobación Y
counterY ++;
Si (counterY == 1) {}
MsTimer2::set (500, claro);
MsTimer2::start();
}
}
Si (counterY > = 16) {}
stateY =! stateY;
mientras que (stateY == 1) {}
following();
}
}
Si (Zg > = 500 || ZG < = -500) {}
Control Z
counterZ ++;
Si (counterZ == 1) {}
MsTimer2::set (500, claro);
MsTimer2::start();
}
}
Si (counterZ > = 14) {}
stateZ =! stateZ;
mientras 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);
}
void Clear() {}
borrar todos los contadores
counterX = 0;
counterx = 0;
counterY = 0;
countery = 0;
counterZ = 0;
counterz = 0;
}
void white() {}
color blanco
digitalWrite (ledx, 1);
digitalWrite (ledy, 1);
digitalWrite (ledz, 1);
leer la acc 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, claro);
MsTimer2::start();
}
}
Si counterZ es de más de 140, cerrar el estado autónomo de Z y volver a la función principal
Si (counterz > = 140) {}
stateZ =! stateZ;
retorno;
}
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;
}
mantener el color constante contraining que para salir se utiliza el valor de X, Y Z.
XG = restringir (Xg,-272, 272);
YG = restringir (Yg,-272, 272);
ZG = restringir (Zg,-272, 272);
xfollow = mapa (Xg,-272, 272, 5, 250);
analogWrite (ledx, xfollow);
yfollow = mapa (Yg,-290, 250, 290, 5);
analogWrite (ledy, yfollow);
zfollow = mapa (Zg,-272, 272, 5, 250);
analogWrite (ledz, zfollow);
mantener el color constante contraining el valor
xfollow = restringir (xfollow, 1, 255);
yfollow = restringir (yfollow, 1, 255);
zfollow = restringir (zfollow, 1, 255);
Si (Yg > = 500 || YG < = -500) {}
countery ++;
Si (countery == 1) {}
MsTimer2::set (500, claro);
MsTimer2::start();
}
}
Si (countery > = 40) {}
stateY =! stateY;
retorno;
}
Serial.Print("Y=");
Serial.Print(YG);
Serial.Print ("CY =");
Serial.println(countery);
}
void fading() {}
auto-chaning color
analogWrite (ledx, valx);
analogWrite (ledy, valy);
analogWrite (ledz, 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, claro);
MsTimer2::start();
}
}
Si (counterx > = 2) {}
stateX =! stateX;
retorno;
}
Serial.Print("X=");
Serial.Print(XG);
Serial.Print ("CX =");
Serial.println(counterx);