diff --git a/main.c b/main.c index b3019a7..3baae37 100644 --- a/main.c +++ b/main.c @@ -7,6 +7,7 @@ #include "pico/time.h" #include "pico/multicore.h" #include "hardware/pwm.h" +#include #include #define PIN_STEP 0 #define PIN_DIR 1 @@ -17,8 +18,9 @@ #define PIN_CONTACTEUR_OUVERT 5 #define PIN_CONTACTEUR_FERMÉ 6 -#define SENS_BAS 0 -#define SENS_HAUT 1 +#define SENS_BAS 1 +#define SENS_HAUT 2 +#define SENS_NONE 3 bool bouton_Presser = false; @@ -28,6 +30,10 @@ float v_consigne_tr_s=0; float acc_tr_s = 50; const float pas_par_tour = 200; float temps_pas= 0.001; +int pos_pas; + +float vitesse_nominale_tr_s = 10; +uint sens_pas_a_pas=SENS_BAS; struct contacteur_t{ uint gpio; @@ -101,7 +107,8 @@ void affiche_pas_de_temps(){ printf(">v_actuelle_tr_s:%f\n", v_actuelle_tr_s); printf(">v_consigne_tr_s:%f\n", v_consigne_tr_s); printf(">contacteur_bas:%d\n", contacteur_bas.pos_valide); - sleep_ms(1); + printf(">pos_pas:%d\n", pos_pas); + sleep_ms(20); } } @@ -119,6 +126,8 @@ void pince_ferme(){ while(contacteur_fermé.pos_valide){ contacteur_update(&contacteur_fermé); } + pwm_set_chan_level(1, PWM_CHAN_B, 30000); + sleep_ms(200); pwm_set_chan_level(1, PWM_CHAN_B, 0); } @@ -127,6 +136,23 @@ void pas_a_pas_stop(){ gpio_put(PIN_ENABLE, 1); gpio_set_dir(PIN_STEP, GPIO_IN); v_consigne_tr_s = 0; + sens_pas_a_pas=SENS_NONE; +} + +void pas_a_pas_descend(){ + gpio_put(PIN_DIR, 0); + gpio_put(PIN_ENABLE, 0); + gpio_set_dir(PIN_STEP, GPIO_OUT); + v_consigne_tr_s = vitesse_nominale_tr_s; + sens_pas_a_pas=SENS_BAS; +} + +void pas_a_pas_monte(){ + gpio_put(PIN_DIR, 1); + gpio_put(PIN_ENABLE, 0); + gpio_set_dir(PIN_STEP, GPIO_OUT); + v_consigne_tr_s = vitesse_nominale_tr_s; + sens_pas_a_pas=SENS_HAUT; } void main(void) @@ -162,12 +188,13 @@ void main(void) gpio_put(PIN_ENABLE, 1); multicore_launch_core1(affiche_pas_de_temps); - float vitesse_nominale_tr_s = 10; + //sleep_ms(3000); //printf("kartoffen\n"); const uint32_t my_delay=500; - uint sens_pas_a_pas=SENS_BAS; + bool consigne_pas_a_pas_active = false; + int consigne_pas_a_pas = 0; while(1){ contacteur_update(&contacteur_ouvert); @@ -176,6 +203,14 @@ void main(void) if(sens_pas_a_pas==SENS_BAS && contacteur_bas.pos_valide == 1){ pas_a_pas_stop(); + pos_pas = 0; + } + + if(consigne_pas_a_pas_active == true){ + if (abs(pos_pas - consigne_pas_a_pas) < 10){ + pas_a_pas_stop(); + consigne_pas_a_pas_active = false; + } } temps_pas = compute_time_step(temps_pas); @@ -183,28 +218,22 @@ void main(void) gpio_put(PIN_STEP, 1); sleep_us(temps_pas * 1000000); gpio_put(PIN_STEP, 0); + if(sens_pas_a_pas == SENS_HAUT){ + pos_pas+= 2; + }else if(sens_pas_a_pas == SENS_BAS){ + pos_pas-= 2; + } + int key = getchar_timeout_us(0); // get any pending key press but don't wait if (key != PICO_ERROR_TIMEOUT) { if(key == 'u' || key == 'U'){ - gpio_put(PIN_DIR, 1); - gpio_put(PIN_ENABLE, 0); - gpio_set_dir(PIN_STEP, GPIO_OUT); - v_consigne_tr_s = vitesse_nominale_tr_s; - sens_pas_a_pas=SENS_HAUT; - + pas_a_pas_monte(); } if(key == 'd' || key == 'D'){ - gpio_put(PIN_DIR, 0); - gpio_put(PIN_ENABLE, 0); - gpio_set_dir(PIN_STEP, GPIO_OUT); - v_consigne_tr_s = vitesse_nominale_tr_s; - sens_pas_a_pas=SENS_BAS; + pas_a_pas_descend(); } if(key == 's' || key == 'S'){ - gpio_put(PIN_DIR, 0); - gpio_put(PIN_ENABLE, 1); - gpio_set_dir(PIN_STEP, GPIO_IN); - v_consigne_tr_s = 0; + pas_a_pas_stop(); } if(key == 'o' || key == 'O'){ pince_ouvre(); @@ -212,6 +241,24 @@ void main(void) if(key == 'f' || key == 'F'){ pince_ferme(); } + if(key == '1'){ + consigne_pas_a_pas=5000; + consigne_pas_a_pas_active=true; + if(pos_pas