[FR] encore un débutant avec plein de questions + presentation

Salut a tous

je me présente

j'habite proche de lyon, je suis serrurier automaticien, j'ai un bac pro électronique et informatique, et je n'ai pas eu de cours de programmation quand j’étais étudiant

J'ai bientôt 28 ans, et je suis nul en langues (ça fais + de 20ans que j'apprend l'anglais, et j'ai encore du mal à déchiffré certains textes) mais j'ai quand meme réussi a voyagé dans plus de la moité des pays de l’Europe non francophone

tout ça pour dire que je finis toujours par comprendre la langue "C" mais çà peut être long

ensuite mon matériel, je sais que c'est le veneur qui à mentis, j'ai acheté en 2012 ce que je croyais etre une (vrai) arduino mega 2560, à un prix très raisonnable (sans que ça me semble anormalement bas), et quand je l'ai reçus il était gravé funduino et non arduino, et sur la facture est inscrit arduino funduino mega 2560

la boutique internet, prétendais que ses prix bas était du fais d'achat par milliers, mais elle n'existe plus,
à part ça j'ai rien a reproché au matériel

maintenant passons à mes difficultés actuelles

tout d'abord

j'ai trouvé de façons différentes de programmer l'attribution des entrées sorties, mais je n'ai pas encore compris ce qui fais que ça reste acceptable pour l'arduino

les 3 étant pour la définition des pin avant "void setup()"

le 1er ci dessous je l'ai utilisé et j'ai pas de soucis, sauf si j'enlève le const (exemple 2)

const int variable1 = 7; // pin numerique
const int variable2 = A0; // pin analogique

void setup(){

pinMode (variable1, INPUT);
pinMode (variable2, OUTPUT);
}
Void loop(){

int variable3 = analogRead(variable1);
int variable4 = digitalWrite(variable2);
}

mais j'ai trouvé également et la je comprend pas comment il différencie le pin analogique et le pin numérique
celui ci je l'ai recopier de mémoire, j'ai fermé la page du site où je l'ai trouvé, et maintenant je ne le retrouve plus, et ne marche pas correctement aussi bien sur les pin analogique que numerique

int variable1 = 0; //entrée analogique
int variable2 = 13; // sortie numerique
int variable3 = 0; // entrée numerique

void setup(){

pinMode (variable1, INPUT);
pinMode (variable2, OUTPUT);
pinMode (variable3, INPUT);
}
Void loop(){

int variable4 = analogRead(variable1);
int variable5 = digitalWrite(variable2);
int variable6 = digitalread(variable3);

}

ensuite j'ai celui ci dessous qui marchais bien au début puis quand j'ai voulu amélioré mon montage et le codage qui allais avec, ça ne fonctionnais plus, et j'ai due remplacer par l'exemple 1, mais qui je ne sais pas pour quel raison il ne fonctionne pas toujours

#define variable1 = A0; //définition du pin analogique
#define variable2 = 13; // définition du pin numérique

void setup(){

pinMode (variable1, INPUT);
pinMode (variable2, OUTPUT);
}
Void loop(){

int variable3 = analogRead(variable1);
int variable4 = digitalWrite(variable2);
}

si quelqu'un pouvais m'expliqué le pour quoi :

dans l'exemple 1 :
de l'utilisation de "const" dans l'exemple 1

dans l'exemple 2 :
le pour quoi on utilise 0 et non A0 pour le pin analogique

dans l'exemple 3 :
le pour quoi ""#define"ça ne marche pas toujours

autre prblème
qui est que je ne trouve pas les bonnes datasheet pour mes composant

j'ai 2 model de thermistance

le 1er est une TDC05C310 (imprimé TDC310), et impossible de trouvé les coefficient A, A' ,B, B', C, C', D, D'
c'est bien une 10kOhm

l'autre model acheté en lot de 5 sur amazon (4 livré, je suis en colère, mais pour le prix je m'en fout, je vais pas perdre mon temps là dessus)
est une NTC3950 que je croyais être une 10kOhm et s'avère être une 100kOhm (imprecision du vendeur et inatention de ma part)

et même problème que pour l'autre thermistance

si quelqu'un as les liens vers ces datasheets ou une méthode fiable pour calculé ces coefficeients

je remercie par avance tout ceux qui pourrais m'aider

Bonjour,

Déjà une remarque préliminaire c’est une très mauvaise idée d’appeler une constante variablex et encore plus si elle représente une pin du processeur. Il faut donner aux constantes/variables des noms en rapport avec leur fonction, par exemple pinLed ou pinAna ou pinPotentiometre.

Pour répondre aux questions:

const indique au compilateur qu’il s’agit d’une constante et quelle ne sera pas modifiée par le programme. Ca permet (entre autres) au compilateur d’optimiser le code et de ne pas l’implanter en mémoire si non nécessaire.

