/* * moto_config.h * * Created on: Jul 24, 2025 * Author: loren */ #ifndef INC_MOTO_CONFIG_H_ #define INC_MOTO_CONFIG_H_ #include #include //------------------------------------------------------------------------------ // Constantes de configuration moto //------------------------------------------------------------------------------ // Seuils d'alerte d'inclinaison (en degrés) #define MOTO_ROLL_WARNING_THRESHOLD 20.0f // Avertissement inclinaison #define MOTO_ROLL_DANGER_THRESHOLD 35.0f // Danger inclinaison #define MOTO_PITCH_WHEELIE_THRESHOLD 25.0f // Détection wheelie #define MOTO_PITCH_STOPPIE_THRESHOLD -25.0f // Détection stoppie // Seuils de vitesse angulaire (degrés/s) #define MOTO_GYRO_RAPID_TURN_THRESHOLD 100.0f // Virage rapide #define MOTO_GYRO_CRASH_THRESHOLD 300.0f // Possible chute // Filtrage et échantillonnage #define MOTO_SAMPLE_RATE_HZ 100 // Fréquence d'échantillonnage #define MOTO_SAMPLE_PERIOD (1.0f / MOTO_SAMPLE_RATE_HZ) #define MOTO_MAG_FILTER_ALPHA 0.1f // Filtre magnétomètre #define MOTO_ANGLE_FILTER_ALPHA 0.2f // Filtre angles affichés // Calibration magnétomètre (à ajuster selon votre environnement) #define MOTO_MAG_OFFSET_X 0.0f #define MOTO_MAG_OFFSET_Y 0.0f #define MOTO_MAG_OFFSET_Z 0.0f #define MOTO_MAG_SCALE_X 1.0f #define MOTO_MAG_SCALE_Y 1.0f #define MOTO_MAG_SCALE_Z 1.0f //------------------------------------------------------------------------------ // Types de données //------------------------------------------------------------------------------ typedef enum { MOTO_STATE_NORMAL = 0, MOTO_STATE_WARNING, MOTO_STATE_DANGER, MOTO_STATE_WHEELIE, MOTO_STATE_STOPPIE, MOTO_STATE_RAPID_TURN, MOTO_STATE_POSSIBLE_CRASH } MotoState_t; typedef struct { float roll; float pitch; float yaw; float roll_filtered; float pitch_filtered; float yaw_filtered; MotoState_t state; bool is_initializing; uint32_t crash_detect_counter; uint32_t last_update_time; } MotoData_t; typedef struct { float max_roll; float min_roll; float max_pitch; float min_pitch; float max_gyro_x; float max_gyro_y; float max_gyro_z; uint32_t total_samples; uint32_t warning_count; uint32_t danger_count; } MotoStats_t; //------------------------------------------------------------------------------ // Prototypes de fonctions //------------------------------------------------------------------------------ /** * @brief Initialise les données moto * @param data Pointeur vers la structure de données moto */ void Moto_InitData(MotoData_t *data); /** * @brief Met à jour l'état de la moto basé sur les angles * @param data Pointeur vers la structure de données moto * @param roll Angle de roulis en degrés * @param pitch Angle de tangage en degrés * @param yaw Angle de lacet en degrés * @param gyro_x Vitesse angulaire X en dps * @param gyro_y Vitesse angulaire Y en dps * @param gyro_z Vitesse angulaire Z en dps */ void Moto_UpdateState(MotoData_t *data, float roll, float pitch, float yaw, float gyro_x, float gyro_y, float gyro_z); /** * @brief Applique un filtre passe-bas aux angles * @param data Pointeur vers la structure de données moto */ void Moto_FilterAngles(MotoData_t *data); /** * @brief Retourne une chaîne décrivant l'état actuel * @param state État de la moto * @return Pointeur vers la chaîne de caractères */ const char* Moto_GetStateString(MotoState_t state); /** * @brief Met à jour les statistiques de conduite * @param stats Pointeur vers la structure de statistiques * @param data Pointeur vers les données actuelles * @param gyro_x Vitesse angulaire X * @param gyro_y Vitesse angulaire Y * @param gyro_z Vitesse angulaire Z */ void Moto_UpdateStats(MotoStats_t *stats, const MotoData_t *data, float gyro_x, float gyro_y, float gyro_z); /** * @brief Calibre les données du magnétomètre * @param mx Pointeur vers la composante X * @param my Pointeur vers la composante Y * @param mz Pointeur vers la composante Z */ void Moto_CalibrateMagnetometer(float *mx, float *my, float *mz); /** * @brief Détecte une possible chute * @param data Pointeur vers la structure de données moto * @param gyro_magnitude Magnitude de la vitesse angulaire * @return true si chute détectée */ bool Moto_DetectCrash(MotoData_t *data, float gyro_magnitude); /** * @brief Formate l'affichage pour l'écran LCD selon l'état * @param data Pointeur vers les données moto * @param line Numéro de ligne (0-3) * @param buffer Buffer de sortie (21 caractères) */ void Moto_FormatDisplay(const MotoData_t *data, int line, char *buffer); #endif /* INC_MOTO_CONFIG_H_ */