Marele Savant Postat Iunie 28, 2023 Partajează Postat Iunie 28, 2023 va cer si eu ajutorul pentru creera unui logger de temperatura. In esenta citeste temperatura printr-un DS18B20, o afiseaza pe un LCD 1602 impreuna cu data si ora. Asta o face bine. De asemenea ar trebui sa inregistreze aceste informatii pe un SD card, modulul SPI pentru arduino. Asta nu o mai face, detecteaza prezenta cardului dar nu scrie nimic pe acesta. Initial ar trebui sa creeze un fisier denumit cu data zilei in care se face inregistrarea, pentru asta exista si un DS1307. Monitorul serial afisaza: 22:26:35.899 -> Error opening data file 22:26:37.687 -> Temperature: 28.75 C, Date: 28/6/2023 22:26 22:26:37.687 -> Error opening data file 22:26:39.475 -> Temperature: 28.75 C, Date: 28/6/2023 22:26 22:26:39.522 -> Error opening data file 22:26:41.284 -> Temperature: 28.75 C, Date: 28/6/2023 22:26 22:26:41.284 -> Error opening data file un alt .ino pentru testarea SD card functioneaza perfect, cu aceleasi conexiouni electrice, creeaza un fisier si scrie in el. Codul pentru logger este: #include <Wire.h> #include <RTClib.h> #include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal.h> #include <SD.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); RTC_DS1307 rtc; OneWire oneWire(2); DallasTemperature sensors(&oneWire); bool sdCardPresent = false; const int chipSelectPin = 10; String getFileName(DateTime now); String leadingZero(int number); void setup() { lcd.begin(16, 2); Serial.begin(9600); rtc.begin(); sensors.begin(); lcd.clear(); lcd.print("Temperature Logger"); lcd.setCursor(0, 1); lcd.print("Initializing..."); // Verifică dacă modulul SD card este prezent if (SD.begin(chipSelectPin)) { sdCardPresent = true; lcd.clear(); lcd.print("SD Card Found"); Serial.println("SD Card Found"); delay(2000); // Așteaptă 2 secunde pentru a afișa mesajul "SD Card Found" } else { lcd.clear(); lcd.print("SD Card Not Found"); Serial.println("SD Card Not Found"); delay(2000); // Așteaptă 2 secunde pentru a afișa mesajul "SD Card Not Found" } } void loop() { DateTime now = rtc.now(); float temperature = -127; // Valoare implicită în cazul în care citirea temperaturii eșuează // Citirea temperaturii sensors.requestTemperatures(); temperature = sensors.getTempCByIndex(0); lcd.clear(); lcd.print("Temp: "); lcd.print(temperature); lcd.print(" C"); lcd.setCursor(0, 1); // lcd.print("Date: "); lcd.print(now.day()); lcd.print("/"); lcd.print(now.month()); lcd.print("/"); lcd.print(now.year()); lcd.print(" "); lcd.print(now.hour()); lcd.print(":"); lcd.print(now.minute()); // Afișarea valorilor pe Serial Monitor Serial.print("Temperature: "); Serial.print(temperature); Serial.print(" C, Date: "); Serial.print(now.day()); Serial.print("/"); Serial.print(now.month()); Serial.print("/"); Serial.print(now.year()); Serial.print(" "); Serial.print(now.hour()); Serial.print(":"); Serial.print(now.minute()); Serial.println(); // Scrierea datelor pe SD card if (sdCardPresent) { String fileName = getFileName(now); File dataFile = SD.open(fileName.c_str(), O_WRITE | O_CREAT | O_APPEND); if (dataFile) { dataFile.print(now.day()); dataFile.print("/"); dataFile.print(now.month()); dataFile.print("/"); dataFile.print(now.year()); dataFile.print(" "); dataFile.print(now.hour()); dataFile.print(":"); dataFile.print(now.minute()); dataFile.print(","); dataFile.println(temperature); dataFile.close(); } else { Serial.println("Error opening data file"); } } delay(1000); } String leadingZero(int number) { if (number < 10) { return "0" + String(number); } else { return String(number); } } String getFileName(DateTime now) { String fileName = String(now.year(), DEC); fileName += "-"; fileName += leadingZero(now.month()); fileName += "-"; fileName += leadingZero(now.day()); fileName += ".txt"; return fileName; } vede cineva ce este gresit? Link spre comentariu
merck Postat Iunie 29, 2023 Partajează Postat Iunie 29, 2023 (editat) Adauga aceasta linie de cod: Serial.println(dataFile); dupa linia ta de cod: Serial.println("Error opening data file"); adica sa ai asa : Serial.print("Error opening data file. Error code: "); Serial.println(dataFile); ca sa vedem cum se executa: File dataFile = SD.open(fileName.c_str(), O_WRITE | O_CREAT | O_APPEND); P.S. Tie iti apare mesajul SD Card Found afisat pe LCD si in monitorul serial? Ca ai doua linii lcd.print("SD Card Found"); Serial.println("SD Card Found"); si nu vad sa iti apara in monitorul serial: SD Card Found. Vad ca iti apare doar mesajul: Error opening data file Editat Iunie 29, 2023 de merck Link spre comentariu
nico_2010 Postat Iunie 29, 2023 Partajează Postat Iunie 29, 2023 Formatati codurile cu butonul "<>" din editor. Aici ai exemplul pentru utilizarea corecta a SD card: https://docs.arduino.cc/learn/programming/sd-guide Link spre comentariu
Marele Savant Postat Iunie 29, 2023 Autor Partajează Postat Iunie 29, 2023 Da, creaza un fisier ''test.txt'' si scrie in el. Link spre comentariu
Marele Savant Postat Iunie 29, 2023 Autor Partajează Postat Iunie 29, 2023 (editat) Multumesc mult pentru ajutor!!! Sper sa ma pot revansa. Da, mi-a scapat lungimea numelui de fisier, dar am cunostiinte foare vagi de programare! functioneaza ambele variante de mai sus. Indraznesc sa mai vin cu doua probleme, daca si cind are cineva timp: 1. primele 9 minute din ora sint afisate aiurea, adica fara un zero inainte: 29-6-2023 19:58, Temp: 28.31 29-6-2023 19:59, Temp: 28.25 29-6-2023 19:59, Temp: 28.25 29-6-2023 20:0, Temp: 28.25 29-6-2023 20:0, Temp: 28.25 29-6-2023 20:0, Temp: 28.25 29-6-2023 20:1, Temp: 28.25 29-6-2023 20:1, Temp: 28.25 29-6-2023 20:1, Temp: 28.19 29-6-2023 20:2, Temp: 28.19 2. ar mai fi nevoie de o pauza variabila doar la scrierea pe SD card. Adica pe lcd sau serial monitor sa fie afisata continuu, dar pe card inregistrarile sa fie mai rare, la 20-30-60 de secunde. Am incercat eu ceva, dar intirzierea respectiva apare la toate afisarile, deci si la lcd sau serial mon. Editat Iunie 29, 2023 de Marele Savant Link spre comentariu
Marele Savant Postat Iunie 30, 2023 Autor Partajează Postat Iunie 30, 2023 (editat) Multumesc din nou pentru ajutor. Este aproape OK, chestia cu minutele nu mi-a iesit, dar nu este inca urgent! Caut si pe net poate gasesc ceva gata facut! Editat Iunie 30, 2023 de Marele Savant Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum