Intensité et temps minimums en analogique ?

Bon, un peu d’aide sur la structure en C…

en basic :

if condition then
action1
else
action2
endif

se traduit en C par

if (condition) {
action1;
} else {
action2;
}

il est itéressant (du moins c’est ce que je fais) de traduire le C en français…

tout comme while condition … wend par while(condition){ … } en français : "tant que condition est vérifiée, faire { … } ".

et for i = 0 to 10 … next i devient for(i=0; i<=10; i++){ … } soit “Pour i égale 0, tant que i est inférieur ou égal à 10, faire { … } et incrémenter i”. plus fort que le basic, on peut faire plein de trucs : for(i=0; j>25; k /= 10){} “Pour i égale 0, tant que j est supérieur à 25, faire { … } et diviser k par 10” c’est aussi un coup à se planter, car si j ne passe jamais en dessous de 25, on ne sort pas de la boucle…

les accolades permettent de grouper un bloc d’instruction de la même manière que begin…end du basic. en C, elles sont partout, ce qui uniformise un peu les boucles et tests. contrairement au basic où à chaque ouvrant correspond un fermant.

as-tu regardé là (je le remets) : Référence Arduino français Main/Reference Etendue, c’est clair et concis, et ça explique bien la structure de base du C (en plus, c’est orienté arduino, idéal pour commencer, non?). Si tu veux une confidence, jusqu’à me mettre à l’arduino, je ne connaissans pas le C, juste le PHP qui s’en rapproche. et c’est par ce lien que je me suis mis à coder en C.

ah oui, autre chose : il n’y a pas vraiment de goto en C, perso, je ne m’en sers jamais, j’ai appris à vivre sans.

L'histoire des blocs, j'avais plus ou moins "sniffé" l'embrouille. Et en effet c'est pas mal du tout; mais faut s'y faire; ça a l'air méchament puissant ce langage de ouf. Ton lien, j'y suis allé; mais ils n'ont pas eu la bonne idée d'en faire une version téléchargeable (je ne peux pas être connectée en continu; et le pdf, ça me gonfle (on peut pas le bricoler)) Je vais voir d'y brancher "HTtrack" cette nuit (because plus de débit.) Le: ]:) "goto", il y est dans la doc' de ref', avec: "label"; mais je n'ai pas réussi à le faire accepter au débuggeur. (c'est quand même bien pratique, si on n'en abuse pas.) D'ailleurs, il va falloir que je comprenne comment se passent les branchements...Sans "goto/gosub" ?!? Pour la copie, c'est bon avec: "Ctrl+C". Ouf ! Conclusion: Les journées n'ayant que 24h et la doc' de ref' me paraissant fort copieuse; il n'est pas impossible que je pose d'autres questions. Passons au ..barbecue. aux essais... PS: Ton avatar...Il est bien sympa.

Pour le problème du not sync resp=0x30. Je pense que les pin 1 et 0 ne sont pas en cause, car cela a fonctionné normalement plusieurs fois avec des trucs branchés dessus. J'ai réinstallé le soft, j'ai rassemblé tous les drivers Arduino que j'ai trouvé (et il y en a un paquet ) dans le dossier "drivers". J'ai mis à jour: Windose m'a dit qu'il y avait pas mieux J'ai été voir au matériel le N° du port qui est bien le même que celui de la carte. Je conclu: Que c'est encore Windaube qui fait le c*** (à son habitude) Et je vais sans doute le prendre" la main dans le sac" en installant tout le basar sur Xubuntu. ...à+

Bouhou snif! Pas moyen d'installer Arduno sur Xubuntu. Mais.... Mon daddy a résolu le problème à la manière forte: La Dual est partie dans le tiroir: "cobayes". Et a été remplacée par une UNO qui marche nickel. J'ai le détecteur Hall. Y'a pu qu'à bricoler une carcasse de transfo pour faire le "joint". (à consommer avec modération Lol!) ....à suivre...et.....à+.

Salut,

J’ai eu un problème de non reconnaissance (not in sync) une fois, j’ai bien cru que ma carte était foirée, en fait, c’est parceque j’avais monté ma carte sur une platine avec des entretoises en ferraille pour la surélever un peu. c’était très estétique, mais l’entretoise juste à côté du connecteur USB touchait le connecteur ISP du MEGA8U2 (puce USB <=> Serial), et courtcircuitait une pin. lorce que je connectais ma carte, le PC y trouvait un truc dans un mode cheulou. ue fois l’entretoise virée, hop, carte de nouveau opérationnelle.

Faut dire aussi que les trous de fixation ne sont pas super bien placés, z’ont pas du souvent jouer au mécano les p’tits gars de la team…

