ich bin Kfz-Mechatroniker und übe mich neuerdings als Neuling im Arduino programmieren. Wir haben zur Zeit ein Projekt in der Arbeit und möchte mich mit Einbringen.
Der folgender Sketch liest die erste Zeile der SD-Karte ein, was immer Zahlen sind (Restlaufzeit in ms) und soll nun diese als Variable abspeichern, damit ich an einem späteren Zeitpunkt die Restlaufzeit starten kann. Die Zeit kann dabei aber auch mehrere Stunden sein.
Abgespeichert ist sie so in "stringBuffer", nur richtig? Es werden mir über das Serial (später Lcd) die korrekten Daten von 2885 angezeigt.
Wie kann ich "stringBuffer" als "long" verwenden?
Hab schon sehr viel gesucht, aber ich komme nicht weiter. Vielleicht mit "atoi" oder "ptr" ?
Vielen Dank im Voraus für die Hilfe.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <mcp_can.h>
#include <mcp_can_dfs.h>
#include <SPI.h>
#include <SdFat.h>
SdFat SD;
const int SERIAL_BAUDRATE = 19200;
const int SPI_CS_SD = 4;
const int STRING_BUFFER_SIZE = 15;
char stringBuffer[STRING_BUFFER_SIZE];
int i = 1;
SdFile file;
bool readLineFromSD(const char* filename, char* buffer, int bufferSize, int line)
{
if (SD.begin())
{
if (file.open(filename, O_READ))
{
int count = 1;
while (file.fgets(buffer, bufferSize) > 0)
{
if (count == line)
break;
count++;
}
file.close();
if (count != line)
return false;
return true;
}
}
return false;
}
void setup() {
Serial.begin(SERIAL_BAUDRATE);
readLineFromSD("Data_01.txt", stringBuffer, sizeof(stringBuffer), i);
Serial.println(stringBuffer);
}
void loop() {}
Vielen Dank für die links, haben mir schon weitergeholfen.
Wie es scheint sollte ich mit "strtol" (Convert string to long integer) weiterarbeiten, bzw. mich weiterbeschäftigen.
Nur noch herausfinden wie ich das am besten schreibe, vielleicht hat jemand eine Idee?
Wenn Du auf den kleinen Arduinos arbeitest, ist die Vervendung der Klasse String nicht unbedingt eine gute Idee. Besser kommst Du, wenn Du in char-Arrays (C-strings) einliest und mit atoi/atol umwandelst.
Hier habe ich mal ein paar Infos zur Arbeit mit Zeichenketten zusammen gestellt.
Danke dafür. Mit currentMillis hab ich nun eine Loop-Laufzeit von 28sek. Woweit sogut. Hab aber noch folgendes Problem:
Ich kann/darf die Zeit von "2885" ms nicht im "char stringBuffer" vorgeben, da ich sie mir aus der SD karte holen muss. Es gibt verschiedene vorgegebene Laufzeiten, die auf SD-Karten gespeichert sind, die auch mehrere Stunden sein können. Am Ende hab ich das so geplant das dass wie eine Stopuhr aussieht die rückwärts läuft.
Außerdem weiß ich noch nicht wie ich millis(); bei 0 beende. Im Serial läuft nun die Zeit von 2885ms ab hört aber bei "0" nicht auf. Kann mir jemand da weiterhelfen?
Vielen Dank.