mirror of
https://gitlab.dit.htwk-leipzig.de/phillip.kuehne/dezibot.git
synced 2025-05-19 19:11:48 +02:00
Implemented ShakeDetection
This commit is contained in:
parent
080563f6cc
commit
4a6a58e35f
@ -0,0 +1,19 @@
|
|||||||
|
#include "Dezibot.h"
|
||||||
|
|
||||||
|
Dezibot dezibot = Dezibot();
|
||||||
|
void setup() {
|
||||||
|
// put your setup code here, to run once:
|
||||||
|
|
||||||
|
dezibot.begin();
|
||||||
|
dezibot.multiColorLight.turnOffLed();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// put your main code here, to run repeatedly:
|
||||||
|
if(dezibot.motionDetection.isShaken(1000,zAxis)){
|
||||||
|
dezibot.multiColorLight.setTopLeds(0xFF0000);
|
||||||
|
} else if(dezibot.motionDetection.isShaken(1000,xAxis|yAxis)) {
|
||||||
|
dezibot.multiColorLight.setTopLeds(0x00FF00);
|
||||||
|
}
|
||||||
|
}
|
@ -64,7 +64,24 @@ int8_t MotionDetection::getWhoAmI(){
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool MotionDetection::isShaken(uint32_t threshold ,uint8_t axis){
|
bool MotionDetection::isShaken(uint32_t threshold ,uint8_t axis){
|
||||||
|
IMUResult measurment1 = this->getAcceleration();
|
||||||
|
delayMicroseconds(10);
|
||||||
|
IMUResult measurment2 = this->getAcceleration();
|
||||||
|
uint count = 0;
|
||||||
|
for(uint i = 0;i<20;i++){
|
||||||
|
measurment1 = this->getAcceleration();
|
||||||
|
delayMicroseconds(10);
|
||||||
|
measurment2 = this->getAcceleration();
|
||||||
|
if(
|
||||||
|
(((axis && xAxis) > 0) && (abs(abs(measurment1.x)-abs(measurment2.x))>threshold)) ||
|
||||||
|
(((axis && yAxis) > 0) && (abs(abs(measurment1.y)-abs(measurment2.y))>threshold)) ||
|
||||||
|
(((axis && zAxis) > 0) && (abs(abs(measurment1.z)-abs(measurment2.z))>threshold))){
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
delayMicroseconds(15);
|
||||||
|
}
|
||||||
|
Serial.println(count);
|
||||||
|
return (count > 6);
|
||||||
};
|
};
|
||||||
|
|
||||||
void MotionDetection::calibrateZAxis(uint gforceValue){
|
void MotionDetection::calibrateZAxis(uint gforceValue){
|
||||||
|
@ -67,7 +67,7 @@ protected:
|
|||||||
static const uint8_t WHO_AM_I = 0x75;
|
static const uint8_t WHO_AM_I = 0x75;
|
||||||
|
|
||||||
static const uint frequency = 10000000;
|
static const uint frequency = 10000000;
|
||||||
static const uint16_t defaultShakeThreshold = 500;
|
static const uint16_t defaultShakeThreshold = 1000;
|
||||||
|
|
||||||
uint16_t cmdRead(uint8_t regHigh,uint8_t regLow);
|
uint16_t cmdRead(uint8_t regHigh,uint8_t regLow);
|
||||||
uint16_t cmdWrite(uint8_t regHigh,uint8_t regLow);
|
uint16_t cmdWrite(uint8_t regHigh,uint8_t regLow);
|
||||||
@ -151,7 +151,7 @@ public:
|
|||||||
* Precision is rounded to 1 deg steps
|
* Precision is rounded to 1 deg steps
|
||||||
*
|
*
|
||||||
* @attention The results are only valid, if the robot is not moved in any way during the measurment, as the calculation is made by using the accelration values.
|
* @attention The results are only valid, if the robot is not moved in any way during the measurment, as the calculation is made by using the accelration values.
|
||||||
* If it's detected, that the robot is accelerated while measuring, the method will return max(uint).
|
* If it's detected, that the robot is accelerated while measuring, the method will return max(int).
|
||||||
* Please note that the imu is pretty sensitiv, even walking next to the table may influcene the result.
|
* Please note that the imu is pretty sensitiv, even walking next to the table may influcene the result.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user