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à, https://troumad.developpez.com/C/algorigrammes/ (https://troumad.developpez.com/C/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.