Aller au contenu


Photo
- - - - -

Gestion de vitesse sans while avec millis()

vitesse millis() arduino

  • Veuillez vous connecter pour répondre
18 réponses à ce sujet

#1 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 25 juin 2018 - 05:43

Plop les maker's, bon ben quiche un jour quiche toujours, voilà, j'arrive donc à gérer la vitesse de mes servomoteurs avec la boucle while et millis(), le truc, c'est que cela s'execute servo par servo et non tout en même temps, normal, le while bloquant le code ça le fait pas, je post donc mon code espérant un peu plus de vos lumières les gars ^^

 

Je colle le principal hein, si ils vous manquent quelque chose je le rajouterai.

 

Dans les grandes lignes, le temps s'écoule avec millis() et j'essaye de gérer ma vitesse en donnant une position à atteindre et le temps nécessaire pour y arriver.

Arduino com (main)

// J'ai viré la partie E-paper pour que cela soit plus "lisible"
#include "TimerOne.h"

//Lib pour la communication entre la Pi et Arduino
//-----GcomA
#include "GcomA.h"
//-----end GcomA

//-----VL53L0x
#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;
unsigned int readVl5310x;
//-----end VL53L0x

Servo servo0(0);
Servo servo1(1);
Servo servo2(2);// je ne me sers que de celui ci pour tester

void setup(){
  
  Serial.begin (115200);
  Serial1.begin(115200);  //Convertisseur logique
  Serial2.begin(115200);  //Driver Pololu Maestro

  servoZero(); //On initialise les servo à 0

//-----Timer
Timer1.initialize(1000);            
Timer1.attachInterrupt(timerIsr);
//-----end Timer   //-----VL53L0x  
Wire.begin();  
sensor.init();  
sensor.setTimeout(300);  
sensor.startContinuous(0);
//Continuous
//sensor.setMeasurementTimingBudget(600000);
// 200 ms  Single
//-----end VL53L0x
}
void loop()
{   
//-----VL53L0x  
readVl5310x = sensor.readRangeContinuousMillimeters();     
if (sensor.timeoutOccurred())  
{    
Serial.print(" TIMEOUT");  
}
//-----  
arduinoReceive();  
servo2.updateServo();    
}

void timerIsr()
{
  servo2.moveServo();}  