Quand on utilse 0 pour A0 dans analogRead(), le framework sait qu’on veut s’adresser à A0. Il vaut mieux utiliser A0 car valable aussi bien pour analogWrite que pour les fonctions analogique digitalRead digitalWrite.

#define fonctionne toujours. Si la question est pourquoi on n’utilise pas #define à la place de const, chacun a ses avantages et inconvénients. const permet un typage de la constante et est (à mon avis) à préférer. Mais la différence entre #define et const demanderai un plus grand développement.

salut, merci pour cette réponse rapide

j'ai nomé variable1, variable2 mais c'etait pour l'exemple, car dans mes programes c'est Bp, L1,... nom des pin sur 2 caractères

grâce à toi je comprend mieux l'usage du "const"

pour ce qui est du A0, pour quoi est il valable pour digitalRead et digitalWrite ?, on peut utilisé les pin analogique en pin digital ?

et pour les "#define", j'avais bien un problème qui s'est résolu en le remplaçant par "const int" alors que je les utilise à très bas niveau de débutant,raison pour la quel je ne comprend pas pk ça ne marchais pas,

et j'ai tellement modifier mon code, qui ne marchais pas avec le "#define", que je ne peut pas le retrouvé,

il m'est impossible de copier le code car il est sur mon autre PC

01power:
pour ce qui est du A0, pour quoi est il valable pour digitalRead et digitalWrite ?, on peut utilisé les pin analogique en pin digital ?

Si justement.

Si tu fais digitalRead(0) tu adresses la pin 0 alors que si tu fais digitalRead(A0) tu adresses bien la pin A0.
Alors que analogRead(0) et analogRead(A0) adressent toutes deux la pin A0.

ok donc en gros on augmente le nombre de pin numerique quand on utilise digitalRead(A0)

il me reste donc a trouvé les réponses a mes autres questions

Pas vraiment, elles existent toujours, mais on y accède de façon plus universelle. Sur une UNO on peut y accéder par digitalRead(14), mais ce ne sera pas valable sur certaines autres cartes.

salut à tous,

ça fais un petit moment que j’ai pas donné de nouvelles,

je cherches toujours les coefficients pour mes thermistances 3950 100k 25° et pour La TDC05C310

donc si quelqu’un a des réponses pour une ou les 2 il est le bienvenu

mes autres soucis, oui je suis un aiment a malchance (j’ai plein de composants de récup, et donc avec les défaillance qu’ils peuvent avoir)

j’ai :

  • un module compteur de passage led, (qui fonctionne bien)
  • un module photomètre qui apparemment fonctionne mes les résultats en sortie du module sont très bas avec une lampe braqué dessus (mais pas de soucis pour l’exploité)
    -un afficheur LCD 1602 vert (celui la n’affiche rien, il est probablement grillé à cause du coups de foudre qu’as subit la carte sur la quelle il était connecté) je dois en avoir 2 autres que j’ai pas encore pris (à testé)

dans tout ça, je voulais essayé d’exploité mon capteur de passage led, quand je lis les impulsions, de façon basique , j’ai bien les 1 et 0 lu en affichage moniteur serial
mais la problème se corse lorsque je fais mon programme de comptage, et je ne comprend pas où ça cloche

const int Imp = 12;
const int L1 = 13;
unsigned int puls = 0; //detecte les impulsion 
long compt = 0; //compte les imlpusion
unsigned long t= 0; // initialisation du chrono
unsigned long t0 = 0; //temps depart chrono
const unsigned long periode = 1000; // temps fin chrono

void setup() {
  pinMode(Imp, INPUT); //capteur impusion
  pinMode(L1,OUTPUT); //témoins de sortie
  Serial.begin(9600); // transfert des données vers le moniteur serial
  t0 = millis(); //t0 deviens une valeur de temps
}

void loop() {
  
  compt = 0;

  while(t - t0 > periode){ // la boucle de 1s continue jusqu'à ce que t - t0 = 1000
    puls = digitalRead(Imp); // puls vaut 1 ou 0 si en fonction de l'état de mon pin Imp
    if(puls = HIGH ){ //si puls vaut 1
      compt = compt+1; //compt est incrémené de 1
     
      puls = 0; //on remet puls à 0 au cas où
      }
  }
  digitalWrite (L1, HIGH); //la led de l'arduino s'allume
  Serial.println(compt); // on renvoie le nombre d'impulsion compté sur 1s
  digitalWrite (L1, LOW);//la led de l'rduino s'éteint
 
  }

le 2 variante de résultats :

1/ quand la condition de ma boucle est : while (t - t0 > periode), je crois que je ne sort jamais de la boucle
2/ quand la boucle est while (t - t0 < periode), je re-sort (ou n’entre pas dans )de la boucle toute les millisecondes donc le comptage ne se fais pas et mon résultat de comptage est 0 en permanence et s’affiche toutes les milliseconde au lieu de toutes les secondes

salut à tous,

petit up,

je trouve pas