Go Down

Topic: Bac-Ka-Poux-Bêle 2019 (Read 19985 times) previous topic - next topic

dbrion06

Dejà, vous avez oublié de clore (par des curly brackets) la fonction loop (mettez sous arduino le curseur sur le curly bracket ouvrant de loop() {: il devrait être rouge, ou alors vous avez mal copié collé l'integralité de votre code. J'ai corrigé cette erreur triviale, et je n'ai pas testé plus loin à la compilation; le code résultant est
Code: [Select]
const float SOUND_SPEED = 340.0 / 1000;
const byte TRIGGER_PIN = 2; // Broche TRIGGER
const byte ECHO_PIN = 3; // Broche ECHO
const byte var
const unsigned long MEASURE_TIMEOUT = 50000UL; // 25ms = ~8m à



#include <Servo.h>

Servo monServomoteur;


void setup() {
    // Attache le servomoteur à la broche D9
    monServomoteur.attach(9);

    Serial.begin(9600);


    pinMode(TRIGGER_PIN, OUTPUT);
    digitalWrite(TRIGGER_PIN, LOW);
    pinMode(ECHO_PIN, INPUT);
}

void loop() {


    digitalWrite(TRIGGER_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGGER_PIN, LOW);

    long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);


    float distance_mm = measure / 2.0 * SOUND_SPEED;

    Serial.print(F("Distance: "));
    Serial.print(distance_mm / 1000.0, 2);
    Serial.println(F("m)"));
   delay (500);
    // Fait bouger le bras de 0° à 180°
    for (unsigned long position = 1000; position <= 2000; position += 5)
        monServomoteur.writeMicroseconds(position);
    delay(1230);
    // Fait bouger le bras de 180° à 10°
    for (unsigned long position = 2000; position >= 1000; position -= 5)
        monServomoteur.writeMicroseconds(position);
    delay(1230);
    switch (var) {
    case 1:
        Serial.print ("Distance" >=0.1"m");

        (unsigned long position = 1000; position <= 2000; position += 5)
        monServomoteur.writeMicroseconds(position);
        delay(1230);
        break;
    case 2:
        Serial.print ("Distance" >=0.1"m");
        (unsigned long position = 2000; position >= 1000; position -= 5)
        monServomoteur.writeMicroseconds(position);
        delay(1230);
        break;
    }
}

 


Je ai aussi passé votre code dans astyle (rend un peu plus beau: comme le formattage automatique d'Arduino, qui peut faire voir des horreurs).

Si votre code ne compile pas, essayez de copier coller la première erreur (et normalement, le curseur va à la première ligne erronée qui se colorie en rose)

AdrienBarbin

Bonjour, j'ai deux capteurs que j'ai acheté et je souhaite les brancher ensemble afin qu'ils mesurent tous les deux des valeurs:

capteur anémomètre :
https://www.lextronic.fr/temperature-meteo/19999-capteur-anenometre.html
(j'ai utilisé le branchement numéro 2)


capteur girouette:
https://www.gotronic.fr/art-capteur-girouette-25973.htm


[ Code]

#include <math.h>

#define WindSensorPin (2) // Location de la broche en D2

volatile unsigned long Rotations; // cup rotation counter used in interrupt routine
volatile unsigned long ContactBounceTime; // Timer to avoid contact bounce in interrupt routine

float WindSpeed; // kilomètres par heure

void setup() {
  Serial.begin(9600);

  pinMode(WindSensorPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING);
}



void loop() {

  Rotations = 0; // Set Rotations count to 0 ready for calculations

  sei(); // Enables interrupts
  delay (5000); // attendre 5 secondes
  cli(); // Disable interrupts

  // convert to mp/h using the formula V=P(2.25/T)
  // V = P(2.25/3) =( P * 0.75 ) * 1.61 (*1.61> conversion mph en km/h)(1 mile = 1.61km)

  WindSpeed = (Rotations * 0.75) * 1.61 ;

  int sensorValue = analogRead(A1);
  Serial.println("Test Vitesse du vent");
  Serial.println("Rotations\tkm/h");
  Serial.println(" ");
  Serial.print(Rotations); Serial.print("\t\t");
  Serial.println(WindSpeed);
  Serial.println(" ");
  delay(5000);
  Serial.println("Direction du vent");
  Serial.println(sensorValue);
  Serial.println(" ");
  //float angle= 0.1569280069*sensorValue+96.9848608491;  (équation trouvée par le tableur)
  //Serial.println(angle);



}

// This is the function that the interrupt calls to increment the rotation count
void isr_rotation () {

  if ((millis() - ContactBounceTime) > 15 ) { // debounce the switch contact.
    Rotations++;
    ContactBounceTime = millis();
  }

}[ /Code]

Le problème étant que lorsque j'utilise le moniteur de série, seul la girouette m'affiche les valeurs correctes relevée par celle-ci. J'ai aussi rajouté le programme de l'anémomètre juste au dessus, le moniteur série m'indique constamment 0, alors qu'il marchait très bien séparément.
Je souhaiterais comprendre mes erreurs/avoir des corrections.
Cordialement,

pomme-poire

0x0.75x1.61 = 0
mais tu vas te faire engueuler....

xXlouisXx

Bonjour je suis élève de STI2D SIN et j'aurais besoin d'un programme pour remettre a zéro mon codeur  incrémentale (car celui ci n'en n'a pas ) une fois qu'un capteur fin de course est activé. j'ai déjà fait un programme pour le codeur que voici :


#define pin 4
int res_codeur=6335;
float angle;
byte etat;
void setup() {
  pinMode(9,INPUT);
  pinMode(10,INPUT);
  attachInterrupt(0,calculangle,RISING); //l'interruption stoppe momentanément les travaux de la boucle loop pour effectuer le calcul de l'angle
Serial.begin(9600);
}

void calculangle()
{

  etat=digitalRead(3);
 
 if(etat==1)
 {
  angle=angle+0.05;
 }
 else
 {
  angle=angle-0.05;
 }
 if
 {
  interrupteur=1
  }
 }
 
void loop() {
Serial.print("etat");
  Serial.println(etat);
  Serial.println(angle);
}

lesept

Crée un fil de discussion séparé pour ton problème afin de ne pas mélanger les réponses, sinon on n'y comprendra rien très rapidement. Demande au modérateur (bouton 'report to moderator' en bas de ton message)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

#35
Mar 12, 2019, 12:25 pm Last Edit: Mar 12, 2019, 12:25 pm by lesept
Non, la variable Rotations est incrémentée dans la routine d'interruption : si le programme y rentre la valeur devrait augmenter.

Ici, tu n'as pas besoin des parenthèses, mais ça ne doit pas changer grand chose :
Code: [Select]
#define WindSensorPin (2)

Tu devrais ôter le second delay(5000), celui dans les instructions d'affichage.

Où as-tu trouvé le code ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dbrion06

mais tu vas te faire engueuler....
Parce qu'il a mis une majuscule à Code?

pomme-poire

#37
Mar 12, 2019, 01:24 pm Last Edit: Mar 12, 2019, 01:37 pm by pomme-poire
oui pour les deux
donne voir ton schéma électrique ?

al1fch

#38
Mar 12, 2019, 01:49 pm Last Edit: Mar 12, 2019, 01:54 pm by al1fch
et aussi pour le code posté en vrac dans le corps du message , sans balises correctement utilisées
c'est un truc à finir au bakapoupel :(

AdrienBarbin arrive, est-ce trop demander que de l'inviter à bien lire les consignes et s'assurer que le balisage a produit son effet. ?

dbrion06

C'est une Minuscule erreur

pomme-poire

je me disais que ça allait tomber.....

al1fch

#41
Mar 12, 2019, 04:10 pm Last Edit: Mar 12, 2019, 04:22 pm by al1fch
erreur facile à corriger avec un peu de bonne volonté
Il faut être pragmatique , cette précaution augmente le nombre de lecteurs ... et les chances de réponses .
cf "Bien éditer son post pour les nuls"

C'est de plus la 6e règle du Forum

Quote
Je souhaiterais comprendre mes erreurs/avoir des corrections.
Quand on écrit cela, il vaut mieux éviter se se mettre un handicap en réduisant les possibilités de réponses

AMADOU5

bonjour

j'ai un problème a réaliser un code qui permet de déclencher arrosage a travers un smartphone.

voila le code qui permet de connaitre l'etat du sol a travers gsm .

#include <SoftwareSerial.h>

SoftwareSerial mySerial(7, 8);

//int activer = 1; // ordre d'envoyer SMS

int val;

int l=13;

int i=0;

int secCount = 0;

int humideCount = 0;

int tropHumideCount = 0;

const int MAX_SMS_SENT = 2;

void setup()

{

   pinMode(13, OUTPUT);

    mySerial.begin(19200);             

    Serial.begin(19200);   

    delay(500);

   

}

void loop()

{

   val=analogRead(A0);

   String etat;

    Serial.print ("valeur est:");

  Serial.println(val);

  delay(100);

  if (val <=400){

    etat="sec";

 

    while(secCount < MAX_SMS_SENT){

     Serial.print ("\n secCount est : ");

     Serial.println(secCount);

 

     digitalWrite(13,HIGH);

    //Pour envoyer un sms sous forme de texte

       mySerial.print("AT+CMGF=1\r");   

       delay(100);

       //Numero de telephone du destinataire

       mySerial.println("AT + CMGS = \"numero\"");

       delay(100);

       mySerial.println("Alerte le sol est sec: ");

       delay(100);

       mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)

       delay(100);

       mySerial.println("c'est fait.");

       secCount++;

      } 

    } 

    if(val>400 && val<700){

     

       etat="humide";

   

    while(humideCount < MAX_SMS_SENT){

     Serial.print ("\n humideCount est : ");

     Serial.println(humideCount);

 

     digitalWrite(13,HIGH);

    //Pour envoyer un sms sous forme de texte

       mySerial.print("AT+CMGF=1\r");   

       delay(100);

       //Numero de telephone du destinataire

       mySerial.println("AT + CMGS = \"numero\"");

       delay(100);

       mySerial.println("Alerte le sol est humide: ");

       delay(100);

       mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)

       delay(100);

       mySerial.println("c'est fait.");

       humideCount++;

      } 

     

       digitalWrite(13,LOW);

   

       Serial.print("sol est");

       Serial. println(etat);

    }

   

    if(val >700){

      etat="trop";

    while(tropHumideCount < MAX_SMS_SENT){

     Serial.print ("\n tropHumideCount est : ");

     Serial.println(tropHumideCount);

 

     digitalWrite(13,HIGH);

    //Pour envoyer un sms sous forme de texte

       mySerial.print("AT+CMGF=1\r");   

       delay(100);

       //Numero de telephone du destinataire

       mySerial.println("AT + CMGS = \"numero \"");

       delay(100);

       mySerial.println("Alerte le sol est trop humide: ");

       delay(100);

       mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)

       delay(100);

       mySerial.println("c'est fait.");

       tropHumideCount++;

      } 

     

      digitalWrite(13,LOW);

   

      Serial.print("sol est");

      Serial. println(etat);

    }

  delay(1000);

 }

je voudrais ajouter le code qui permet de déclencher l'arrosager via gsm

Wilfried17

Bonjour,

Pour mon premier projet sur arduino je souhaite afficher la valeur d'un potentiomètre sur un lcd 16*2 en pourcentage ( 0 à 1024 en 0 à 100%). le but par la suite et de contrôler un esc en PWM. Donc la valeur récupérer du potentiomètre serait la puissance moteur.   

voici le code de base que j'ai pour afficher un message sur mon lcd:

//Library version:1.1 arduino_499745
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
  pinMode(A0,INPUT);
i  lcd.init();                      // initialize the lcd
  lcd.backlight();
  lcd.setCursor(12, 0);
  lcdprint("100%");
}
void lcdprint(String s) {
  for (int  i = 0; i < s.length(); i++)  lcd.print(s);

}
void loop()
{
}

Le problème et que je ne sais pas comment coder pour indiquer au lcd de prendre une valeur x varient entre 0 et 1023 et le convertir en pourcentage.

Merci.  :)

haydersaid

y'a-t-il la possibilité de communiquer Applicatio arduino avec une base de données ?

Go Up