Go Down

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

jfs

#255
Apr 18, 2019, 07:12 am Last Edit: Apr 18, 2019, 07:14 am by jfs
Il faut mettre le code en balise code sinon il apparait mal formaté voir ici rapidement
Code: [Select]
#include <boarddefs.h> // Utilisation des bibliothèques
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

//A utiliser pour récuperer le code envoyé par la telecomande

//Création des variables
int RECV_PIN = 3; // Connectée sur l'entrée digitale 3
int DIR1_PIN = 7; // Connectée sur l'entrée digitale 7
int VIT1_PIN = 6; // Connectée sur l'entrée digitale 6
int DIR2_PIN = 4; // Connectée sur l'entrée digitale 4
int VIT2_PIN = 5; // Connectée sur l'entrée digitale 5
int BOUT1_PIN = 10; // Connectée sur l'entrée digitale 10
int BOUT2_PIN = 11; // Connectée sur l'entrée digitale 11

IRrecv irrecv(RECV_PIN); // Récéption des ondes Infrarouges

decode_results results; // Décoder ce que la télécommande envoie

void setup() // Action effectuée une seule fois
{
  Serial.begin(9600); // Démarrer une liaison série avec l'ordinateur
  irrecv.enableIRIn(); // Démarrer le receveur
  pinMode(DIR1_PIN, OUTPUT);  // Définit la broche numérique DIR1 comme sortie
  pinMode(VIT1_PIN, OUTPUT);  // Définit la broche numérique VIT1 comme sortie
  pinMode(DIR2_PIN, OUTPUT);  // Définit la broche numérique DIR2 comme sortie
  pinMode(VIT2_PIN, OUTPUT);  // Définit la broche numérique VIT2 comme sortie
  pinMode(BOUT1_PIN, INPUT);  // Définit la broche numérique BOUT1 comme entrée
  pinMode(BOUT2_PIN, INPUT);  // Définit la broche numérique BOUT2 comme entrée
}

void loop() // Action répétée à l'infini
{ results.value=0; // Resultat = 0
  Serial.println (digitalRead (BOUT1_PIN)); // Afficher sur le moniteur série si il y a du courant sur le PIN 10
  irrecv.decode(&results); // Stocker le message envoyé par la télécommande
  irrecv.resume(); // Relancement de la lecture
  
if(results.value == 0XCC36FF5F){ // Avancer; Si le resultat de la touche de la télécommande correspond à celui indiquer
  avance(1,255); // Marche avant
  Serial.println("Avancer"); // Afficher dans le moniteur série "Avancer"
}
if(results.value == 0XCC1C9F5B){// Eteindre; Si le resultat de la touche de la télécommande correspond à celui indiquer
  avance(0,0); // Eteint
  Serial.println("Eteindre"); // Afficher dans le moniteur série "Eteindre"
}
if(results.value == 0X989D243A ){ // Reculer; Si le resultat de la touche de la télécommande correspond à celui indiquer
  avance(0,255); // Reculer
 
  Serial.println("Reculer"); // Afficher dans le moniteur série "Reculer"
}
  delay(100); // Délai de 100ms
if(digitalRead(BOUT1_PIN) == 1){ // Si le bouton 1 est actionné
  avance(0,0); // Eteint
}
if(digitalRead(BOUT2_PIN) == 1){ // Si le bouton 2 est actionné
  avance(0,0); // Eteint
}
}

void avance(int sens, int vitesse) // Partie moteur
{
  digitalWrite(DIR1_PIN, sens);
  analogWrite(VIT1_PIN, vitesse);
  digitalWrite(DIR2_PIN, sens);
  analogWrite(VIT2_PIN, vitesse);
}

Trop tard....
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

Kevin2001


Mary779

if (debutAppui != 0 && millis() - debutAppui = 5000)

-->
if (debutAppui != 0 && millis() - debutAppui >= 5000)
Quand je met >= la lampe reste à 1 mais c'est ce que je veux

J-M-L

#258
Apr 18, 2019, 02:03 pm Last Edit: Apr 18, 2019, 02:05 pm by J-M-L
S'il vous plaît votre aide
Mary - votre post a été mis dans la poubelle du bar...

lisez comment utiliser le forum (les posts épinglés en haut du forum comme "Bien éditer son post pour les nuls" , "Faire un Nouveau Sujet ou le corriger avec les Balises..." et "Règles du forum francophone"), et refaites un post "propre" dans la bonne section
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Mary779

C'est vraiment ce programme que tu exécutes? car il y a plusieurs erreur de compilation dus à des majuscules intempestives.
Salut , concernant le programme la lampe reste à 1 pr toujours (>=5000) . comment je peux la mettre à 0 ? S'il vous plaît votre aide

J-M-L

#260
Apr 18, 2019, 02:37 pm Last Edit: Apr 18, 2019, 02:38 pm by J-M-L
Salut , concernant le programme la lampe reste à 1 pr toujours (>=5000) . comment je peux la mettre à 0 ? S'il vous plaît votre aide

AGAIN...


Mary - votre post a été mis dans la poubelle du bar...

