File tree Expand file tree Collapse file tree 2 files changed +45
-0
lines changed Expand file tree Collapse file tree 2 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -67,6 +67,10 @@ Arduino_AlvikCarrier::Arduino_AlvikCarrier(){
67
67
ipKnobs = &iKnobs;
68
68
imu_delta_time = MOTION_FX_ENGINE_DELTATIME;
69
69
sample_to_discard = 0 ;
70
+ is_shaking = 0 ;
71
+ first_wakeup = true ;
72
+ shake_time = 0 ;
73
+ shake_counter = 0 ;
70
74
71
75
// version
72
76
version_high = VERSION_BYTE_HIGH;
@@ -619,6 +623,9 @@ int Arduino_AlvikCarrier::beginImu(){
619
623
imu->Set_G_FS (2000 );
620
624
imu->Enable_X ();
621
625
imu->Enable_G ();
626
+ imu->Enable_Wake_Up_Detection (LSM6DSO_INT1_PIN);
627
+ imu->Set_Wake_Up_Threshold (1 );
628
+ imu->Set_Wake_Up_Duration (3 );
622
629
623
630
delay (10 );
624
631
@@ -664,6 +671,33 @@ void Arduino_AlvikCarrier::updateImu(){
664
671
sample_to_discard++;
665
672
}
666
673
674
+ imu->Get_X_Event_Status (&imu_status);
675
+
676
+ if (imu_status.WakeUpStatus &&
677
+ (motor_control_left->getRPM ()<1 && motor_control_left->getRPM ()>-1 ) &&
678
+ (motor_control_right->getRPM ()<1 && motor_control_right->getRPM ()>-1 )){
679
+ if (first_wakeup){
680
+ shake_time = millis ();
681
+ first_wakeup = false ;
682
+ shake_counter = 0 ;
683
+ }
684
+ shake_counter++;
685
+ }
686
+
687
+ if (millis ()-shake_time>500 ){
688
+ if (shake_counter>10 ){
689
+ is_shaking = true ;
690
+ shake_counter = 0 ;
691
+ shake_time_sig = millis ();
692
+ }
693
+ }
694
+ if (is_shaking && (millis ()-shake_time_sig>1000 )){
695
+ is_shaking = false ;
696
+ }
697
+
698
+
699
+
700
+
667
701
}
668
702
669
703
float Arduino_AlvikCarrier::getAccelerationX (){
@@ -702,6 +736,10 @@ float Arduino_AlvikCarrier::getYaw(){
702
736
return 360.0 -filter_data.rotation [0 ];
703
737
}
704
738
739
+ bool Arduino_AlvikCarrier::isShaking (){
740
+ return is_shaking;
741
+ }
742
+
705
743
706
744
707
745
/* *****************************************************************************************************/
Original file line number Diff line number Diff line change @@ -56,6 +56,8 @@ class Arduino_AlvikCarrier{
56
56
LSM6DSOSensor * imu;
57
57
int32_t accelerometer[3 ];
58
58
int32_t gyroscope[3 ];
59
+ LSM6DSO_Event_Status_t imu_status;
60
+
59
61
60
62
float imu_delta_time;
61
63
MFX_knobs_t iKnobs;
@@ -64,6 +66,10 @@ class Arduino_AlvikCarrier{
64
66
MFX_input_t imu_data;
65
67
MFX_output_t filter_data;
66
68
uint16_t sample_to_discard;
69
+ bool is_shaking;
70
+ bool first_wakeup;
71
+ unsigned long shake_time, shake_time_sig;
72
+ uint16_t shake_counter;
67
73
68
74
uint8_t version_high;
69
75
uint8_t version_mid;
@@ -220,6 +226,7 @@ class Arduino_AlvikCarrier{
220
226
float getRoll (); // get robot roll
221
227
float getPitch (); // get robot pitch
222
228
float getYaw (); // get robot yaw
229
+ bool isShaking (); // get true if robot is shaking
223
230
224
231
void errorLed (const int error_code); // error routine, locks on code blinking led
225
232
You can’t perform that action at this time.
0 commit comments