Bonjour je suis nouveau sur le forum et sur arduino... il y a une partie du code que je ne comprend pas :

void setup()
{
pinMode( 1 , OUTPUT);
pinMode( 1 , INPUT);
}

Pourquoi déclarer la pin 1 en sortie puis tout de suite en entée ?? Merci

j'avais même pas vu...

J'utiliserai un test conditionnel if plutôt que while :

#define analogPin A0 
#define BP_pin 1  // bouton poussoir entre pin 1 et la masse (gnd)
float sensorValue; 
word value; 

void setup(){
  pinMode( BP_pin , OUTPUT);   // inutile je pense
  pinMode( BP_pin , INPUT);
  digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
}

void loop(){
  if ( digitalRead( BP_pin) == 1){  // Si BP_pin = 1 alors on execute
      value=analogRead(analogPin);
      Serial.print("Broche Analog: ");
      Serial.println(value,1);
      delay(1000);
  }
}

MaximeFr59: J'utiliserai un test conditionnel if plutôt que while :

petites modifs :

#define analogPin A0 
#define BP_pin 1  // bouton poussoir entre pin 1 et la masse (gnd)
float sensorValue; 
word value; 

void setup(){
//  pinMode( BP_pin , OUTPUT);   // inutile je pense (moi aussi, alors on vire)
  pinMode( BP_pin , INPUT);
  digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
}

void loop(){
//  if ( digitalRead( BP_pin) == 1){  // Si BP_pin = 1 alors on execute  (ne marche pas je crois, digitalRead() renvoie 0 ou 255)
  if (!digitalRead(BP_pin)){            // au moins on est sûr, et dans notre cas, le BP est actif à l'état 0...
      value=analogRead(analogPin);
      Serial.print("Broche Analog: ");
      Serial.println(value,1);
      delay(1000);
  }
}

autant pour moi :

 #define HIGH 0x1
 #define LOW  0x0
 #define true 0x1
 #define false 0x0

mais dans le doute, autant tester "0" ou "tout le reste", c'est une vieille coutume en programmation

à: MaximeFr59: Le "if" c'est ce que j'avais fais au départ. Mais avec ce système, tout le code (qui va être plus conséquent), va être contenu dans le "if". Ce qui, d'après moi, n'est pas une bonne chose. Je préfère une procédure de démmarage indépendante, et qui se fait oublier.

Ce "not sync resp...."; il y en a pas loin de 240 topics sur le forum. Je ne les ai pas tous lus, mais je n'en ai trouve qu'un seul de résolu (par l'opération du saint esprit puisque chez moi, ça n'a pas marché.) Les uns incriminent le driver, d'autres comme toi parlent des pin's 0 et 1, moi, j'accusais Windiou$. Bref c'est un mystère aux causes multiples., dont certaines doivent mettre la carte dans un état stable de "not sync". Et tant qu'un génie ne se sera pas penché sur le problème; et ban on sera emm*dés.

Super_Cinci: De grâce, ne nous rajoute pas des instructions subsidiaires...On a déjà les neurones qui frisent avec le code "de base". Concernant: "la petite ampoule et l'alim 500mA"; avec lesquelles tu pense ne pas risquer grand chose: Détrompe toi; tu risque "gros". J'ai commencé comme ça, à peu près au même âge que ta musaraigne. .....Et la soudure coûte cher....

Bonjour, Tu peux remplacer :

void setup(){
//  pinMode( BP_pin , OUTPUT);   // inutile je pense (moi aussi, alors on vire)
  pinMode( BP_pin , INPUT);
  digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
}

par :

void setup(){
//  pinMode( BP_pin , OUTPUT);   // inutile je pense (moi aussi, alors on vire)
//  pinMode( BP_pin , INPUT);
//  digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
  pinMode( BP_pin , INPUT_PULLUP);
}

@+

Que le code soit dans un if ou pas, ça ne change absolument rien, car une fois compilé, le if est tranformé en un branch (équivalant au goto du basic).

if (a==b){
instructions1...
}
instructions2...

deviendra à la compilation :

comparer a et b
si différent, aller directement à "instructions2"  // sous-entendu : sinon, continuer
instructions1...
instructions2...

et encore, je ne t’ai pas parlé d’assembleur (ce qu’il faudrait commencer par apprendre avant de jouer avec les langages évoulés… mais trop tard dans ton cas, c’est désespéré!). l’assembleur ne connaît pas les if, il ne sait que comparer, et sauter d’une ligne de code à une autre. XD ==>

while(a!=b){}  // tourner en rond en attendant qu'ils soient égaux
instructions1...

