This commit is contained in:
Clément SAILLANT
2024-11-25 19:12:46 +01:00
parent f3d6f7c0e6
commit e6f8cad063
15 changed files with 170 additions and 3659 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
/*******************************************************************************************************
gestion des états de boutton
***************************** gestion des états de boutton *****************************************
*******************************************************************************************************/
// Include the Bounce2 library found here :
+9 -36
View File
@@ -11,6 +11,7 @@ void consigne_set(int i); // calcul des consignes
void motor_calc(int pot, int motor) // calcul des consignes de moteurs et du flag de changement de position
{
lecture_pot(motor); // lecture des potentiomètres
lecture_pot(pot); // lecture des potentiomètres
// calcul de la consigne de position des moteurs en min et max
if (position_set[motor] < min_val_pot)
{
@@ -126,45 +127,17 @@ void consigne_set(int i) // calcul des consignes de moteurs
}
}
else if (const_out_L_state == true) // si uniquement const_out_L actif
else if (const_out_L_state == true or const_out_R_state == true) // si uniquement const_output actif
{
const int gain_const = 0;
const int volume_const = 1;
switch (i)
{
case gain_const:
position_const_calc(gain_const, volume_const);
break;
case volume_const:
position_const_calc(volume_const, gain_const);
break;
default:
break;
}
#ifdef DEBUG // si DEBUG activé
breakpoint();
#endif
if (i == 0 or i == 2) // si potentiomètre de gain
position_const_calc(i, i + 1);
else if (i == 1 or i == 3) // si potentiomètre de volume
position_const_calc(i + 1, i);
}
#ifdef DEBUG // si DEBUG activé
breakpoint();
#endif
else if (const_out_R_state == true) // si uniquement const_out_L actif
{
const int gain_const = 2;
const int volume_const = 3;
switch (i)
{
case gain_const:
position_const_calc(gain_const, volume_const);
break;
case volume_const:
position_const_calc(volume_const, gain_const);
break;
default:
break;
}
#ifdef DEBUG // si DEBUG activé
breakpoint();
#endif
}
/*
Serial.print("position_set[");
Serial.print(i);
+27 -27
View File
@@ -12,11 +12,11 @@ c.saillant@gmail.com
#include <Arduino.h>
// *******************************************************************************************************
// ******************** pour activer ou non le DEBUG *****************************************************
// ******************** // #define DEBUG = INACTIF *******************************************************
// ******************** #define DEBUG = ACTIF ************************************************************
// *******************************************************************************************************
/*******************************************************************************************************
******************** pour activer ou non le DEBUG ******************************************************
******************** // #define DEBUG = INACTIF ********************************************************
******************** #define DEBUG = ACTIF *************************************************************
*******************************************************************************************************/
// #define DEBUG
@@ -33,9 +33,9 @@ c.saillant@gmail.com
#endif
*/
// *******************************************************************************************************
// ****************************************** include ***************************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** include ****************************************************
******************************************************************************************************/
#include "variables.h"
#include "pot.h"
#include "moteur.h"
@@ -45,9 +45,9 @@ c.saillant@gmail.com
#include "valeurs.h"
#include "consigne.h"
// *******************************************************************************************************
// ****************************************** boucle setup ***********************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** boucle setup ***********************************************
******************************************************************************************************/
void setup()
{
#ifdef DEBUG // si DEBUG activé
@@ -128,11 +128,12 @@ void setup()
digitalWrite(const_out_R_led, LOW);
digitalWrite(stereo_link_led, LOW);
bouton_set(); // lecture et controle des boutons
last_motor_end = millis();
}
// *******************************************************************************************************
// ****************************************** boucle principale ******************************************
// *******************************************************************************************************
/********************************************************************************************************
****************************************** boucle principale *******************************************
*******************************************************************************************************/
void loop()
{
bouton_set(); // lecture et controle des boutons
@@ -141,34 +142,33 @@ void loop()
button_position_save(); // enregistrement de position des potentiomètres
state_button_change = false; // remise à zéro du flag de changement de bouton
}
// *******************************************************************************************************
// ********************************* boucle de lecture des potentiomètres ********************************
// *******************************************************************************************************
/*******************************************************************************************************
********************************* boucle de lecture des potentiomètres ********************************
******************************************************************************************************/
for (int i = 0; i <= 3; i++)
{
// *******************************************************************************************************
// ********************************* boucle de controle des boutons **************************************
// *******************************************************************************************************
/*******************************************************************************************************
********************************* boucle de controle des boutons **************************************
******************************************************************************************************/
lecture_pot(i); // lecture analogique potentiomètre avec mise à jour du flag de changement de potentiomètre
if (position_change[i] == true) // si changement de position d'un potentiomètre
{
if (stereo_link_state != true && const_out_L_state != true && const_out_R_state != true && millis() >= last_pot_change[i] + 150) // si pas de contrôle constant output
// si pas de contrôle constant output ou stereo link avec potentiomètre plus bougé depuis plus que bounce_time_pot
if (stereo_link_state != true && const_out_L_state != true && const_out_R_state != true && millis() >= last_pot_change[i] + bounce_time_pot)
{
valeurs_set(i); // controle des valeurs et des relais en mode normal
motor[i].stop(); // stop moteur
motor_change[i] = false;
}
// si contrôle constant output ou stereo link avec moteur arrêté depuis plus que bounce_time_pot
else if (motor_change[i] != true && millis() > last_motor_end + 500)
// si contrôle constant output ou stereo link avec moteur arrêté et potentiomètre plus bougé depuis plus que bounce_time_pot
else if (motor_change[i] != true && millis() > last_motor_end + bounce_time_pot && millis() >= last_pot_change[i] + bounce_time_pot)
{
if (abs(position_lue[i] - position_set[i]) > ECART_V_STOP)
{
position_set[i] = position_lue[i];
motor[i].brake();
consigne_set(i); // mise à jour des consignes
position_set[i] = position_lue[i]; // mise à jour de la consigne de position du potentiomètre
consigne_set(i); // mise à jour des consignes
for (int i = 0; i <= 3; i++)
{
// if (motor_change[i] != true)
valeurs_const_set(i); // controle des valeurs et des relais en mode constant output
}
}
+16 -15
View File
@@ -1,10 +1,11 @@
/*******************************************************************************************************
gestion de la vitesse et du sens de déplacement des moteur
****************** gestion de la vitesse et du sens de déplacement des moteur **********************
*******************************************************************************************************/
#include <SparkFunMiniMoto.h> // Include the MiniMoto library
/*
Attempts to set speed lower than 6 will be ignored; speeds higher than 63 will be truncated to 63. The sign of the value determines the direction of the motion.
Attempts to set speed lower than 6 will be ignored; speeds higher than 63 will be truncated to 63.
The sign of the value determines the direction of the motion.
*/
MiniMoto motor[4] = {gain_0_motor, vol_0_motor, gain_1_motor, vol_1_motor}; // Create MiniMoto instances, pour controle des moteur en I2C (DRV8830)
@@ -90,10 +91,11 @@ void moteur_set(int i) // fonction de gestion de vitesse et position moteurs ave
moteur_stop(i); // stop moteur
return;
}
// *******************************************************************************************************
else if (position_lue[i] > position_set[i]) // si moteur doit aller vers la gauche
/*******************************************************************************************************
si moteur doit aller vers la gauche
*******************************************************************************************************/
else if (position_lue[i] > position_set[i])
{
// myPID.configure(Kp, Ki, Kd, Hz, output_bits, output_signed); // configuration PID
switch (i) // configuration PID en fonction du moteur (i)
{
case 0:
@@ -101,18 +103,17 @@ void moteur_set(int i) // fonction de gestion de vitesse et position moteurs ave
break;
case 1:
myPID_1.setOutputRange(-PID_speed_max, -PID_speed_min); // plage de sortie du PID
break;
case 2:
myPID_2.setOutputRange(-PID_speed_max, -PID_speed_min); // plage de sortie du PID
break;
case 3:
myPID_3.setOutputRange(-PID_speed_max, -PID_speed_min); // plage de sortie du PID
break;
}
error_state = false; // remise à zéro du flag d'erreur
if (position_set[i] <= min_val_pot + ECART_V_MIN_MAX) // si consigne de position du potentiomètre = min
error_state = false; // remise à zéro du flag d'erreur
// si consigne de position du potentiomètre = min
if (position_set[i] <= min_val_pot + ECART_V_MIN_MAX)
{
motor_speed[i] = -63;
switch (i) // mise à zéro du PID en fonction du moteur (i)
@@ -125,7 +126,6 @@ void moteur_set(int i) // fonction de gestion de vitesse et position moteurs ave
break;
case 2:
myPID_2.clear(); // remise à zéro du PID
break;
case 3:
myPID_3.clear(); // remise à zéro du PID
@@ -159,10 +159,11 @@ void moteur_set(int i) // fonction de gestion de vitesse et position moteurs ave
}
motor[i].drive(motor_speed[i]); // controle moteur
}
// *******************************************************************************************************
else if (position_lue[i] < position_set[i]) // si moteur doit aller vers la droite
/*******************************************************************************************************
si moteur doit aller vers la droite
********************************************************************************************************/
else if (position_lue[i] < position_set[i])
{
// myPID.configure(Kp, Ki, Kd, Hz, output_bits, output_signed); // configuration PID
switch (i)
{
case 0:
@@ -181,8 +182,8 @@ void moteur_set(int i) // fonction de gestion de vitesse et position moteurs ave
break;
}
error_state = false; // remise à zéro du flag d'erreur
if (position_set[i] >= max_val_pot - ECART_V_MIN_MAX) // si consigne de position du potentiomètre = max
// si consigne de position du potentiomètre = max
if (position_set[i] >= max_val_pot - ECART_V_MIN_MAX)
{
motor_speed[i] = 63;
switch (i)
+2 -4
View File
@@ -1,6 +1,6 @@
/*******************************************************************************************************
/*************************************************************************************************************
gestion des valeurs des relais avec incrément et décrément et de l'envoie des valeurs sur les cartes relais
*******************************************************************************************************/
**************************************************************************************************************/
#include "PCF8574.h" // https://github.com/RobTillaart/PCF8574/blob/master/examples/PCF8574_test1/PCF8574_test1.ino
@@ -82,8 +82,6 @@ void relais_set(int relais)
void relais_send(int relais, int value, int byte_value)
{
// PCF.write(const uint8_t pin, const uint8_t value) writes a single pin; pin = 0..7; value is HIGH(1) or LOW (0)
// uint8_t write(const uint8_t value) writes all pins; value = 0..255
// envoie I2C des valeur sur les cartes relais
switch (relais)
{
+1 -1
View File
@@ -374,7 +374,7 @@ void smoothgain_set(int i) // calcul des valeurs lissées de gain et mise à jou
void smoothvolume_set(int i) // calcul des valeurs lissées de volume et mise à jour des relais
{
smoothvol[i] = map(smoothvol[i], 0, max_val_pot, 0, 255); // map de 0 à 255
smoothvol[i] = map(smoothvol[i], 0, 255, 0, 156); // map de 0 à 255
smoothvol[i] = constrain(smoothvol[i], 0, 255); // constrain de 0 à 255
relais_vol_val[i] = smoothvol[i]; // valeur du relais = valeur du volume
// mise à jour des relais
+32 -31
View File
@@ -1,25 +1,25 @@
// *******************************************************************************************************
// ****************************************** PIN MAPPING ************************************************
// *******************************************************************************************************
// définition LED
/*******************************************************************************************************
****************************************** PIN MAPPING ************************************************
******************************************************************************************************/
// LED
#define const_out_L_led 5 // Digital OUT led const_out_L
#define const_out_R_led 6 // Digital OUT led const_out_R
#define stereo_link_led 7 // Digital OUT led stereo_link
// définition switch
// switch
#define const_out_sw_L 2 // Digital IN switch const_out_L
#define const_out_sw_R 3 // Digital IN switch const_out_R
#define stereo_link_sw 4 // Digital IN switch stereo_link
// définition PIN curseur potentiomètre
// PIN curseur potentiomètre
#define gain_0_pot A1 // entrée pot gain gauche
#define vol_0_pot A0 // entrée pot volume gauche
#define gain_1_pot A3 // entrée pot gain droite
#define vol_1_pot A2 // entrée pot volume droite
// *******************************************************************************************************
// ****************************************** potentiomètre **********************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** potentiomètre ***********************************************
*******************************************************************************************************/
// variables potentiomètre
int position_lue[4] = {0, 0, 0, 0}; // tableau des valeur lus sur les potentiomètre
int valut_pot_old[4] = {0, 0, 0, 0}; // tableau de comparaison de valeur lus sur les potentiomètre
@@ -31,13 +31,13 @@ bool motor_change[4] = {false, false, false, false}; // tableau
byte analog_pot[4] = {gain_0_pot, vol_0_pot, gain_1_pot, vol_1_pot}; // tableau de PIN des potentiomètre
// réglagle de précision de lecture du potentiomètre
#define bit_read_pot 4 // 4 = 8 bits, 2 = 9 bits, 1 = 10 bits
/*
Max-val_pot / divider relais / divider_analog
255 / 1 / 4
512 / 2 / 2
1023 / 4 / 1
*/
#define bit_read_pot 1 // 4 = 8 bits, 2 = 9 bits, 1 = 10 bits
#if bit_read_pot == 4
#define divider_relais 1
@@ -57,7 +57,6 @@ Max-val_pot / divider relais / divider_analog
#define offset_max_pot 0 // valeur de suppression de la valeur max du potentiomètre (lecture à 0% de la course)
#define offset_min_pot 5 // valeur d'ajout de la valeur min du potentiomètre (lecture à 100% de la course)
const int middle_value = max_val_pot / 2; // valeur du milieu du potentiomètre
unsigned long max_pot_time[4] = {0, 0, 0, 0}; // compteur de temps de maintien moteur pour la valeur max du potentiomètre
unsigned long last_pot_change[4] = {0, 0, 0, 0}; // compteur de temps de changement de valeur du potentiomètre
@@ -78,14 +77,15 @@ int min_pot[4] = {30, 29, 20, 21}; // valeur min potentiomètre pour cal
int calibrating_midle_pot[4] = {value_middle_pot_0, value_middle_pot_1, value_middle_pot_2, value_middle_pot_3};
#else
const int middle_value = max_val_pot / 2; // valeur du milieu du potentiomètre
int calibrating_midle_pot[4] = {middle_value, middle_value, middle_value, middle_value};
#endif
#define bounce_time_pot 200 // interval de temps entre 2 lecture de l'état du potentiomètre
#define bounce_time_pot 200 // interval de temps entre 2 lecture de l'état du potentiomètre en ms
// *******************************************************************************************************
// ****************************************** moteur *****************************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** moteur ******************************************************
*******************************************************************************************************/
// adressage I2C carte moteur
/*
0xC8 : A0 = open, A1 = open
@@ -100,11 +100,10 @@ int calibrating_midle_pot[4] = {middle_value, middle_value, middle_value, middle
int motor_speed[4]; // tableau de valeur de vitesse des moteur
unsigned long last_motor_end = 0; // compteur de temps d'arrêt moteur
// unsigned long last_motor_end[4] = {0, 0, 0, 0}; // compteur de temps d'arrêt moteur
// *******************************************************************************************************
// ****************************************** relais *****************************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** relais *****************************************************
********************************************************************************************************/
// adressage I2C carte relais
/*
0x39 : A0 = 0, A1 = 1, A2 = 1
@@ -122,11 +121,11 @@ byte relais_gain_val[2] = {0, 0}; // tableau de valeur des relais gain
byte relais_vol_val[2] = {0, 0}; // tableau de valeur des relais volumes
byte relais_old[4] = {0, 0, 0, 0}; // tableau de comparaison de valeur des relais
byte relais_map[4] = {0, 0, 0, 0}; // tableau de mappage des valeur des relais
#define delay_relais 5 // temps de commutation entre relais
#define delay_relais 1 // temps de commutation entre relais pour éviter les clic audio
// *******************************************************************************************************
// ****************************************** boutton ****************************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** boutton ****************************************************
*******************************************************************************************************/
bool const_out_L_state_old = false; // variable de comparaison d'état du bouton const_out_L
bool const_out_R_state_old = false; // variable de comparaison d'état du bouton const_out_R
bool stereo_link_state_old = false; // variable de comparaison d'état du bouton stereo_link
@@ -136,29 +135,31 @@ bool stereo_link_state = false; // variable d'état du bouton stereo_link
bool state_button_change = false; // variable de changement d'état des boutons
#define interval_button 10 // interval de temps entre 2 lecture de l'état du bouton
// *******************************************************************************************************
// ****************************************** variable diverse *******************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** variable diverse *******************************************
******************************************************************************************************/
int smoothgain[2] = {0, 0}; // tableau de valeur de lissage du gain
int smoothvol[2] = {0, 0}; // tableau de valeur de lissage du volume
// bool const_state = false; // variable d'état constant ouptut/stereo_link
// bool error_motor = false; // variable d'erreur de communication avec le moteur
// *******************************************************************************************************
// ****************************************** fonction erreur LED ***************************************
// *******************************************************************************************************
/*******************************************************************************************************
****************************************** fonction erreur LED ***************************************
*******************************************************************************************************/
bool error_state = false;
bool error_led_state = LOW;
int blink_speed_led = 250;
unsigned long old_led_time = millis(); // variable de temps courant
void error_led() // fonction clignotement LED en cas d'erreur
{
unsigned long current_led_time = millis(); // variable de temps courant
if (current_led_time - old_led_time >= 100)
if (current_led_time - old_led_time >= blink_speed_led)
{
old_led_time = millis();
error_led_state = !error_led_state;
digitalWrite(stereo_link_led, error_led_state);
digitalWrite(const_out_L_led, !error_led_state);
digitalWrite(const_out_R_led, !error_led_state);
}
}
@@ -1 +0,0 @@
/Users/electron_rare/Documents/Lelectron_rare/HLabs/HLabs_analog_felling/PCB/PCB Hlabs motor cotrol/_autosave-Hlabs motor cotrol.kicad_sch
@@ -72,6 +72,31 @@
"version": 3
},
"project": {
"files": []
"files": [
{
"name": "Hlabs motor cotrol.kicad_pcb",
"open": false,
"window": {
"display": 0,
"maximized": true,
"pos_x": 92,
"pos_y": 171,
"size_x": 1496,
"size_y": 883
}
},
{
"name": "Hlabs motor cotrol.kicad_sch",
"open": false,
"window": {
"display": 0,
"maximized": false,
"pos_x": 116,
"pos_y": 116,
"size_x": 1496,
"size_y": 866
}
}
]
}
}
@@ -63,20 +63,26 @@
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_type_mismatch": "error",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
@@ -86,9 +92,14 @@
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
@@ -97,7 +108,6 @@
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rules": {
@@ -105,20 +115,65 @@
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.19999999999999998,
"min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.39999999999999997,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 5,
"td_on_pad_in_zone": false,
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0
],
File diff suppressed because it is too large Load Diff
@@ -1 +0,0 @@
{"hostname":"Mac-de-clems","username":"electron_rare"}
@@ -1 +0,0 @@
{"hostname":"Mac-de-clems","username":"electron_rare"}