Arduino GcomA.cpp (ouais je n'ai pas encore séparé la partie servomoteur de la communication)

Donc une partie du code, la partie de mon problème.

#include <Arduino.h>#include "GcomA.h"
//#include "TimerOne.h"

//-----Driver Maestro Pololu
#include <PololuMaestro.h>

MiniMaestro maestro(Serial2);
//-----

#define NB_SERVO 5

/*
 * DMIN Degré minimum du servo
 * DMAX Degré maximum du servo
 * IMIN Impulsion minimum du servo
 * IMAX Impulsion maximum du servo
 */

//Servo HV5932 - 1984 - 9984

//Tête
#define DMIN0 -90
#define DMAX0 90
#define IMIN0 1920
#define IMAX0 9500
#define DMIN1 -90
#define DMAX1 90
#define IMIN1 1920
#define IMAX1 9500

#define DMIN2 -90
#define DMAX2 90
#define IMIN2 1920
#define IMAX2 9500
#define DMIN3 -90 
#define DMAX3 90
#define IMIN3 1920
#define IMAX3 9500
#define DMIN4 -90 
#define DMAX4 90 
#define IMIN4 1920
#define IMAX4 9500

//Structure pour l'affichage sur E-PAPER
struct S_EPAPER
{
  char ms_msg[20];
};

//Structure pour l'émission de données vers la PI
struct S_PI
{
  int ms_roll;               //2 octet/bytes (16 bits) : -32 768 / +32 767
  int ms_pitch;              //2 octet/bytes (16 bits) : -32 768 / +32 767
  int ms_yaw;                //2 octet/bytes (16 bits) : -32 768 / +32 767
  unsigned int ms_boussole;  //2 octet/bytes (8 bits)  : 0 / 65 535
  unsigned int ms_vl53l0x;   //2 octet/bytes (8 bits)  : 0 / 65 535  
};

//Structure pour la récepetion des données des servomoteurs venant de la pi, ça transit ici.
struct S_SERVO
{
  unsigned int ms_servo;
  unsigned int ms_time;       //2 octet/bytes (8 bits)  : 0 / 65 535
  int ms_cible;                  //2 octet/bytes (16 bits) : -32 768 / +32 767
  
};  

//On copie ici ce que l'on a reçu de la pi avec une imbrication de structure, Mike me dis pas que c'est pas bien sinon ça va gueuler PTDR (humour)
//On retrouve donc toutes les infos min et max en degrés et en impulsion et on rajoute pour chaque servo les infos venant de la Pi.
struct S_SERVODATA
{
  int ms_Dmin;          //Degré minimum du servo
  int ms_Dmax;          //Degré maximum du servo
  unsigned int ms_Imin; //Impulsion minimum du servo
  unsigned int ms_Imax; //Impulsion maximum du servo
  int ms_posInitiale;   //Position initiale du servo
  int ms_posFinale;     //Position finale du servo
  
  //Imbrication de structure
  S_SERVO s_servoInfo;  //Infos du servo envoyé par la PI et copié dans la structure adéquat s_servoInfo 
                        
};

//Union pour envoyer nos types struct dans un tableau unsigned char
union U_DATA
{
  S_PI s_pi;
  S_SERVO s_servo[NB_SERVO];
  S_EPAPER s_epaper;
  
  //L'envoie et la réception sont dans des tableaux
  //(sizeof) permet de récupérer la taille en byte de nos structures
  unsigned char cast_servo[sizeof s_servo];
  unsigned char cast_pi[sizeof s_pi];
  unsigned char cast_epaper[sizeof s_epaper];

}u_servo, u_pi, u_buf, u_epaper;


//incomingByte & incomingEpaper initialisée pour tester l'entrée de données
int incomingByte = 0; 
int incomingEpaper = 0;

int rollData = 0;
int pitchData = 0;
int yawData = 0;
unsigned int boussoleData = 0;

//byte j = 0;
//On initialise chaque servo avec ces données respectives 
S_SERVODATA s_servoData[NB_SERVO] = {{DMIN0, DMAX0, IMIN0, IMAX0, 0, 0}
                                    ,{DMIN1, DMAX1, IMIN1, IMAX1, 0, 0}
                                    ,{DMIN2, DMAX2, IMIN2, IMAX2, 0, 0}
                                    ,{DMIN3, DMAX3, IMIN3, IMAX3, 0, 0}
                                    ,{DMIN4, DMAX4, IMIN4, IMAX4, 0, 0}}; 
                                
//-----

unsigned long timeReference = 0;
unsigned long timeServoFinal = 0;

//-----Timer
Timer1.initialize(1000); // set a timer of length 1000 microseconds = 1 ms - or 1000Hz
Timer1.attachInterrupt( timerIsr );
//-----end Timer

//-----On envoie les données des capteurs à la Pi
void arduinoSend(unsigned int readVl5310x){
  
  unsigned int waitingTime = 100;  // 0.100 secondes
  unsigned long refTime = 0;

  u_pi.s_pi.ms_vl53l0x = readVl5310x;

  Serial1.write (u_pi.cast_pi, sizeof u_buf.cast_pi);

  //Gestion de temps waitingTime en ms
  refTime = millis();
  //Début de l'attente : 
  while((millis()-refTime)<waitingTime){
    //attend
  }

}

//On recoit les données de la Pi
void arduinoReceive() {
        
  if (Serial1.available() == sizeof u_servo.cast_servo)
  {
    incomingByte = Serial1.readBytes (u_servo.cast_servo, sizeof u_servo.cast_servo);
    
    for (byte i = 0; i < NB_SERVO; i++) 
    {
      s_servoData[i].s_servoInfo = u_servo.s_servo[i];     
    }
  } 
}

Servo::Servo(byte servo)
{
  i = servo; // <--------------il est là le i pour la class  ^^
} 

void Servo::setTime() //j'ai l'impression que cette fonction ne sert à rien en fait
{
  previousTime = 0;//millis();
  lastUpdate = 0;
}
  
void Servo::moveServo()
{

  if ((millis()-timeReference) < s_servoData[i].s_servoInfo.ms_time)
  {
    deltaTime = millis(); 
    deltaPosition = map(deltaTime, timeReference, timeServoFinal, 
                                      s_servoData[i].ms_posInitiale, 
                                      s_servoData[i].s_servoInfo.ms_cible);//s_servoData[i].ms_posFinale);
  
    angle = map(deltaPosition, s_servoData[i].ms_Dmin, 
                               s_servoData[i].ms_Dmax,
                               s_servoData[i].ms_Imin,
                               s_servoData[i].ms_Imax);

    maestro.setTarget(s_servoData[i].s_servoInfo.ms_servo, angle);

  }

  else
  {
    angle = map(s_servoData[i].s_servoInfo.ms_cible, 
                               s_servoData[i].ms_Dmin, 
                               s_servoData[i].ms_Dmax,
                               s_servoData[i].ms_Imin,
                               s_servoData[i].ms_Imax);


    maestro.setTarget(s_servoData[i].s_servoInfo.ms_servo, angle);
                               
  }

  s_servoData[i].ms_posInitiale = u_servo.s_servo[i].ms_cible;
  
}

void Servo::updateServo()
{
  if (u_servo.s_servo[i].ms_servo == u_servo.s_servo[i].ms_cible)
  {
    Serial.println (":: Si la position est la même, ne fais rien.... ::");
  }
  else
  {
    s_servoData[i].ms_posInitiale = u_servo.s_servo[i].ms_cible;
    u_servo.s_servo[i].ms_cible = u_servo.s_servo[i].ms_servo; //position_commande;
    timeReference = millis();
    timeServoFinal = timeReference + s_servoData[i].s_servoInfo.ms_time;
      
  }
  
}
/*
void Servo::timerIsr()
{
  moveServo();
}
*/
void servoZero ()
{
  for (int i = 0; i < NB_SERVO; i++)
  {
    maestro.setTarget(i, 5952);
  }
  
}
Voili voilou, j'en vois certains d'ici qui vont faire des bonds  lol
 
Edit : j'ai pas compris, j'ai rajouté le début de la class et cela à mit le code en l'air à l'affichage, bref.

signature_01.png -->

 

Mon Tipeee
 


#2 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 25 juin 2018 - 06:06

Salut !
Tu peux utiliser la lib simpletimer qui te permet d'exécuter une action au bout d'un certain temps, ou exécuter une action périodiquement, le tout de façon non bloquante. Par contre ça utilise les interruptions timers, Et c'est possible que certaines pins ne puissent plus contrôler de servo en l'utilisant.

#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 25 juin 2018 - 06:11

Tu peux séparer les différents morceaux de codes par contre il faut faire en sorte que le morceau que tu passes " compile de lui même " ... C'est un peu plus pratique, là je ne vois pas comment ton code peut compiler avec ces i pas défini et tout ... Mais bon je vais te poster un code qui te montre comment utiliser le timer comme je te l'expliquait  ...


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 25 juin 2018 - 06:20

#include <TimerOne.h> // Pour le timer

Servo servo2(2);

uint32_t timeReference = 0;
uint32_t timeServoFinal = 0;


void setup() {

  // Timer
  Timer1.initialize(1000);            // set a timer of length 1000 microseconds = 1 ms - or 1000Hz
  Timer1.attachInterrupt( timerIsr );

}

void loop() {
  
  arduinoReceive(); //On reçoit les données de la pi via cette fonction
  servo2.updateServo(); //On met à jour le servo concerné via cette fonction

}



void Servo::setTime()
{
  previousTime = 0;

}

//On bouge notre servo
void Servo::moveServo()
{
  
  if((millis()-timeReference) < s_servoData[i].s_servoInfo.ms_time)
  {
    deltaTime = millis(); 
    //On gère la vitesse avec se map, via le deltaTime (millis) réactualisé tant que la boucle n'a pas atteint le temps nécessaire.
    deltaPosition = map(deltaTime, timeReference, timeServoFinal, 
                                      s_servoData[i].ms_posInitiale, 
                                      s_servoData[i].s_servoInfo.ms_cible);
  
    angle = map(deltaPosition, s_servoData[i].ms_Dmin, 
                               s_servoData[i].ms_Dmax,
                               s_servoData[i].ms_Imin,
                               s_servoData[i].ms_Imax);

    maestro.setTarget(s_servoData[i].s_servoInfo.ms_servo, angle);
    
  }
  else {
    angle = map(s_servoData[i].s_servoInfo.ms_cible, s_servoData[i].ms_Dmin, 
                                                     s_servoData[i].ms_Dmax,
                                                     s_servoData[i].ms_Imin,
                                                     s_servoData[i].ms_Imax);
    maestro.setTarget(s_servoData[i].s_servoInfo.ms_servo, angle);
  }
  
}

void Servo::updateServo()
{
  if ( position_commande == u_servo.s_servo[i].ms_cible)
  {
    Serial.println (":: Si la position est la même, ne fais rien.... ::");//Là ça fonctionne, mais j'ai un truc qui me plait pas, bref ^^
  }
  else
  {
    s_servoData[i].ms_posInitiale = u_servo.s_servo[i].ms_cible;
    u_servo.s_servo[i].ms_cible = position_commande;
    timeReference = millis();
    timeServoFinal = timeReference + s_servoData[i].s_servoInfo.ms_time;
  }
}

void timerIsr()
{
 servo.moveServo();
}

Bon tout ça ça ne compile pas vu que les i ne sont pas gérés etc... Mais j'ai copié ta notation pour que tu ne sois pas trop perdu ... 

le but c'est que le " updateServo " ne fasse pas bouger le servo mais que mettre à jour les consigne et les points de départ etc... Uniquement si il y a eu une modification de consigne...  le timer lui s'exécute à intervale de temps régulier chaque millisecondes  pour faire bouger le servo comme il le faut. 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#5 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 25 juin 2018 - 07:34

Hum, je crois avoir compris...

 

...effectivement, TimerOne.h je n'y aurais jamais pensé (vu que je ne connais pas), j'aurais pu donc cherché longtemps pour trouver une gruge ^^ lol

 

J'étais allé jusqu'aux interruptions machine avec je ne sais plus quoi, ça devenait trop complexe pour moi dans un premier temps.

 

J'essaye ça demain si j'ai un moment, merci les gars :)


