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(){
6767 ipKnobs = &iKnobs;
6868 imu_delta_time = MOTION_FX_ENGINE_DELTATIME;
6969 sample_to_discard = 0 ;
70+ is_shaking = 0 ;
71+ first_wakeup = true ;
72+ shake_time = 0 ;
73+ shake_counter = 0 ;
7074
7175 // version
7276 version_high = VERSION_BYTE_HIGH;
@@ -619,6 +623,9 @@ int Arduino_AlvikCarrier::beginImu(){
619623 imu->Set_G_FS (2000 );
620624 imu->Enable_X ();
621625 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 );
622629
623630 delay (10 );
624631
@@ -664,6 +671,33 @@ void Arduino_AlvikCarrier::updateImu(){
664671 sample_to_discard++;
665672 }
666673
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+
667701}
668702
669703float Arduino_AlvikCarrier::getAccelerationX (){
@@ -702,6 +736,10 @@ float Arduino_AlvikCarrier::getYaw(){
702736 return 360.0 -filter_data.rotation [0 ];
703737}
704738
739+ bool Arduino_AlvikCarrier::isShaking (){
740+ return is_shaking;
741+ }
742+
705743
706744
707745/* *****************************************************************************************************/
Original file line number Diff line number Diff line change @@ -56,6 +56,8 @@ class Arduino_AlvikCarrier{
5656 LSM6DSOSensor * imu;
5757 int32_t accelerometer[3 ];
5858 int32_t gyroscope[3 ];
59+ LSM6DSO_Event_Status_t imu_status;
60+
5961
6062 float imu_delta_time;
6163 MFX_knobs_t iKnobs;
@@ -64,6 +66,10 @@ class Arduino_AlvikCarrier{
6466 MFX_input_t imu_data;
6567 MFX_output_t filter_data;
6668 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;
6773
6874 uint8_t version_high;
6975 uint8_t version_mid;
@@ -220,6 +226,7 @@ class Arduino_AlvikCarrier{
220226 float getRoll (); // get robot roll
221227 float getPitch (); // get robot pitch
222228 float getYaw (); // get robot yaw
229+ bool isShaking (); // get true if robot is shaking
223230
224231 void errorLed (const int error_code); // error routine, locks on code blinking led
225232
You can’t perform that action at this time.
0 commit comments