Go Down

Topic: Intensité et temps minimums en analogique ? (Read 12882 times) previous topic - next topic

Super_Cinci

nan, mais si t'as pondu un truc genre

Code: [Select]

while(!digitalRead(pin_a_tester_ki_fo_attendre){}
t'as tout bon!

"genre" parce que tout dépend de comment tu câbles ton biniou, mais je te fais confiance.

Carolyne

Bouhou! Si tu voyais ce que j'ai fait, tu serais mort de rire.
Y'a du : "if" à trois branches (j'ai pas trouvé les "then"), y'a même du: "goto" ]:)
Autant dire que le débuggeur est carrément en folie.
J'ai même réussi à planter l'interface....grr... gné....
Bon, je vais tenter du "while". Mais là,....il faut que je refroidisse.
PS: Si il reste du lien vers de la doc de réference "C",  j'en reprendrais bien.
Parce que celle que j'ai pris, elle a été faite par des mecs (barbus) sous acide ....Sulfurique.

Carolyne

#17
Nov 06, 2013, 09:14 am Last Edit: Nov 06, 2013, 09:52 am by Carolyne Reason: 1
Quote
while(!digitalRead(pin_a_tester_ki_fo_attendre){}

Bon, alors. Résultat des cogitations:
Des points d'exclamation, j'en ai trouvé 2.
Le: "equality comparison" marche avec le égale, donc,
c'est le: "logical not"; ça voudrait dire que: Tant que: "pin_a_tester...." n'est pas "vivant" (actif, vrai, pas: "not"); alors on "tourne".
Et je mets l'action entre les deux accolades: Ouvert/fermé.
Mais ça, ça sous-entend qu'il y a du sous-entendu. Et that is the question: Y'a t-il du sous-entendu ?
Et c'est pas tout: A partir de quand  (de quoi) on considère qu'il est "vivant"; quand il est "0", ou "1" ?
J'aurais tendance à dire "0". (logique de barbu)
On a de la chance...L'alphabet grec est déjà pris par les matheux, et ils ont pas encore intégrés les smileys. Mais ça viendra...ça viendra.
Edit: Y'a pas de: "then" ! Mais y'a pas non plus de: "wend" !?!? WTF ? Ma mama mia! Comment je sort de la boucle?

Carolyne

Je propse ça:
Code: [Select]

#define analogPin A0
float sensorValue;
word value;
void setup()
{
pinMode( 1 , OUTPUT);
pinMode( 1 , INPUT);
}
void loop()
{
while ( !( digitalRead( 1) ) ){
digitalWrite( 1 , HIGH );
Serial.print("Etat Num : ");
Serial.println(digitalRead( 1 ));
delay(1000);
}
digitalWrite( 1 , LOW);
value=analogRead(analogPin);
Serial.print("Broche Analog: ");
Serial.println(value,1);
delay(1000);
}

Possible que je me soit emmelé les pinceaux avec les HIGH/LOW (rapport au point d'exclamation)
La carte l'accepte; mais maintenant, à la fin du téléversement; il me sort ça:
avrdude: stk500_getsync(): not in sync: resp=0x30
Je l'avais déjà eu, et en fermant /réouvrant; débranchant /rebranchant; ça lui "passait".
Mais là; ça lui passe pas.
Apparté: Quelle c*****ie d'avoir mis un "copier pour le forum", un "copier en tant qu'HTML", et pas de "copier tout sec".


Super_Cinci

Ok...

Code: [Select]

#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);
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()
{
while ( digitalRead( BP_pin) ){}  // il n'y a rien dans la boucle, c'est normal, tant que BP_pin est à 1, on boucle, on tourne en rond.
// on sort de la boucle le jour où tu auras relié la pin BP_pin avec le GND (par appui sur le bouton poussoir...)
//  digitalWrite( BP_pin , LOW);  // peu nécessaire : il vaut mieux laisser la pull-up en route pour un usage futur de ton bouton.
value=analogRead(analogPin);
Serial.print("Broche Analog: ");
Serial.println(value,1);
delay(1000);
}

désolé pour le point d'exclamation dans le while, en fait, dans ce cas là, y'en a pas besoin... (oups quoi!)
Tu as vu, j'ai tout foiré ton code en rajoutant BP_pin. ben oui, car c'est bien là ton souci je crois. la pin 1 sert au "téléversement" (ah bon, on paie en ligne? sacrés ritals, savent pas traduire...), tout comma la pin 0. donc si tu as quelque chose de relié dessus, il est possible que ta carte ait du mal à répondre lors de la prog. débranche ce qu'il y a sur cette pin 1 et recommence la programmation pour voir ;)

Donc, si tu modifies la seconde ligne du code, ça te permet d'utiliser une autre pin pour ton bouton poussoir sans avoir à réécrire tout le code. elle est pas belle la vie?

Dans l'idéal, il ne faut jamais utiliser les pins 0 et 1 pour autre chose que Serial.

Super_Cinci

#20
Nov 06, 2013, 12:08 pm Last Edit: Nov 06, 2013, 12:16 pm by Super_Cinci Reason: 1
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) : http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceEtendue, 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.

Carolyne

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.

Carolyne

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.     ...à+


Carolyne

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.....à+.

Super_Cinci

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...

MaximeFr59

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

Code: [Select]
void setup()
{
pinMode( 1 , OUTPUT);
pinMode( 1 , INPUT);
}


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

Super_Cinci


MaximeFr59

#27
Nov 08, 2013, 10:33 am Last Edit: Nov 08, 2013, 10:49 am by MaximeFr59 Reason: 1
J'utiliserai un test conditionnel if plutôt que while :

Code: [Select]
#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);
  }
}

Super_Cinci


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

petites modifs :
Code: [Select]
#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 :

Code: [Select]
#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

Carolyne

à: 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....

Go Up