Go Down

Topic: Vélo-scooter électrique (Read 1 time) previous topic - next topic

lesept

8 leds x 20mA sur un nano, c'est chaud ... :)  ( conseillé 20mA max 40mA par sortie et 200mA pour              tout l'arduino )
Non, ça passe, j'ai déjà alimenté et piloté 8 leds WS2812 avec un nano sans problème.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Belo

Oui, je sais pour ça, mais il ya en plus le mosfet et quelques trucs en plus.
De toute façon, ça sera plus simple et cela me permettra de découvrir le composant ne555.
Il me reste donc juste à réaliser le code moteur et l'inclure dans le programme, tester ce dernier et faire le hardware sur pcb et non sur breadboard, retester ...etc...

Belo

#47
Oct 30, 2019, 10:52 am Last Edit: Oct 30, 2019, 01:34 pm by Belo
Bonjour, j'ai réfléchi pour le transformer le delay en fonction non bloquante et j'en sort ça :

avec le delay   ====    avant
Code: [Select]
if(a>r){ // Vérification de la croissance du rapport cyclique demandé.
    
    delay(20); // Délai responsable de la souplesse de conduite.
    r=r+s/20+2; // Calibrage empirique de la souplesse de conduite.
  }

c'est juste le bout de code du delay heinnn

sans le delay   ====   après
Code: [Select]
if(a>r){ // Vérification de la croissance du rapport cyclique demandé.
    temps = millis();
    if((millis - temps) > 20){
    r=r+s/20+2; // Calibrage empirique de la souplesse de conduite.
    }
  }



Par contre pour le while ....?




Le code final avec tout du coup.  Je vais bientôt le tester sur breadboard ( ce sera le bordel mais bon ). Le compilateur ne m'indique aucune faute. Faute de place ( le code seul fait plus de 9000 caractères), je l'ai mis en lien direct sur l'ide.

lesept

Code: [Select]
    temps = millis();
    if((millis - temps) > 20){


Ça ne marche pas car tu initialises la variable temps et tu testes immédiatement après. Les 20 ms n'ont pas le temps de passer.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Belo


savoriano

#50
Nov 01, 2019, 09:06 am Last Edit: Nov 01, 2019, 09:56 am by savoriano
Quote
Finalement, je pense utiliser un ne555 pour faire clignoter 4leds en parallèle.
Dommage.
Je n'ai pas bien compris ton code mais une piste
Code: [Select]
if (a > r) { // Vérification de la croissance du rapport cyclique demandé.
   fSuppl += 0.01; //A calibrer. avec 0.01 il lui faut 200 cycle pour que la formule soit égale à la précédente.
   r = r + s / 20 + fSuppl; // Calibrage empirique de la souplesse de conduite.

 }

fSuppl est une variable globale de type float.
Ou
Code: [Select]
if (a > r) { // Vérification de la croissance du rapport cyclique demandé.
    iSuppl += 1; //A calibrer. avec 1 il lui faut 200 cycle pour que la formule se déclenche
    If (iSuppl > 200) {// iSuppl variable globale de type int
      r = r + s / 20 + 2; // Calibrage empirique de la souplesse de conduite.
    }
  }

Je ne sais pas ce que le pro du code pensent mais une formule comme la tienne:
    r = r + s / 20 + 2; // Calibrage empirique de la souplesse de conduite.
on peux se demander: est ce que il a oublié quelque parenthèses?
pour ne pas obliger le lecteur de vérifier la formule c'est mieux comme ça:
    r = r + 2 + (s / 20) ; // Calibrage empirique de la souplesse de conduite.
Çà c'est une opinion personnelle!
Pardonnez moi pour mon français, ce n'ai pas ma langue maternelle.

Belo

"iSuppl += ;"

ça, c'est pareil que "iSuppl = iSuppl + 1"   ?

savoriano

Code: [Select]
c'est pareil que "iSuppl = iSuppl + 1"   ?
Oui
Pardonnez moi pour mon français, ce n'ai pas ma langue maternelle.

Belo

Auriez vous des tutos pour rendre non bloquantes des instructions à me conseillez ?
Merci bien

Belo

Je pensais remplacer le delay par ceci :

Code: [Select]

if(a>r){ // Vérification de la croissance du rapport cyclique demandée
    do{
      if((millis() - previousMillis) >= intervalle){
    r=r+2+(s/20); // Calibrage empirique de la souplesse de conduite.
    }}while((millis() - previousMillis) < intervalle);
  }
  if(a<r){ // Vérification de la décroissance du rapport cyclique demandé.
    r=a; // Diminution immédiate du rapport cyclique réel le cas échéant.
  }


Je me suis inspiré de "BlinkwithoutDelay" et de "do...   while" que je n'utilisai pas auparavant.


Belo

Je me suis rendu compte finalement que ça ne marcherait pas ( sauf erreure de ma part ).
Mais est ce que deux void peuvent fonctionner en mçeme temps ?
Je voudrais en fait rediriger l'action avec le delay vers le void quand la condition est remplie et laiiser donc le loop continuez tranquillement son travail.

Go Up