Bonjour à tous !!
Je bosse actuellement sur un projet Arduino dans lequel je récupère sur une carte SD les données fournies par 3 capteurs. Le problème est qu'une fois compilé et téléversé sur la carte arduino, le programme s'arrête au bout de 24 prises de mesure (avant c'était 21, parfois c'est 22 ... bizarre !) . J'ai essayer pas mal de truc, mais rien y fait
Je vous joins le code. D'ailleurs si vous trouvez des trucs à redire ou à améliorer je suis preneur
Merci d'avance pour votre aide !!Code:/**** PROGRAMME PRINCIPAL *****/ #include <SPI.h> // Pour la communication SPI #include <SD.h> // Pour la communication avec la carte SD int CS_PIN = 10; int NbTopsFan; //mesurer le front de montée du signal float Debit; int debitmetre = 3; //Où placer le capteur int R = 16000; // résistance "fixe" du pont diviseur de tension int Vcc = 5; // tension d'entrée void rpm () { //Voici la fonction que l'interruption déclenche NbTopsFan++; //Cette fonction mesure les fronts de montée et de descente du signal envoyé par les capteurs à effet Hall } void setup() { /* Initialisation du port série */ Serial.begin(9600); pinMode(debitmetre, INPUT); //initializes digital pin 3 as an input attachInterrupt(0, rpm, RISING); //and the interrupt is attached /* Initialisation du port SPI */ pinMode(10, OUTPUT); /* Initialisation de la carte SD */ Serial.print("Init SD card... "); if (!SD.begin(CS_PIN)) { // gestion du cas d'erreur Serial.println("FAIL"); for(;;); } // Attend l'appui sur bouton RESET Serial.println("OK"); } void loop() { /* calcul de température */ int valeur0 = analogRead(A0); //tension mesurée aux bornes de la thermistance float Ut0 = valeur0 * (Vcc / 1024.0); //conversion de la valeur analogique en volt float Rt = (Ut0*R/(Vcc-Ut0))/1000; // calcul de la valeur de la thermistance (pont diviseur de tension) float Temperature = 450.57*pow(Rt,-0.619); // température mesurée Serial.println(" ");Serial.print("Temperature = ");Serial.println(Temperature); /* calcul du débit */ NbTopsFan = 0; //Set NbTops to 0 ready for calculations sei(); //Enables interrupts delay (1000); cli(); //Disable interrupts Debit = NbTopsFan / 7.5; //fonction de calcul du débit Serial.print("Débit = "); Serial.println(Debit); /* calcul de la pression */ int valeur1 = analogRead(A1); //tension mesurée aux bornes du capteur de pression float Ut1 = valeur1 * (Vcc / 1024.0); //conversion de la valeur analogique en volt float Pression = 2.55*Ut1 - 1.37; // pression mesurée Serial.print("Pression = "); Serial.println(Pression); /* Ecriture des données dans le fichier*/ File fichier = SD.open("donnees", FILE_WRITE); // Ouverture d'un fichier en écriture{ if(!SD.open ("donnees", FILE_WRITE)) { // gestion du cas d'erreur Serial.println("Erreur ouverture fichier"); for(;;);} // Attend appui sur bouton RESET Serial.print("écriture des données sur la carte SD..."); fichier.print("(");fichier.print(Temperature);fichier.print(", ");fichier.print(Debit);fichier.print(", ");fichier.print(Pression);fichier.println(")"); Serial.println("OK"); fichier.close(); }
P.S. : si ça peut vous aider je joins le screen du moniteur série au moment ou ça bug :
![]()
-----