signature_01.png -->

 

Mon Tipeee
 


#6 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 26 juin 2018 - 03:24

Plop Mike, tite question, il sort d'ou le "position_commande" ?

 

PS : pour le timerone j'ai pris celui ci : https://code.google....erone/downloads


signature_01.png -->

 

Mon Tipeee
 


#7 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 juin 2018 - 05:57

c'est censé représenter l'ordre de déplacement envoyé par ta pi. 

Il faut différencier  " l'ordre envoyé "  " la position courante " la position initiale au moment où on met à jour l'ordre "  " la position final demandé déjà enregistré " . 

Au moment où un ordre est envoyé, on regarde si c'est la même chose que la position finale demandée déjà enregistré ... Si c'est le cas il n'y a rien a faire, le servo est déjà en train d'aller à la position ... 

Si c'est pas le cas, on vient de recevoir un nouvel ordre de position demandé, dans ce cas là il faut remettre à jour l'instant t où on a reçu le nouvel ordre, et quand on est censé arriver, mettre à jour la position initiale et la position demandée...

Après perso je suis pas fan de comment tu as codé ton truc ... mais bon l'important c'est que toi tu te retrouves dans ce que tu as fais ... Ce qui me perturbe le plus c'est tes tableaux avec des i dedans qui sont jamais initialisés ... Je suppose que tu as enlevé des for pour simplifier le code mais moi perso ça me perturbe plus qu'autre chose ...

  


 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#8 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 26 juin 2018 - 06:25

