INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Hilfe bei RTC und SD
06.03.2016, 11:17
Beitrag #9
RE: Hilfe bei RTC und SD
(06.03.2016 10:59)hotsystems schrieb:  Du solltest deinen Sketch in einzelne Funktionen aufteilen, dann ist eine Fehlersuche sehr viel einfacher.

Beispiel:
Code:
void loop() {
  US_Sensor_lesen();
  //Uhrzeit_lesen()
  //SD_Karte_schreiben();
}

void US_Sensor_lesen() {
// Hier deinen Code zum Sensor auslesen
}

void Uhrzeit_lesen() {
// Hier deinen Code zum Uhrzeit auslesen
}

void SD_Karte_schreiben() {
// Hier deinen Code zum SD-Karte auslesen
}

So kannst du nacheinander die einzelnen Funktionen prüfen, indem du die "Auskommentierung" entfernst. Aktuell würde nur der US-Sensor gelesen.

Du musst natürlich auch darauf achten, dass die notwendigen Variablen auch in den Funktionen gültig sind.

Danke für den Tipp,
Habe es nun versucht so zu machen wie in dem Beispiel.
Dabei ist nun aufgefallen das der Code mit der SD fehlerhaft sein muss da hier zwar die Initialisierung erfolgt aber nichts auf die SD geschrieben wird bzw. Seriell ausgegebn wird.


Code:
#include <SPI.h>
#include <SD.h>
#include <Wire.h>    // I2C-Bibliothek einbinden
#include "RTClib.h"  // RTC-Bibliothek einbinden

#define trigPin 9
#define echoPin 10

RTC_DS1307 RTC;      // RTC Modul

const int chipSelect = 4;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
  
  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(4)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");


  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

}

int handda=0 ;
String timebuffer= "";


void loop()
{
  //US_Sensor_lesen();
  //Uhrzeit_lesen();
  SD_Karte_schreiben();
}

void US_Sensor_lesen(){

// Sensorwert auslesen und Distanz berechnen

  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

}

void Uhrzeit_lesen(){

DateTime now = RTC.now();
          char timebuffer[16];
          sprintf(timebuffer, "%02d:%02d:%02d,", now.hour(), now.minute(), now.second());
          String dataString = "";
                 dataString += timebuffer;
          Serial.print(timebuffer);

  
}

void SD_Karte_schreiben(){

File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(timebuffer);
    dataFile.close();
    // print to the serial port too:
    Serial.println(timebuffer);
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }


}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 11:26
Beitrag #10
RE: Hilfe bei RTC und SD
Na prima, dann bist du jetzt einen Schritt weiter.

Vergleiche doch den Code mit dem, der bei dir schon funktioniert hat.
Oder sieh die andere Beispiele (z.B. Bitklopfer) an.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 11:27
Beitrag #11
RE: Hilfe bei RTC und SD
(06.03.2016 11:00)baron007 schrieb:  
(06.03.2016 10:46)Bitklopfer schrieb:  Moin,
du kannst aber auch mal versuchen aus dem Code von meinem Megalogger dir die passenden Zeilen rauszulesen wo du für die SD Karte benötigst.
Auf der SD wird da folgendes gemacht, beim Programmstart wird eine Datei über die Variable numFile geöffnet und eine 5 stellige Zahl gelesen, diese wird um 1 erhöht und wieder zurückgeschrieben. Dann wird daraus ein neuer Filenamen generiert in dem dann die nächsten 50.000 Datensätze abgelegt werden. Dann wird die Zahl in numFile wieder erhöht usw. Das nur zum besseren Verständnis dessen was da gecodet ist.
lgbk

Danke für den Tipp aber bin ich denn mit meinem Code so falsch unterwegs.
Ich versuchs jetzt wirklich schon seit Tagen.

Der Code den ich verwendet habe kommt ja aus dem Beispiel Datalogger in der Arduino IDE und funktioniert für sich auch.
Genauso der Code fürs RTC und der Code für den Ultraschallsensor.

Es funktioniert auch in Summe bis ich den Block mit dem RTC einfüge dann klappt es nicht mehr.
Ich weiß aber nicht warum.

...keine Ahnung was du da machst...auf jeden Fall lief mein Code schon mal Monatelang durch.
Was auch noch wichtig war ist das bedienen des ChipSelect Signales..ohne das ging es auch nicht. Und ich meine das es bei mir Abweichungen zu dem SD Beisielprogramm gibt.... ist aber schon zu lange her das ich mich noch an Details erinnere.
Was auch nicht funktioniert hat war das stecken der SD nach dem Programmstart...ein Zweites mal SD.begin aufrufen hat nicht funktioniert....da half nur ein Reset bzw. ein JMP 0 in Assembler einzufügen.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 11:32
Beitrag #12
RE: Hilfe bei RTC und SD
//Uhrzeit_lesen();