lisez comment utiliser le forum (les posts épinglés en haut du forum comme "Bien éditer son post pour les nuls" , "Faire un Nouveau Sujet ou le corriger avec les Balises..." et "Règles du forum francophone"), et refaites un post "propre" dans la bonne section
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

vtec35

bonjour, tout le monde sur un code maison (pas un copier coller du net), j ai cette erreur qui est apparu soudainement, et qui apparait sur les anciennes versions egalement, du coup je ne comprend pas


merci de votre aide

Mary779

#262
Apr 18, 2019, 03:01 pm Last Edit: Apr 18, 2019, 03:09 pm by Mary779
Code: [Select]
static byte capteurPrecedent = LOW;
static unsigned long debutAppui;
Void setup(){

pinMode(4,INPUT);
pinMode(6,OUTPUT);

void loop(){

byte capteur = digitalRead(4);
if (capteur !=capteurPrecedent){
if (capteur == HIGH)
 {debutAppui = millis(); }
else{ debutAppui = 0;}
CapteurPrecedent = capteur;
delay(20);
}
 if (debutAppui != 0 ; millis() - debutAppui>= 5000)

{DigitalWrite(6,HIGH);}


Salut , concernant le programme en haut la lampe reste à 1 pr toujours car on a
Code: [Select]
millis()-debutAppui>=5000
 . comment je peux la mettre à 0 ?

sachant que j'ai testé
Code: [Select]
else{debutAppui=0 ; digitalWrite(6,LOW);}

s'il vous plaît votre aide

dbrion06

debutAppui=millis() ;

hbachetti

La première ligne de ton sketch comporte un caractère invisible.

Après 160 posts, balancer une copie d'écran c'est un peu gonflé, surtout aussi illisible.

Tu n'as pas remarqué le bouton "Recopier les messages d'erreur" en bas à droite de l'IDE ?

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Mary779

Code: [Select]


static byte capteurPrecedent = LOW;
static unsigned long debutAppui;

void setup(){
  pinMode(4,INPUT);
  pinMode(6,OUTPUT);
}

void loop(){

  byte capteur = digitalRead(4);
  if (capteur != capteurPrecedent)
  {
    if (capteur == HIGH)
    {
      debutAppui = millis();
    }
    else
    {
      debutAppui = 0;
    }
    CapteurPrecedent = capteur;
    delay(20);             
  }
  if (debutAppui != 0 && millis() - debutAppui> = 5000)
  {
    DigitalWrite(6,HIGH);}

  }


concernant le programme en haut la lampe reste à 1 pr toujours car on a
Code: [Select]
millis()-debutAppui>=5000


comment je peux la mettre à 0 ?  sachant que j'ai testé 
Code: [Select]
else{debutAppui=0 ; digitalWrite(6,LOW);}



Qmon

#266
Apr 18, 2019, 05:47 pm Last Edit: Apr 19, 2019, 09:02 am by Qmon
Bonjour à toutes et tous,

Je rencontre un problème avec le pilotage de mon moteur pas à pas.

J'essaye de piloter un moteur NEMA23 ref 57HS76-3004A08 que j'ai préalablement branché à un driver TB6600.

J'utilise Visual Studio avec quoi j'ai fait une fenêtre graphique pour rentrer manuellement la vitesse à laquelle je souhaite que mon moteur tourne.

Je rentre donc ma condition de vitesse "RPM" sur ma fenêtre de pilotage et en backoffice, je transforme cette condition en millisecondes pour envoyer cette commande au programme d'arduino qui sera mon délai entre chaque phase.

Je fais donc le calcul suivant : Durée imp = (60 * 1000) / (RPM*200)
où 60 est la conversion de trs/min en trs/sec
1000 est la conversion de secondes en millisecondes
200 est la résolution de mon moteur (data sheet donne 1,8° step angle donc pour 1 tour ca donne 200 pas par tour)

Pour par exemple une condition de 60 trs/min, le calcul donne 5 millisecondes, valeur que je renvoi à mon programme arduino.

Dans mon programme arduino, je pilote le moteur de la méthode suivante :
Code: [Select]

const int ENA = 5;
const int DIR = 6;
const int PUL = 7;  

String recu, motorState = "OFF", stepState = "Full step", wiseState = "Anti Clockwise", speedState = "0.00";
String message;
int duree = 0;  // Durée d'un pas
bool doitTourner = false;
bool affVitesse = false;
int resolution = 200;
float N=0;

void setup()
{
 Serial.begin(250000);    //Serial Monitor
 pinMode(PUL, OUTPUT);
 pinMode(DIR, OUTPUT);
 pinMode(ENA, OUTPUT);

 // Initialisation
 digitalWrite(ENA, LOW);
 digitalWrite(DIR, LOW);
 digitalWrite(PUL,HIGH);
}

void loop()
{
 // Si on recoit quelque chose, sinon on rien
 if (Serial.available() > 0)
 {
   recu = Serial.readStringUntil('\n');
   if (recu == "STATUS")
   {
     // Réglages actuels
     message = motorState + ";" + wiseState + ";" + stepState + ";" + speedState + ";";
     Serial.println(message);
   }
   else // Protocol
   {
     switch (recu[0])
     {
       // Réglage de la demi période du signal step
       case '0' :
       case '1' :
       case '2' :
       case '3' :
       case '4' :
       case '5' :
       case '6' :
       case '7' :
       case '8' :
       case '9' :  duree = recu.toInt();
                   affVitesse = true;
                   break;
       
       // Demande de mise en Marche
       case 'M' :  digitalWrite(ENA, HIGH);
                   motorState = "ON";
                   doitTourner = true;
                   affVitesse = true;
                   break;
     
       // Demande Stop moteur
       case 'S' :  digitalWrite(ENA, LOW);
                   motorState = "OFF";
                   affVitesse = false;
                   doitTourner = false;
                   break;
       // Demande sens de rotation Anti horaire
       case 'A' :  digitalWrite(DIR, HIGH);
                   wiseState = "Anti Clockwise";
                   //Serial.println(wiseState);
                   break;
       
       // Demande sens rotation horaire (Reverse)
       case 'R' :  digitalWrite(DIR, LOW);
                   wiseState = "Clockwise";
                   //Serial.println(wiseState);
                   break;
       
       // Demande Vitesse +
       case '+' :  duree = duree - 1;
                   break;
       
       // Demande Vitesse -
       case '-' :  duree = duree + 1;
                   break;
       
       // Demande résolution
       case 'F' : // Full step
                   //digitalWrite(ms3Pin, LOW);
                  // digitalWrite(ms2Pin, LOW);
                  // digitalWrite(ms1Pin, LOW);
                   resolution = 200; //200 pas par tour, step angle = 1,8°
                   stepState = "Full step";
                   break;
                   
     // Témoin transmission de données
     delay(100);

     // Calcul vitesse de rotation (car je le renvoi pour l'afficher sur ma fenetre de visual studio)
     if (affVitesse)
     {
       N = (60*1000) / (duree*resolution);
     }
     else
     {
       N = 0;
     }
     speedState = String(N);
     
     // Préparation du message
     message = motorState + ";" + wiseState + ";" + stepState + ";" + speedState + ";";

     // Transmission du message
     Serial.println(message);
   }
 }
 // Faire tourner le moteur
 if (doitTourner)
 {
   tourne(duree);
 }
 else digitalWrite(PUL, LOW);
}

void tourne(int d)
{
 digitalWrite(PUL, LOW);
 delayMicroseconds(d);
 digitalWrite(PUL, HIGH);
 delayMicroseconds(d);
}


Malheureusement, quand je lance le démarrage du moteur avec la condition de 60 tours/min qui n'est pas une vitesse trop lente ni trop rapide, le moteur ronronne mais ne tourne pas...

Mes calculs me semblent juste, je me demande donc si ma fonction et ma méthode de pilotage du moteur grâce au délai entre chaque phase est judicieuse...

Merci par avance pour votre retour et votre aide.

Arduinonement.

J-M-L

#267
Apr 18, 2019, 08:02 pm Last Edit: Apr 18, 2019, 08:03 pm by J-M-L
bla bla bla
MARY VOUS N'ECOUTEZ PAS CE QU'ON VOUS DIT... BYE
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

J-M-L

lisez comment utiliser le forum (les posts épinglés en haut du forum comme "Bien éditer son post pour les nuls" , "Faire un Nouveau Sujet ou le corriger avec les Balises..." et "Règles du forum francophone"), et faites un post "propre"
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

touftouf

C'est pas une variable différente par caractère qu'il te faut c'est une variable qui contienne la valeur numérique représentée par chaque groupe de caractère.

Il faudrait déjà savoir comment tu récupères lesdites informations pour savoir comment les traiter.
Poste déjà ton code qui récupère les données après on verra.
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
String signal = "$GPGLL";
void setup() {
    // initialize serial:
    Serial.begin(9600);
    // reserve 200 bytes for the inputString:
    inputString.reserve(200);
}

void loop() {
    // print the string when a newline arrives:
    if (stringComplete) {
        String BB = inputString.substring(0, 6);
        if (BB == signal) {
            String LAT = inputString.substring(7, 17);
            int LATperiod = LAT.indexOf('.');
            int LATzero = LAT.indexOf('0');
            if (LATzero == 0) {
                LAT = LAT.substring(1);
            }

            String LON = inputString.substring(20, 31);
            int LONperiod = LON.indexOf('.');
            int LONTzero = LON.indexOf('0');
            if (LONTzero == 0) {
                LON = LON.substring(1);
            }

            Serial.println(LAT);
            Serial.println(LON);

        }

        // Serial.println(inputString);
        // clear the string:
        inputString = "";
        stringComplete = false;
    }
}

/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/
void serialEvent() {
    while (Serial.available()) {
        // get the new byte:
        char inChar = (char) Serial.read();
        // add it to the inputString:
        inputString += inChar;
        // if the incoming character is a newline, set a flag
        // so the main loop can do something about it:
        if (inChar == '\n') {
            stringComplete = true;
        }
    }
}



C'est ça le code. Derien

Go Up