Доброго времени суток!
Ситуация такая: при работе от питания от компьютера никаких проблем не возникает, режим отрабатывает как надо.
Когда питание осуществляется от внешнего источника питания и включается по кнопке - при включении на второй, третий раз режим не работает.
Почитал, что возможно произвести перезагрузку модуля и все пройдет, но не понимаю как это сделать...
Ситуация такая: при работе от питания от компьютера никаких проблем не возникает, режим отрабатывает как надо.
Когда питание осуществляется от внешнего источника питания и включается по кнопке - при включении на второй, третий раз режим не работает.
Почитал, что возможно произвести перезагрузку модуля и все пройдет, но не понимаю как это сделать...
Код программы:
// простая сигнализация
// датчик реагирует даже на постукивание
// пальцем на противоположном конце стола
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
long ACC, GYR;
long maxACC, maxGYR, trACC, trGYR;
int chystv = 10000;
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode (2, INPUT_PULLUP);
pinMode (13, OUTPUT);
mpu.initialize();
mpu.setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
//delay(1000);
// "калибровка" максимальных значений
for (int i = 0; i < 30; i++) {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
ACC = abs(ax) + abs(ay) + abs(az);
GYR = abs(gx) + abs(gy) + abs(gz);
if (ACC > maxACC) maxACC = ACC;
if (GYR > maxGYR) maxGYR = GYR;
//delay(5);
}
maxACC = maxACC + trACC;
maxGYR = maxGYR + trGYR;
}
void loop() {
boolean button1 = !digitalRead (2);
if (button1 == 1) {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// сумма модулей
ACC = abs(ax) + abs(ay) + abs(az);
GYR = abs(gx) + abs(gy) + abs(gz);
if (ACC > maxACC + chystv || GYR > maxGYR + chystv) {
digitalWrite (13,1);
//Serial.println("Move!");
}
else digitalWrite (13,0);
}
//delay(10);
}
Изменено: