Bonjour,
Debutant en arduino et n'ayant rien trouver de compréhensible a mon niveau, je vous demande,
Est ce que quelqu'un, pourrait m'expliquer simplement comment on fait pour imposer une cadence a une boucle de programmation (arduino) svp? (IDE 0023 au cas ou)
Je m'explique:
je veux réaliser des prises de températures a intervalle fixe pour remplir un tableau et faire une moyenne.
Mais je dois d'abord activé une broche numérique pour rendre passant un transistor fermant mon diviseur de tension (100K + NTC 100K).
L’idée:
Pendant 2 ou 5 ou Nsecondes,
activer ma broche a intervalle régulier pendant environ 10ms, lire, et l’éteindre pour la réactiver à la lecture suivante.
Chaque lecture dois être stocker dans un tableau et à la fin, faire une moyenne pour l'impression serie.
Je compte sur l'utilisation de millis() mais je n'arrive pas a paramétrer comme je voudrais. je ne peut plus utiliser les attachinterrupt (deja pris pour Vitesse et RPM). DONC PAS DE DELAY EN PROG...
J'ai regarder du cote de smoothing, mais je n'arrive pas non plus à mettre une fonction qui cadence.
J'ai donc établie un code un peu enfantin mais qui a l'air d’être sur la bonne voix (enfin au moins je vois des coupures d'activation pour le transistor mais j'ai pas l'impression qui suis le rythme que je veut) (aie, les pros vont m’écorche vif....).
Au final, j'aimerai pouvoir passer dans une boucle for afin de remplir mon tableau et cadencer chaque i+1 par (Nseconde/Nbcase tableau).
Le code actuel:
Ce code n'imprime que 9 valeur du tableau??pkoi??Code HTML:/*lecture de temperature en 3.3V Aref sur NTC 100K + R100K */ unsigned long refTemps=0; unsigned long interval=200; unsigned long mesure=5; int ThermistorPin = A0; //pin analogique pour sonde NTC100K int ActivationSonde = 12; //pin d'activation du circuit de prise temperature sur broche D12 //int Vo; float R1 = 10000; float logR2, R2, T; float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07; const int NombreDeLecture = 10; int Lecture[NombreDeLecture]; int Total=0; int Moyenne=0; //remplace la variable Vo void setup() { Serial.begin(9600); analogReference(EXTERNAL); pinMode(12,OUTPUT); pinMode(0,INPUT); digitalWrite(12,LOW); //for (int thisReading = 0; thisReading < NombreDeLecture ; thisReading++) // Lecture[thisReading] = 0; } void loop(){ digitalWrite(12,HIGH); Lecture[0]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[1]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[2]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[3]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[4]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[5]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[6]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[7]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[8]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; digitalWrite(12,HIGH); Lecture[9]=analogRead(ThermistorPin); refTemps=millis() ; millis()-refTemps>=mesure; digitalWrite(12,LOW); refTemps=millis() ; millis()-refTemps>=interval; Total = Lecture[0] + Lecture[1] + Lecture[2] + Lecture[3] + Lecture[4] + Lecture[5] + Lecture[6] + Lecture[7] + Lecture[8] + Lecture[9]; Moyenne = Total/NombreDeLecture; //Vo = analogRead(ThermistorPin); //Vo a remplacer par Moyenne //R2 = R1 * (1023.0 / (float)Vo - 1.0); //equation d'origine R2 = R1 * (1023.0 / (float)Moyenne - 1.0); logR2 = log(R2); T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); T = T - 273.15; // T = (T * 9.0)/ 5.0 + 32.0; // pour affichage en degree Farhenheit refTemps=millis(); //Pour affichage moniteur serie Serial.print("millis"); Serial.print(millis()); Serial.println (Lecture[0]); Serial.println (Lecture[1]); Serial.println (Lecture[2]); Serial.println (Lecture[3]); Serial.println (Lecture[4]); Serial.println (Lecture[5]); Serial.println (Lecture[6]); Serial.println (Lecture[7]); Serial.println (Lecture[8]); Serial.println (Lecture[9]); Serial.print("Total: "); Serial.println(Total); Serial.print("Moyenne: "); Serial.println(Moyenne); Serial.print("Temperature: "); Serial.print(T); Serial.println(" C"); Serial.println(); /* //sendTEMPToNextion(); Serial.print("t3.txt="); Serial.print("\""); Serial.print(T); Serial.print("\""); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); */ }
Est ce que ce que je veut faire est réalisable?
Sans bibliothèque ou truc tordu?
Merci d'avance pour votre compréhension et votre aide. le but étant surtout de comprendre comment piloter et cadencer une boucle de manière simple! (syntaxe? truc que j'ai pas piger??)
Cordialement.
-----