sera compilé en

comparer a et b
si différent, retourner à la ligne précédente  // sous-entendu : sinon, continuer
instructions1...

une fois compilé, ça ne change pas grand chose… (bon, je vais essayer de faire un effort pour pas fusiller ton neurone). heu, je viens de voir la participation d’icare, je t’assure que je n’y suis pour rien, même si ça me fait déjà marrer d’avance :wink:

Carolyne:
Super_Cinci: De grâce, ne nous rajoute pas des instructions subsidiaires…On a déjà les neurones qui frisent avec le code “de base”.

Si en plus tu en as plusieurs, ce n’est que mieux!
c’est comme le mauvais vin, la première gorgée est dure à avaler, puis plus tard, on s’y fait :wink:
Je n’ai rien rajouté, juste corrigé :wink: le pinMode(OUTPUT), c’est toi qui l’avais mis!

Carolyne:
Concernant: “la petite ampoule et l’alim 500mA”; avec lesquelles tu pense ne pas risquer grand chose:
Détrompe toi; tu risque “gros”. J’ai commencé comme ça, à peu près au même âge que ta musaraigne.
…Et la soudure coûte cher…

Tu veux dire qu’elle va devenir comme toi? Boarf, si elle est capable en 2027 d’écrire sans faire de fautes, alors oui, je veux bien! (pis pour l’instant, à part tes référence au basic, tu caches bien tes défauts :wink: )

Que le code soit dans un if ou pas, ça ne change absolument rien, car une fois compilé, le if est tranformé en un branch.

Sans doute... Mais dans le code sous sa forme "écrite", tout le code sera bien dans le bloc du if. Et on va se retrouver à la fin avec une fermante de "Out of no where" située à un kilomètre de ce dont au sujet duquel elle se rapporte. Capitch ? Je signale que je ne comprends pas encore tout ce que je fais avec le "C", et C bien ça le problème. J'essaie un bout, je vois ce que ça donne et je tire les conclusions. Le "OUTPUT" il est venu avec le "INPUT" (il devait bien servir à quelque chose là où je l'ai pris.) Pas ma faute si les mecs ne nettoient pas leurs codes.

et encore, je ne t'ai pas parlé d'assembleur

On ne parle pas de ce qui fâche. Je me suis assez explosé le cerveau sur des "crackme's" de psychopathes; alors: Jumping! Jack...Flash! Je demanderais bien la différence qu'il y a entre: "INPUT", et: "INPUT_PULLUP"; mais je crains de vous désespérer sur mon cas. ( "normalement"^^, le souligné, c'est dans les noms de variables, donc d'après moi, y'en a pas.) wtf?

à part tes référence au basic

Le basic est le plus merveilleux des langages. Dommage qu'il soit un peu lent et un peu limité (enfin...un peu beaucoup.) Dans les deux affirmations suivantes: "tourner en rond en attendant qu'ils soient égaux" et; "si égaux, retourner à la ligne précédente" D'après moi, y'a un os. N'essayez pas de m'embrouiller...Je vous ai à l'oeil !

Carolyne: quelque chose là où je l'ai pris.) Pas ma faute si les mecs ne nettoient pas leurs codes.

prends des codes de gonzesse alors! Nous les mecs on a déjà du mal à nettoyer nos chi*tes, alors les codes... mais c'est bourré de fleurs et petits coeurs, moins facile à lire...

Carolyne: Je demanderais bien la différence qu'il y a entre: "INPUT", et: "INPUT_PULLUP"; mais je crains de vous désespérer sur mon cas. ( "normalement"^^, le souligné, c'est dans les noms de variables, donc d'après moi, y'en a pas.) wtf?

pinMode(10, INPUT_PULLUP);
// réunit les deux lignes suivantes :
pinMode(10, INPUT);
digitalWrite(10, HIGH);
// c'est un raccourcis en quelque sorte.

Carolyne: Le basic est le plus merveilleux des langages. Dommage qu'il soit un peu lent et un peu limité (enfin...un peu beaucoup.)

tu aurais dû naître 30 ans plus tôt ;)

Carolyne: Dans les deux affirmations suivantes: "tourner en rond en attendant qu'ils soient égaux" et; "si égaux, retourner à la ligne précédente" D'après moi, y'a un os. N'essayez pas de m'embrouiller...Je vous ai à l'oeil !

une co~~q~~uille oui, mais j'ai corrigé entre temps, désolé, pamafot, oups, et plus si je puis me permettre. il faut lire "si différent, retourn..." mais au moins, ça prouve que tu suis, donc je hais... et bravo ! :grin:

le code sera bien dans le bloc du if

