Cześć,
Temat dotyczący zapisów wartości na karcie SD był wielokrotnie sam znalazłem wiele takich rozwiązań każdy podobny do siebie. Jednak u mnie problem jest z samym zgraniem kilku funkcji programu.
Mój projekt ma służyć do pomiarów wiatru za pomocą czujnika wiatru czaszowego z kontaktronem. Do tego wykorzystany będzie wyświetlacz OLED do wyświetlania aktualnej prędkości wiatru. A na końcu pomiar ma być zapisywany na karcie SD w pliku o formacie .txt.
Problem pojawia się w przypadku dodania zapisów dla modułu karty microSD. Program zaczyna się wieszać i nie wykonuje pomiarów oraz nic nie wyświetla.
Czy jest może ktoś kto rzucił by okiem na kod może da się jakoś zgrać wszystkie funkcje programu?
Temat dotyczący zapisów wartości na karcie SD był wielokrotnie sam znalazłem wiele takich rozwiązań każdy podobny do siebie. Jednak u mnie problem jest z samym zgraniem kilku funkcji programu.
Mój projekt ma służyć do pomiarów wiatru za pomocą czujnika wiatru czaszowego z kontaktronem. Do tego wykorzystany będzie wyświetlacz OLED do wyświetlania aktualnej prędkości wiatru. A na końcu pomiar ma być zapisywany na karcie SD w pliku o formacie .txt.
Problem pojawia się w przypadku dodania zapisów dla modułu karty microSD. Program zaczyna się wieszać i nie wykonuje pomiarów oraz nic nie wyświetla.
Czy jest może ktoś kto rzucił by okiem na kod może da się jakoś zgrać wszystkie funkcje programu?
Kod:
#include <SD.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <SPI.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
File plik;
//Ĺrednica anemometru
float diameter = 2.75;
float mph; //Utworzenie zmiennej mile/godzinÄ
float kmh; //Utowrzenie zmiennej km/h
// Odczyt obrotĂłw (RPM)
int half_revolution_time = 0; //Utworzenie zmiennej przechowujÄ
cej
int rpm = 0; //Utworzenie zmiennej RPM (obroty)
unsigned long lastmillis = 0; //Utworzenie zmiennej long lastmilis
void rpm_fan() {
unsigned long static last_event = 0;
if (millis() - last_event < 5) { //debouncing
return;
}
half_revolution_time = (millis() - last_event);
last_event = millis();
}
void setup() {
Serial.begin(9600); // Uruchomienie portu szeregowego z prÄdkoĹciÄ
9600
pinMode(2, INPUT_PULLUP); // Aktywowanie rezystora podciÄ
gajÄ
cego na pinie 8
attachInterrupt(digitalPinToInterrupt(2), rpm_fan, FALLING);
// Przypisanie funkcji rpm_fan przerwania zewnÄtrznego
// Przerwanie zostanie wykonane jeĹli stan zmieni siÄ z wysokiego na niski (Falling)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
Serial.print("Włączanie karty SD...");
if(SD.begin(4)){
Serial.println("Błąd karty SD");
return;
}
Serial.println("Karta SD gotowa");
}
void loop() {
if (millis() - lastmillis >= 1000) {
//Aktualizuj co sekundÄ, bÄdzie to rĂłwnoznaczne z odczytem czÄstotliwoĹci (Hz)
lastmillis = millis(); // Aktualizacja lastmillis
noInterrupts(); // W trakcie kalkulacji wyĹÄ
cz obsĹugÄ przerwaĹ
rpm = (30000 / half_revolution_time) ;
interrupts() ; //PrzywrĂłÄ przerwania
mph = diameter / 12 * 3.14 * rpm * 60 / 5280;//Odczyt prÄdkoĹci wiatru w milach/godzinÄ
mph = mph * 3.5; // Kalibracja bĹÄdu odczytu, wartoĹÄ naleĹźy dobraÄ we wĹasnym zakresie
kmh = mph * 1.609;// Zamiana mil/godzinÄ na km/h
}
Serial.print("KMH=\t"); //PrzesĹanie odczytanych danych do portu szeregowego
Serial.println(kmh);
Serial.println();
plik = SD.open("pomiar.txt", FILE_WRITE);
if (plik){
plik.println(kmh);
plik.close();
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Wind speed");
display.setTextSize(2);
display.setCursor(0,17);
display.print(kmh);
display.setTextSize(2);
display.println("km/h");
display.display();
}