From 920ef67393c03669078e7ae478f1b8c79e30ce17 Mon Sep 17 00:00:00 2001 From: Samuel Date: Sat, 4 Jan 2025 18:08:56 +0100 Subject: [PATCH] Gestion du temps --- CMakeLists.txt | 20 ++++++++++---------- Readme.md | 13 ++++++------- Teleplot.c | 4 ++++ Temps.c | 28 ++++++++++++++++++++++++++++ Temps.h | 5 +++++ main.c | 23 +++++++++++++++++++---- 6 files changed, 72 insertions(+), 21 deletions(-) create mode 100644 Temps.c create mode 100644 Temps.h diff --git a/CMakeLists.txt b/CMakeLists.txt index be53319..165445d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.13) include(pico_sdk_import.cmake) -project(PAMI_Cours C CXX ASM) +project(PAMI_Cours_temps C CXX ASM) set(CMAKE_C_STNDARD 11) set(CMAKE_CXX_STANDARD 17) @@ -10,27 +10,27 @@ set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR}) pico_sdk_init() -add_executable(PAMI_Cours +add_executable(PAMI_Cours_temps main.c Teleplot.c + Temps.c ) -target_include_directories(PAMI_Cours PRIVATE ${CMAKE_CURRENT_LIST_DIR}) +target_include_directories(PAMI_Cours_temps PRIVATE ${CMAKE_CURRENT_LIST_DIR}) -target_link_libraries(PAMI_Cours - hardware_i2c +target_link_libraries(PAMI_Cours_temps hardware_uart pico_stdlib pico_multicore pico_cyw43_arch_lwip_poll ) -pico_enable_stdio_usb(PAMI_Cours 1) -pico_enable_stdio_uart(PAMI_Cours 1) +pico_enable_stdio_usb(PAMI_Cours_temps 1) +pico_enable_stdio_uart(PAMI_Cours_temps 1) -pico_add_extra_outputs(PAMI_Cours) +pico_add_extra_outputs(PAMI_Cours_temps) add_custom_target(Flash - DEPENDS PAMI_Cours - COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/PAMI_Cours.uf2 + DEPENDS PAMI_Cours_temps + COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/PAMI_Cours_temps.uf2 ) diff --git a/Readme.md b/Readme.md index d0b6f50..ce27a60 100644 --- a/Readme.md +++ b/Readme.md @@ -3,11 +3,10 @@ De l’art de déplacer un robot avec classe - Teleplot Le but est de vous proposer une série d’articles vous présentant les arcanes du déplacement d’un robot, en fournissant à chaque étape une idée de démonstration et les principales pistes de débogage. Les articles sont disponibles ici : [Wiki Eurobot](https://www.eurobot.org/wiki/fr/informatics/de_l_art_de_deplacer_son_robot_avec_classe) -Teleplot --------- +Temps +----- -Cette première étape consiste à transmettre des données depuis le robot vers un ordinateur, au format [Teleplot](https://teleplot.fr/) afin d'avoir de joli graphique. Pour profiter des graphiques, il faut avoir Teleplot d'installé sur l'ordinateur, le plus simple étant d'utiliser le plugin pour VS Code. - -Le code fourni est un peu compliqué pour ce qu'il fait car il gère à la fois le cas du transfert par la liaison série et le transfert par la liaison UDP/Wifi. Dans le cas d'un transfert par UDP, il est très avantageux de mettre en place un système de tampon pour grouper les envois. - -Pour que le code fonctionne, vous devez copier le fichier *wifi_settings.h.default* en *wifi_settings.h* puis l'éditer, même si vous n'utilisez pas le WIFI. \ No newline at end of file +Ajout de la gestion du temps à l'aide de trois fonctions simples. +- Une fonction qui incrémente notre temps de 1. +- Une fonction d’initialisation qui crée l’interruption qui appellera notre fonction précédente toutes les 1 millisecondes. +- Une fonction qui renvoie le nombre de milliseconde écoulée depuis l’initialisation. diff --git a/Teleplot.c b/Teleplot.c index 34fdfe5..d532ff9 100644 --- a/Teleplot.c +++ b/Teleplot.c @@ -14,6 +14,10 @@ ip_addr_t addr; long teleplote_temps_ms; bool teleplot_temps_fige; + +/// @brief Initialise le module Teleplot, +/// @param +/// @return / int Teleplot_init(void){ #ifdef WIFI_ENABLE if (cyw43_arch_init()) { diff --git a/Temps.c b/Temps.c new file mode 100644 index 0000000..411cece --- /dev/null +++ b/Temps.c @@ -0,0 +1,28 @@ +#include +#include "pico/stdlib.h" +#include "Temps.h" + +uint32_t temps_ms=0; +bool temps_est_init=false; +struct repeating_timer timer; + +/// @brief Fonction qui incrément notre temps_ms de 1, appelé par interruption toutes les 1 ms. +/// @param t : necessaire uniquement à cause du SDK du RPi Pico. +bool Temps_increment(struct repeating_timer *t){ + temps_ms++; + return true; +} + +/// @brief Crée l'interruption qui appellera la fonction Temps_increment toutes les 1 ms. +void Temps_init(void){ + if(!temps_est_init){ + temps_ms=0; + add_repeating_timer_ms(-1, Temps_increment, NULL, &timer); + temps_est_init = true; + } +} + +/// @brief Renvoie le temps actuel, depuis l'appel de Temps_init, en millisecondes +uint32_t Temps_get_temps_ms(void){ + return temps_ms; +} \ No newline at end of file diff --git a/Temps.h b/Temps.h new file mode 100644 index 0000000..0a575a3 --- /dev/null +++ b/Temps.h @@ -0,0 +1,5 @@ +#include "pico/stdlib.h" + +bool Temps_increment(struct repeating_timer *t); +void Temps_init(void); +uint32_t Temps_get_temps_ms(void); \ No newline at end of file diff --git a/main.c b/main.c index 558e5f4..7d93d08 100644 --- a/main.c +++ b/main.c @@ -5,11 +5,14 @@ */ #include "pico/stdlib.h" #include "Teleplot.h" +#include "Temps.h" #include void setup(void); void loop(void); +int valeur = 1; + void main(void) { setup(); @@ -21,11 +24,23 @@ void main(void) void setup(void){ stdio_init_all(); Teleplot_init(); + Temps_init(); } void loop(void){ - printf("Exemple\n"); - Teleplot_add_variable_int("t", 2); - Teleplot_envoie_tampon(); - sleep_ms(1000); + static uint32_t temps_ms = 0; + if(temps_ms != Temps_get_temps_ms()){ + temps_ms = Temps_get_temps_ms(); + // Toutes les 10 millisecondes, envoyer la valeur de "valeur" + if(temps_ms % 10 == 0){ + Teleplot_add_variable_int("valeur", valeur); + Teleplot_envoie_tampon(); + } + + // Toutes les 500 millisecondes, inverser la valeur de "valeur" + if(temps_ms % 500 == 0){ + valeur = -valeur; + Teleplot_envoie_tampon(); + } + } } \ No newline at end of file