Pour que le code soit plus lisible, tu peut utiliser des fonctions:

void maFonction1()
{
liste d'instructions...
return;
}

void maFonction2()
{
liste d'instructions...
return;
}

int maFonction3(int parametre1)
{
int result = 0;
liste d'instruction...
return result;
}

void loop()
{
    if (conditions)
    {
    int maVariable;
    maFonction1();
    maFonction2();
    maVariable = maFonction3(123);
    }

}

De cette manière tu ne fais appel qu'a des fonctions dans un bloc if, le code sera beaucoup plus lisible ;)

la meilleure solution, c’est de faire une mise en page. l’EDI arduino le permet facilement, car il conserve les espaces de début de ligne. ainsi, à chaque fois qu’on ouvre un crochet (bloc d’instructions), on décale de 2 espaces (ou tabulations, mais les tabulations ne sont pas forcément interprétées de la même façon suivant l’éditeur : selon l’humeur…),

void loop(){
  instruction;
  if (test) {
    action;
    instruction;
    while(test2){
      instruction;
      action;
    }
  } else {
    instruction;
    for (i = O; i < 10; i++){
      if(test3){
        action;
        instruction;
        appel_fonction();
      }
    }
  }
}

C’est comme ça que je fais et je m’y retrouve, même sur des blocs de plusieurs centaines de lignes, il arrive que j’ai 20 ou 40 espaces en tête d’une ligne…

A chacun son truc… la mise en fonction, c’est bien, mais ne pas oublier que ça prend pas mal de mémoire à chaque appel et peut devenir assez ralentissant si on a besoin de vitesse.

Les fonctions c'est pas facile. L'indentation, je la fait, même en basic (et en python elle est obligatoire, même que c'est une sacré m***e entre les espaces et les tabulations.) Pour ça: pinMode(10, INPUT_PULLUP) Le souligné (_) n'est pas dans la doc de ref du "C". C'est spécial à Arduino ? Il faut vraiment qu'ils fassent une version [u]html[/u] téléchargeable de la doc de ref "Arduino". (avec tout le pognon qu'on leur laisse...) HTTrack m'a remmené que des liens ripoux et des: "forbiden". Je vais retenter avec le réglage qui tue. 40 espaces d'indentation !!!! Pfiou!!!!!!!!!!

Carolyne: Il faut vraiment qu'ils fassent une version [u]html[/u] téléchargeable de la doc de ref "Arduino". (avec tout le pognon qu'on leur laisse...)

Ça n'est peut-être pas valable pour tous les systèmes (et je ne sais pas lequel tu utilises) mais sur les systèmes de type Debian et dérivés, l'installation du paquet arduino-core place une copie de la doc html dans /usr/share/doc/arduino-core/reference/index.html

Carolyne: Pour ça: pinMode(10, INPUT_PULLUP) Le souligné (_) n'est pas dans la doc de ref du "C". C'est spécial à Arduino ?

non, le souligné est un caractère comme les autre, qui permet de rendre les identifiants plus faciles à lire, en C, on écrit généralement les identifiants en minuscule et dans le cas de plusieurs mots, une majuscule à partir du second. Exemple : uneVariableQuatreMots. mais ce n'est pas obligatoire et je trouve moins lisible que "une_variable_quatre_mots". Toujours en C, les macros (définies par #define) et constantes sont souvent mises en majuscules, d'où l'utilisation du souligné pour séparer les mots. ce n'est que pour faire joli, comme l'identation, il n'y a pas de format oligatoire. Moi, je n'utilise pas du tout ces formats, c'est mon choix et je el vis plutôt bien (pis j'en ai rien à péter).

Carolyne: Il faut vraiment qu'ils fassent une version [u]html[/u] téléchargeable de la doc de ref "Arduino". (avec tout le pognon qu'on leur laisse...) HTTrack m'a remmené que des liens ripoux et des: "forbiden". Je vais retenter avec le réglage qui tue.

sous windows : Program Files\Arduino\reference\index.html si ça peut t'aider...

fume pas trop quand même XD

sous windows : Program Files\Arduino\reference\index.html si ça peut t'aider...

Aaaaaaah ! ça aide pas...ça SAUVE ! Du coup , ça va se calmer niveau: questions.

Une ch'tit dernière.. 8) Pour la route: Dans: pinMode(10, INPUT_PULLUP); si le souligné est un caractère non significatif, peut-on l'écrire: INPUTPULLUP comme un mot clé; ou faut il mettre un espace ? Question subsidiaire: En C les espaces sont ils significatifs (critiques).

fume pas trop quand même smiley-lol

3 par jour..No more...Sinon ça plombe le budget .