Bonjour a tous.
J'essaie de comparer les numéros sur ma carte sd avec le no de l'appel entrant, et sur mon écran lcd pour mon array of String, j'ai un petit caractère qui apparaît tandis que mon array of char, il n'y a rien qui apparaît apres. Donc il me renvoie toujours que le no n'est pas a bloquer.
Cela fait deux soirées que j'essaie de résoudre mon problème, voici mon code :
Code:#include <LiquidCrystal_I2C.h> #include <Wire.h> #include <SPI.h> #include <SD.h> #define BLACKL_FILE "BLACKL.txt" bool caller_blocked = false; int NB_CALLER_TO_BLOCK = 0; #define MAX_CALLER_BLOCKED 5 // MAX D'APPELS A BLOQUER!!! String result[MAX_CALLER_BLOCKED]; File file; const int CS_PIN = 10; char num[12]; volatile int lignes = 0; LiquidCrystal_I2C lcd(0x27, 20, 4); ///////////////////////////////////////////////// bool initializeSD(){ Serial.println(F("Initializing SD card...")); pinMode(CS_PIN, OUTPUT); Serial.print(F("Initializing SD card...")); if (!SD.begin(CS_PIN)) { Serial.println(F("initialization failed!")); return false; } Serial.println(F("initialization done.")); return true; } int createFile(char filename[]) { file = SD.open(filename, FILE_WRITE); if (file) { //lcd.setCursor(0,0); //lcd.print("File created!"); Serial.println(F("File created successfully.")); return 1; } else { //lcd.setCursor(0,0); //lcd.print("File not created!"); Serial.println(F("Error while creating file.")); return 0; } } int writeToFile(char text[]) { if (file) { file.println(text); Serial.println(F("Writing to : ")); return 1; } else { Serial.println(F("Couldn't write to file")); return 0; } } void closeFile() { if (file) { file.close(); Serial.println(F("File closed")); } } int openFile(char filename[]) { file = SD.open(filename); if (file) { Serial.println(F("File opened with success!")); return 1; } else { Serial.println(F("Error opening file...")); return 0; } } String readLine(){ String received = ""; char ch; while (file.available()) { ch = file.read(); if (ch == '\n') { return String(received); } else { received += ch; } } return ""; } bool Caller_Blocked(char numero[12]){ //String myStr = numero_appel_entrant int compteur = 0; //numero+= '\0'; //String myStr = numero; Serial.println(""); int test = SD.exists(BLACKL_FILE); if (test){ openFile(BLACKL_FILE); // compteur le nombre de lignes dans le fichier while (readLine()!= "") NB_CALLER_TO_BLOCK++; // incrémente le nombre de lignes.. ou caller a bloquer... } closeFile(); Serial.print("NB_CALLER_TO_BLOCK = "); Serial.println(NB_CALLER_TO_BLOCK); char ch; // Ne pas oublier de l'ouvrir HI HI HI! :) openFile(BLACKL_FILE); while (file.available()) { ch = file.read(); if (ch != '\n'){ result[lignes] += ch; //Serial.print(ch); //Serial.println(""); compteur++; if (compteur == 12){ //result[compteur] = '\0'; lignes++; compteur = 0; if (lignes == MAX_CALLER_BLOCKED) break; } } } closeFile(); // ici result s'imprimer sur le lcd avec un petit caractère en plus voir la photo.... for (int i=0;i<NB_CALLER_TO_BLOCK;i++) Serial.println(result[i]); // ca s'imprimer bien .. lcd.setCursor(0,2); lcd.print(numero); // je ne sais pu trop quoi faire ici... j'ai tout essayer... /* for (int i=0;i<NB_CALLER_TO_BLOCK;i++){ if (strcmp(result[i].c_str(), numero) == 0) return true; } */ return false; } void setup(){ Serial.begin(9600); Serial.println("Go."); lcd.begin(); lcd.noBacklight(); delay(400); lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); if (initializeSD() == true) lcd.print("SD OK!"); else lcd.print("SD FAILED!"); delay(1000); // la condition est toujours fausse ici! :-( if (Caller_Blocked("15146620231") == true) { lcd.print("APPEL BLOQUE!"); } else { lcd.print("Appel autorise."); } } void loop(){} Merci de votre précieuse aide! Marc.
-----