algorigramme

bonjour,
je voudrais qu'on m'aide pour créer un algorigramme, il faut qui soit simple et cours de premier niveau par rapport au programme ci-dessous:

const float pi = 3.14159265;  // Nombre Pi
int period = 1000;           // Période de mesure (miliseconde)
int delaytime = 1000;        // Temps entre les mesures (miliseconde)
int radio = 70 ;             // Distance du centre au capteur (mm)
unsigned int Sample = 0;       // Mesure a 0
unsigned int counter = 0;      // compteur
unsigned int RPM = 0;          // Tours par minute
float speedwind = 0;           // Vitesse du vent (km/h)  
// include the library code:
#include <LiquidCrystal.h>
// Test utilisation servomoteur SG90 //

#include <Servo.h>
 
Servo monservo;  // crée l’objet pour contrôler le servomoteur

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup()
{
  pinMode(2, INPUT); // sur le port 2
  digitalWrite(2, HIGH); // impulssion haute
  Serial.begin(115200); // Port série a 115200 baud
   
  Serial.println("Anemometre"); // affichage sur moniteur serie
  Serial.println("**********"); // idem
  Serial.print(" Mesure toutes les secondes : "); //idem
  Serial.println();
  lcd.begin(16,2);
  monservo.attach(9);  // utilise la broche 9 pour le contrôle du servomoteur
}
 
void loop()
{
  Sample++;
  windvelocity();
  RPMcalc();
  WindSpeed();
  Serial.print(speedwind); // afficher le vent sur moniteur serie
  Serial.print(" [km/h] "); // afficher sur miniteur serie
  Serial.println();
delay(1000); // affichage toutes les  vsecondes
  Serial.print(" Mesure suivante... "); // afficher sur moniteur serie
  Serial.println();
   lcd.setCursor(0,0); // affiche sur le première ligne
  lcd.print(speedwind); // afficher le vent sur le lcd
  lcd.print(" [km/h] "); // afficher sur le lcd
  if (speedwind > 50)
  {
     monservo.write(70); // positionne le servomoteur à 70°
    lcd.setCursor(0,9);
    lcd.print("Securite");
  }
  if (speedwind < 50)
  {
    delay(3000);
     monservo.write(35); // positionne le servomoteur à 35°
    lcd.setCursor(0,9);
    lcd.print("                 ");
  
  }
  
}
 
// Mesurer la vitesse du vent
void windvelocity()
{
  speedwind = 0;
  counter = 0; 
  attachInterrupt(0, addcount, CHANGE);
  unsigned long millis();                    
  long startTime = millis();
  while(millis() < startTime + period) {
  }
  detachInterrupt(1);
}
 
void RPMcalc(){
  RPM=((counter/2)*60)/(period/1000);  // Calculer tours par minute (RPM)
}
 
void WindSpeed(){
  speedwind = ((((2 * pi * radio * RPM)/60) / 1000) / 1000) * 3600;  // Calculer la vitesse du vent en km/h
}
//declaration de addcount 
void addcount()
{
  counter++;
}

Merci.

Bonjour

tout est là, Introduction aux algorigrammes reste à faire....excellent exercice scolaire

N.B pour du simple et cours : regrouper dans un seul rectangle les séquences qui ont le même objet

d'accord merci beaucoup pour votre aide je vais faire cela avec ce cours

Si je peux me permettre les commentaires ne sont pas très utiles voir faux

 pinMode(2, INPUT); // sur le port 2

Ce commentaire n'explique rien. Tu devrais dire port 2 en entrée

 pinMode(2, INPUT); // sur le port 2
  digitalWrite(2, HIGH); // impulssion haute

Dans ce cas, le commentaire du digitalWrite est faux. La broche 2 étant configurée en entrée faire un digitalWrite(2, HIGH) ne génère pas une impulsion haute mais active le pullup interne. Au passage, il serait bon de connaitre la différence entre état et impulsion.

Ces 2 lignes pourraient d'ailleurs être remplacées par un

pinMode(2, INPUT_PULLUP); // configure la pin 2 en entrée avec un pullup

qui serait plus clair

Le summum étant

#define PIN_ANEMOMETRE 2
pinMode(PIN_ANEMOMETRE , INPUT_PULLUP); // Connexion anémomètre en entrée avec un pullup

qui serait plus clair

En passant, si vous souhaitez que votre compteur soit partagé entre le fil principal et l'interruption, vous gagneriez à le déclarer en volatile, pour éviter que l'optimiseur ne l'évapore ( ce qui fait gagner de la place mémoire et des cycles); sinon, les resultats peuvent être étranges.