18-01-2020, 13:55
Witam. Mam problem z kodem (lub czymś innym).
Postanowiłem zrobić czujnik wilgotności i temperatury z zapisem wartości na SD. Niestety po inicjalizacji karty w pętli LOOP wyświetlacz zamiera i nic nie wyświetla a na karcie dane nie są zapisywane. Jedynie serial monitor pokazuje że karta SD jest odpalona. Dodam też że wszystkie przykłady dla SD działają i zapisują dane na karcie jak i wyświetlają w Serial Monitorze.
Moduł SD to HW 125 a wyświetlacz to OLED na I2C. Do tego Buzzer i czunik ognia oraz zegarek HW 111. I wszystko z nimi jest ok do czasu odpalenia
Całość kodu wygląda tak:
Wiem że kod nie jest najlepszy ale może coś poradzicie?
Postanowiłem zrobić czujnik wilgotności i temperatury z zapisem wartości na SD. Niestety po inicjalizacji karty w pętli LOOP wyświetlacz zamiera i nic nie wyświetla a na karcie dane nie są zapisywane. Jedynie serial monitor pokazuje że karta SD jest odpalona. Dodam też że wszystkie przykłady dla SD działają i zapisują dane na karcie jak i wyświetlają w Serial Monitorze.
Moduł SD to HW 125 a wyświetlacz to OLED na I2C. Do tego Buzzer i czunik ognia oraz zegarek HW 111. I wszystko z nimi jest ok do czasu odpalenia
Kod:
File plik = SD.open("pomiar.txt", FILE_WRITE);
Kod:
plik.print("otwarte");
Kod:
plik.print("zamkniete");
Kod:
plik.close();
Całość kodu wygląda tak:
Kod:
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
#include <OneWire.h>
#include <Wire.h>
Adafruit_SSD1306 display(4);
//wyświetlacz koniec
//sensor ciśnienia i temperatury
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
//unsigned long delayTime;
//sensor ciśnienia i temperatury koniec
//zegar rtc
#define DS1307_ADDRESS 0x68 //adres zegara
RTC_Millis RTC;
//zegar rtc koniec
int year;
int ogien = A3; //ustawienie zmiennej do czujnika ognia
int BUZZER = A1; // SYGNAŁ DLA BUZER
int wilgotnosc;
byte pozar;
char dt[8]; //ustawić zmienne dla zegarka dt
const int chipSelect = 4;
void setup() {
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
//ustawienie adresu I2C dla sensora temp i ciśnienia
unsigned status;
status = bme.begin(0x76);
//sensor ciśnienia i temperatury koniec
//zegar
RTC.begin(DateTime(__DATE__, __TIME__));
//koniec zegar
pinMode(ogien, INPUT); //ustawienie portu czujnika ognia
pinMode(A1, OUTPUT);
Serial.begin(9600);
while (!Serial) {
;
}
Serial.println("Inicjowanie kardty SD ...");
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
while (1);
}
Serial.println("Karta SD uruchomiona.");
}
void loop() {
File plik = SD.open("pomiar.txt", FILE_WRITE);
plik.print("otwarte");
plik.print("zamkniete");
plik.close();
DateTime now = RTC.now();
pozar = digitalRead(ogien);
if (pozar == LOW){
tone(A1, 1000, 100);
}; //koniec instrukcji alarmu pożaru
//wyswietlacz
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
//data i godzina
display.setCursor(4,3);
display.println(now.year());
display.setCursor(29,3);
display.println("-");
display.setCursor(35,3);
display.println(now.month());
display.setCursor(49,3);
display.println("-");
display.setCursor(54,3);
display.println(now.day(), DEC);
display.setCursor(72,3);
display.println(now.hour(), DEC);
display.setCursor(82,3);
display.println(":");
display.setCursor(88,3);
display.println(now.minute(), DEC);
display.setCursor(99,3);
display.println(":");
display.setCursor(104,3);
display.println(now.second(), DEC);
//koniec daty i godziny
display.setCursor(4,12);
display.println("TEMP");
display.setCursor(50,12);
display.println(bme.readTemperature());
display.setCursor(85,12);
display.println("C");
display.setCursor(4,21);
display.println("WILGOTNOSC");
display.setCursor(70,21);
display.println(bme.readHumidity());
display.setCursor(105,21);
display.println("%");
display.drawRect(1, 1, 126, 30, WHITE);
display.display();
delay(1000);
display.clearDisplay();
//koniec wyswietlacza
}