Ah mais si tu veux je peux mettre le code complet, mais que l'on me dise pas que c'est imbuvable après ^^

Si si il y a une boucle for pour le i ;)

 

et le i c'est par rapport à la class, je l'ai rajouté dans le code, bon je vais tout mettre hein.

Bon, de toutes façons là je fais que des conneries ça part en vrille de partout, je vais stopper là car ça devient pénible.

 

 


signature_01.png -->

 

Mon Tipeee
 


#9 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 juin 2018 - 06:32

Perso je préfère un code complet =) .

Après si c'est que c'est "imbuvable " c'est que c'est pas bien fait :P mais en critiquant ce qui est " imbuvable" on vas filtrer le jus pour obtenir un truc buvable ;)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#10 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 26 juin 2018 - 06:43

Voilà j'ai tous mis, j'ai viré la partie E-paper, dans la partie ou se trouve le setup and co, j'ai aussi viré tous les Serial.print :)

 

Bon, j'ai essayé plusieurs choses avec tes infos, ça merdouille quelque part, normal, donc j'ai copier/coller brutalement comme un guedin et je vois déjà ce qui ne va pas te plaire, du moins j'ai un doute lol

 

Merci ^^


signature_01.png -->

 

Mon Tipeee
 


#11 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 juin 2018 - 07:12

Est ce que ce que tu as fais compile déjà ? Si non : quels sont les messages d'erreur, si oui qu'est ce qui se passe quand tu testes ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#12 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 26 juin 2018 - 07:38

Plop, bon et bien ça fonctionne (j'avais oublié de placer la fonction timerIsr(); dans le .h), mais je n'ai pas la gestion de vitesse, ça va juste sur les positions données.

 

PS : punaise j'avais oublié de replacer ça, je le rajoute dans le code là ou je l'aurais mis hhhiiiiiii

Timer1.initialize(1000); // set a timer of length 1000 microseconds = 1 ms - or 1000Hz
Timer1.attachInterrupt( timerIsr );

Et du coup j'ai ça comme erreur : 
 

GcomA.cpp:159: error: 'Timer1' does not name a type
 Timer1.initialize(1000);            
 ^
GcomA.cpp:160: error: 'Timer1' does not name a type
 Timer1.attachInterrupt( timerIsr );
 ^
exit status 1
'Timer1' does not name a type

signature_01.png -->

 

Mon Tipeee
 


#13 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 juin 2018 - 07:58

tu as la librairie timer1 d'installée ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#14 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 26 juin 2018 - 08:08

J'avais posté plus haut celui que j'ai trouvé : https://code.google....erone/downloads


signature_01.png -->

 

Mon Tipeee
 


#15 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 27 juin 2018 - 10:33

Bon j'ai fais des p'tits tests en ajoutant la fonction dans le .ino 

 

void timerIsr()
{
  servo2.moveServo();
} 

et donc je n'ai pas de message d'erreur, en revanche ça me met le driver pololu en carafe direct, si je vire les lignes dans le setup concernant le Timer1, le driver fonctionne bien de nouveau.

Entres temps je débranche et rebranche le driver.

 

Voir le code plus haut.

PS : des que l'on met le code à jour dans "Insérer un extrait de code" ça fout tout en l'air, il devient pénible à chaque fois de tout refaire, donc c'est mis comme ça, car ça fait trois fois que je m'y reprend.

 

Edit : bon le driver est toujours en carafe à chaque fois, mais j'ai trouvé d'autres trucs qui ne fonctionné pas dans mon code, je corrige et post à nouveau ^^

 

Edit 2 : Apparemment j'ai trouvé pourquoi le driver se met en carafe, TimerOne est en microseconde si je dis pas de bêtise, donc la valeur dans "Timer1.initialize(val);" je joue avec la valeur, mais ça déconne souvent, et si je met la valeur trop haute, c'est pas terrible je trouve niveau déplacement du servo, ça saccade à fond :( et au bout d'un moment, plus rien ne bouge...
Dommage que l'on ne puisse pas faire comme avec While, ça fonctionné bien sur le principe.


Modifié par Oliver17, 27 juin 2018 - 03:28 .

signature_01.png -->

 

Mon Tipeee
 


#16 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 27 juin 2018 - 03:31

On le spame peut être un peu trop avec le timer :P

 

essaye :

 

 Timer1.initialize(50000); // set a timer of length 10000 microseconds = 50 ms 

 

 

 

=)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#17 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 27 juin 2018 - 03:52

C'est ce que j'ai fais, bon maintenant ça a l'air de tenir avec ce temps, enfin jusqu'à quand...
Sinon ben le truc c'est que ça bloque au bout d'un moment et ça ne bouge plus...comme si arduino recevait la même info en boucle.

 

Sinon c'est déjà un peu plus fluide, mais c'est pas terrible je trouve, pourtant l'idée est super bonne car ils bougent tous en même temps ;)


signature_01.png -->

 

Mon Tipeee
 


#18 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 27 juin 2018 - 05:10

vidéo !!!


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#19 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 606 messages
  • Gender:Male
  • Interests:Glenn

Posté 27 juin 2018 - 05:38

Oh punaise, ça va demander une plomb de vidéo avec mon tél :(


signature_01.png -->

 

Mon Tipeee
 






Aussi étiqueté avec au moins un de ces mots-clés : vitesse, millis(), arduino

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users