Rörelseaktiverade lampa (4 / 5 steg)
Steg 4: Koden
Tanken bakom koden är ganska enkelt: vänta tills tillräckligt rörelse detekteras och då tänds lysdioderna i 30 sekunder.
#include < Wire.h >< br >
CONST int MPU = 0x68;
int16_t GyX GyY GyZ, oldGyX, oldGyY, oldGyZ;
CONST float en = 0,7;
CONST float b = 1,3;
void setup() {
setup Wire
Wire.BEGIN();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
setup lysdioder
för (int jag = 3; jag < 11; i ++) {
pinMode (i, matas);
digitalWrite (i, låg);
}
pinMode (A1, utgång);
pinMode (A2, OUTPUT);
pinMode (A3, OUTPUT);
digitalWrite (A1, låg);
digitalWrite (A2, låg);
digitalWrite (A3, låg);
Serial.BEGIN(9600);
}
void loop() {
lagra tidigare värden
oldGyX = GyX;
oldGyY = GyY;
oldGyZ = GyZ;
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true);
GyX=Wire.read() << 8|Wire.read();
GyY=Wire.read() << 8|Wire.read();
GyZ=Wire.read() << 8|Wire.read();
GyX = karta (GyX,-5000, 5000, 0, 1000);
GyY = karta (GyY,-5000, 5000, 0, 1000);
GyZ = karta (GyZ,-5000, 5000, 0, 1000);
Serial.Print(GyX);
Serial.Print("-");
Serial.Print(GyY);
Serial.Print("-");
Serial.println(GyZ);
om (oldGyX * en > GyX || oldGyX * b < GyX
|| oldGyY * en > GyY || oldGyY * b < GyY
|| oldGyZ * en > GyZ || oldGyZ * b < GyZ) {
cycleLeds();
}
Delay(500);
}
void cycleLeds() {
analoga pins
uint8_t aPins [] = {A1, A2, A3};
osignerade långa exec_time = 0;
osignerade långa start = millis();
samtidigt (exec_time < 30000) {
för (int j = 0; j < 3; j ++) {
digitalWrite (aPins [j], hög);
för (int jag = 3; jag < 11; i ++) {
digitalWrite i, hög.
digitalWrite (i, låg);
}
}
exec_time = millis() - start;
}
}