Compare commits

...

1 Commits

Author SHA1 Message Date
920ef67393 Gestion du temps 2025-01-04 18:08:56 +01:00
6 changed files with 72 additions and 21 deletions

View File

@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake) 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_C_STNDARD 11)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
@ -10,27 +10,27 @@ set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR})
pico_sdk_init() pico_sdk_init()
add_executable(PAMI_Cours add_executable(PAMI_Cours_temps
main.c main.c
Teleplot.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 target_link_libraries(PAMI_Cours_temps
hardware_i2c
hardware_uart hardware_uart
pico_stdlib pico_stdlib
pico_multicore pico_multicore
pico_cyw43_arch_lwip_poll pico_cyw43_arch_lwip_poll
) )
pico_enable_stdio_usb(PAMI_Cours 1) pico_enable_stdio_usb(PAMI_Cours_temps 1)
pico_enable_stdio_uart(PAMI_Cours 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 add_custom_target(Flash
DEPENDS PAMI_Cours DEPENDS PAMI_Cours_temps
COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/PAMI_Cours.uf2 COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/PAMI_Cours_temps.uf2
) )

View File

@ -3,11 +3,10 @@ De lart de déplacer un robot avec classe - Teleplot
Le but est de vous proposer une série darticles vous présentant les arcanes du déplacement dun 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) Le but est de vous proposer une série darticles vous présentant les arcanes du déplacement dun 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. Ajout de la gestion du temps à l'aide de trois fonctions simples.
- Une fonction qui incrémente notre temps de 1.
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. - Une fonction dinitialisation qui crée linterruption qui appellera notre fonction précédente toutes les 1 millisecondes.
- Une fonction qui renvoie le nombre de milliseconde écoulée depuis linitialisation.
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.

View File

@ -14,6 +14,10 @@ ip_addr_t addr;
long teleplote_temps_ms; long teleplote_temps_ms;
bool teleplot_temps_fige; bool teleplot_temps_fige;
/// @brief Initialise le module Teleplot,
/// @param
/// @return /
int Teleplot_init(void){ int Teleplot_init(void){
#ifdef WIFI_ENABLE #ifdef WIFI_ENABLE
if (cyw43_arch_init()) { if (cyw43_arch_init()) {

28
Temps.c Normal file
View File

@ -0,0 +1,28 @@
#include <stdio.h>
#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;
}

5
Temps.h Normal file
View File

@ -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);

23
main.c
View File

@ -5,11 +5,14 @@
*/ */
#include "pico/stdlib.h" #include "pico/stdlib.h"
#include "Teleplot.h" #include "Teleplot.h"
#include "Temps.h"
#include <stdio.h> #include <stdio.h>
void setup(void); void setup(void);
void loop(void); void loop(void);
int valeur = 1;
void main(void) void main(void)
{ {
setup(); setup();
@ -21,11 +24,23 @@ void main(void)
void setup(void){ void setup(void){
stdio_init_all(); stdio_init_all();
Teleplot_init(); Teleplot_init();
Temps_init();
} }
void loop(void){ void loop(void){
printf("Exemple\n"); static uint32_t temps_ms = 0;
Teleplot_add_variable_int("t", 2); if(temps_ms != Temps_get_temps_ms()){
Teleplot_envoie_tampon(); temps_ms = Temps_get_temps_ms();
sleep_ms(1000); // 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();
}
}
} }