im moment ist uhrzeit lesen ja auskommentiert, dadurch steht in timebuffer nur der stringterminator drin und es stehen keine sichtbaren zeichen in der datei.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 11:54
Beitrag #13
RE: Hilfe bei RTC und SD
(06.03.2016 11:26)hotsystems schrieb:  Na prima, dann bist du jetzt einen Schritt weiter.

Vergleiche doch den Code mit dem, der bei dir schon funktioniert hat.
Oder sieh die andere Beispiele (z.B. Bitklopfer) an.

So beim Aufteilen und einzeln testen ist mir folgendes aufgefallen:

so kann ich daten auf SD schreiben
//US_Sensor_lesen();
Uhrzeit_lesen();
SD_Karte_schreiben();

so kann ich den Senor und RTS ausgeben

US_Sensor_lesen();
Uhrzeit_lesen();
//SD_Karte_schreiben();

So gibt es aber ein Problem?

US_Sensor_lesen();
//Uhrzeit_lesen();
SD_Karte_schreiben();

Dann bin ich weiter gegangen und hab langsam alles ausklammern versucht und da ist mir aufgefallen das die SD KArte anscheinend ein Problem mit folgenden Code hat der beim Ultraschallsensor dinnen ist:

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

Also als Fazit wenn ich den ultrasdchallsensor und die SD laufen lasse hängt sich das System auf und ich bekomm nur eine Zeile Seriell zurück gegeben und das wars.

Code:
#include <SPI.h>
#include <SD.h>
#include <Wire.h>    // I2C-Bibliothek einbinden
#include "RTClib.h"  // RTC-Bibliothek einbinden

#define trigPin 9
#define echoPin 10

RTC_DS1307 RTC;      // RTC Modul

const int chipSelect = 4;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  Wire.begin();
  RTC.begin();
  
  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");

}

//  pinMode(trigPin, OUTPUT);
//  pinMode(echoPin, INPUT);

int handda=0 ;
String timebuffer= "";


void loop()
{
  //US_Sensor_lesen();
  Uhrzeit_lesen();
  SD_Karte_schreiben();
}

void US_Sensor_lesen(){

// Sensorwert auslesen und Distanz berechnen
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);


  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

  Serial.println(distance);

}

void Uhrzeit_lesen(){

DateTime now = RTC.now();
          char timebuffer[16];
          sprintf(timebuffer, "%02d:%02d:%02d,", now.hour(), now.minute(), now.second());
          String dataString = "";
                 dataString += timebuffer;
          Serial.print(timebuffer);

  
}

void SD_Karte_schreiben(){

// make a string for assembling the data to log:
  String dataString = "";

  // read three sensors and append to the string:
  for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";
    }
  }

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 12:57
Beitrag #14
RE: Hilfe bei RTC und SD
Verwendet SPI nicht auch Pin 10?
Lege doch den US-Sensor auf andere Pins.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 13:03
Beitrag #15
RE: Hilfe bei RTC und SD
(06.03.2016 12:57)hotsystems schrieb:  Verwendet SPI nicht auch Pin 10?
Lege doch den US-Sensor auf andere Pins.

Das WARS DANKE DANKE DANKE an Alle es klappt Smile

HeartAngelWinkWinkWinkWinkWinkWinkTongue
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 13:18 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2016 13:42 von hotsystems.)
Beitrag #16
RE: Hilfe bei RTC und SD
(06.03.2016 13:03)baron007 schrieb:  
(06.03.2016 12:57)hotsystems schrieb:  Verwendet SPI nicht auch Pin 10?
Lege doch den US-Sensor auf andere Pins.

Das WARS DANKE DANKE DANKE an Alle es klappt Smile

HeartAngelWinkWinkWinkWinkWinkWinkTongue

Ja, prima.
Das hört sich doch gut an.

Edit:
Ok und da es jetzt ja soweit funktioniert, wollte ich das Thema "RTC" ansprechen.
Die von dir verwendete RTC. DS1307 ist sehr ungenau, geht um mehrere Sekunden pro Tag falsch.
Wenn du also eine genaue Zeit benötigst, verwende die DS3231, die hat einen temperaturkompensierten Quarz und ist damit deutlich genauer.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 125 14.10.2016 21:40
Letzter Beitrag: hotsystems
Sad Ich brauche Hilfe Prosac 4 238 09.10.2016 18:39
Letzter Beitrag: Prosac
  at24c256 Hilfe Gandalf 6 249 29.08.2016 18:59
Letzter Beitrag: MKc
Smile Progammier Neuling Codeschloss bittet um Hilfe Donalonso 2 287 27.08.2016 18:23
Letzter Beitrag: Binatone
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 454 22.08.2016 08:07
Letzter Beitrag: b3ta
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 181 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 550 06.07.2016 14:59
Letzter Beitrag: Binatone
  Hilfe beim Arduino Shield reimundko 6 460 05.06.2016 11:28
Letzter Beitrag: rpt007
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 537 23.04.2016 10:26
Letzter Beitrag: rkuehle
  Hilfe bei Liniendiagram Wetteronkel 8 727 05.03.2016 17:27
Letzter Beitrag: Wetteronkel

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste