Hallo zusammen.
Bin gänzlich neu hier und gleich folgende Frage zu einem ersten Projekt "Ultraschallsensor auslesen und auf SD-Karte schreiben":
Ich habe nach vielem Beispiele kopieren und versuchen in einigen Erwähnungen, Seiten und Clips gesehen, dass man die SD-Karte zuerst "öffnen" muss (digital versteht sich :)), damit sie "bereit" ist, beschrieben zu werden - danach mit "close" wieder schliessen.
Was mache ich alles falsch? Alle läuft einwandfrei, nur kriege ich keine USS-Werte auf die SD-Karte....
Ich stelle mal den ganzen Code rein - mit sehr vielen Ausklammerungen, aber wollte die Beispiele nicht erneut suchen, falls ich etwas ändere:
//Libraries importieren falls nötig oder gewünscht :)
#include <SPI.h>
#include <SD.h>
#include <Arduino.h>
#include <HCSR04.h>
//Deklarieren der Variablen und an welchen Pins die angeschlossen sind
HCSR04 hc(9, 8);
int LEDrt = 5;
int zaehler = 0;
int tiltsensor = 2;
int tiltVar;
int LEDtilt = 7;
const int buzzer = 4;
int i = 0;
const int chipSelect = 10; // CS, wie auch MISO, MOSI, SCK ist vom Board (hier Arduino UNO R3) gem. Pinlayout gegeben!
int intArray[10];
int intArrAbstand[10];
// ##################################################################
// ##################################################################
// ##################### START - VOID SETUP #########################
// ##################################################################
// ##################################################################
//Deklarieren aller Pins mit deren Funktion am Pin (IN- oder OUTPUT)
void setup() {
// put your setup code here, to run once:
pinMode(LEDrt, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(tiltsensor, INPUT);
pinMode(LEDtilt, OUTPUT);
digitalWrite(tiltsensor, HIGH);
// ##################################################################
// ##################### START - SD-Kartenleser #####################
// ##################################################################
// Text-Datei auf der SD-Karte erstellen. Hier der Name "integers.txt"
String myFile = "Ultraschallwerte.txt"; // for ESP32: "/integers.txt";
// int intArrAbstand[10] = { 442, 4124, 41242, 171, 12134, 516, 44, 11, 0, 7777 };
//int intArrAbstand[10] = { 11, 22, 33, 171, 44, 55, 66, 33, 0, 1 };
// Die Kommunikationsgeschwindigkeit des Arduinos mit der SD-Karte definieren
Serial.begin(115200);
// while(!Serial){} // needed for some boards
// delay(1000); // helps in case of incomplete output on serial monitor
// Feststellen, ob SD-Karte vorhanden ist
if (!SD.begin(chipSelect)) {
Serial.println("SD-Karte nicht vorhanden"); // Ausgabetext wenn nicht vorhanden
while (1)
;
} else {
Serial.println("SD-Card initialisiert!"); // Ausgabetext, wenn SD-Karte vorhanden ist und auch initialisiert wurde
}
// Text-Datei entfernen bzw. Inhalt löschen (?? Hä? Wüki?)
//SD.remove(myFile);
// Text-Datei erstellen und fürs Beschreiben vorbereiten :D
File dataFile = SD.open(myFile, FILE_WRITE);
// Wenn Text-Datei erstellen ("open"), dann schreibe die Daten auf die SD-Karte
if (dataFile) {
dataFile.println("Text-Datei hiermit ready.");
dataFile.close();
Serial.println("Daten wurden auf SD-Karte geschrieben.");
} else {
Serial.println("Konnte Text-Datei nicht öffnen!");
}
// ##################################################################
// ##################### START - FUNKTIONEN #########################
// ##################################################################
// void valueAbstandSchreiben(int Abstand) {
// dataFile = SD.open(myFile, FILE_WRITE);
// int Abstand =
// float temperature = dht.readTemperature();
// float humidity = dht.readHumidity();
// float pressure = bmp.readPressure() / 100.0F;
// float uvLevel = analogRead(A0);
// dataFile.print("Temperature: ");
// dataFile.print(temperature);
// dataFile.println(" °C");
// Serial.print("Temperature: ");
// Serial.print(temperature);
// Serial.println(" °C");
// dataFile.close();
// delay(1000);
// dataFile.print(Abstand);
// dataFile.println(" cm");
// delay(20);
// }
// ##################################################################
// ##################### ENDE - FUNKTIONEN #########################
// ##################################################################
// if (dataFile) {
// for (int i = 0; i < 10; i++) {
// //dataFile.println(intArray[i]);
// dataFile.println(intArrAbstand[10]);
// }
// dataFile.close();
// Serial.println("Daten wurden auf SD-Karte geschrieben.");
// } else {
// Serial.println("Konnte Text-Datei nicht öffnen!");
// }
// ##################################################################
// ##################### ENDE - SD-Kartenleser #####################
// ##################################################################
// Die Kommunikationsgeschwindigkeit des Arduinos für die Ausgabe auf dem "Serieller Monitor" der Software Arduino-IDE definieren
Serial.begin(9600);
tone(buzzer, 1000, 100);
delay(50);
while (zaehler < 3) {
digitalWrite(LEDrt, HIGH);
delay(250);
digitalWrite(LEDrt, LOW);
delay(250);
zaehler++;
}
}
// ##################################################################
// ##################################################################
// ##################### ENDE - VOID SETUP #########################
// ##################################################################
// ##################################################################
void loop() {
tiltVar = digitalRead(tiltsensor);
delay(20);
if (tiltVar == LOW) {
digitalWrite(LEDtilt, LOW);
while (i < 5) {
delay(100);
digitalWrite(LEDrt, HIGH);
delay(50);
digitalWrite(LEDrt, LOW);
delay(50);
i++;
}
}
else {
digitalWrite(LEDtilt, HIGH);
digitalWrite(LEDrt, HIGH);
delay(50);
digitalWrite(LEDrt, LOW);
delay(50);
long Abstand = hc.dist();
delay(20);
dataFile = SD.open(myFile, FILE_WRITE);
dataFile.println("Abstand: ");
dataFile.print(Abstand);
dataFile.println(" cm");
Serial.println("Distanz: ");
Serial.print(Abstand);
Serial.println(" Zentimeter");
dataFile.close();
delay(1000);
// if (Abstand != "") {
// valueAbstandSchreiben(Abstand);
// };
Serial.println(Abstand); //return current distance (cm) in serial
delay(60); // we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.
//intArrAbstand[10] = { Abstand };
switch (Abstand) {
case 150 ... 200:
tone(buzzer, 500, 20);
//delay(500);
digitalWrite(LEDrt, HIGH);
delay(500);
digitalWrite(LEDrt, LOW);
delay(500);
break;
case 100 ... 149:
tone(buzzer, 600, 20);
delay(10);
digitalWrite(LEDrt, HIGH);
delay(500);
digitalWrite(LEDrt, LOW);
delay(500);
break;
case 50 ... 99:
tone(buzzer, 700, 20);
delay(10);
digitalWrite(LEDrt, HIGH);
delay(400);
digitalWrite(LEDrt, LOW);
delay(400);
break;
case 40 ... 49:
tone(buzzer, 800, 20);
delay(10);
digitalWrite(LEDrt, HIGH);
delay(250);
digitalWrite(LEDrt, LOW);
delay(250);
break;
case 30 ... 39:
tone(buzzer, 900, 20);
delay(10);
digitalWrite(LEDrt, HIGH);
delay(150);
digitalWrite(LEDrt, LOW);
delay(150);
break;
case 20 ... 29:
tone(buzzer, 1000);
delay(10);
digitalWrite(LEDrt, HIGH);
delay(100);
digitalWrite(LEDrt, LOW);
delay(100);
break;
}
i = 0;
}
// Serial.println("The distance to obstacles in front is: ");
// long Abstand = ultrasonic.MeasureInCentimeters(); // two measurements should keep an interval
// Serial.print(Abstand);//0~400cm
// Serial.println(" cm");
// delay(250);
}


