SD- Kartenleser

Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

SD- Kartenleser

Beitrag von Admin »

Ich habe mir jetzt mal zwei SD-Kartenleser bestellt. Dass ich auch mal ein Medium zur Verfügung habe, mit dem ich grosse Dateien ablegen kann. Ja und dann eben auch einfach SD-Karte in den PC rein, und auf die Daten zugreifen. So der Plan. :)

Da gehts weiter, wenn ich die Dinger am Tisch habe.

Franz :(V):
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: SD- Kartenleser

Beitrag von Admin »

Hallooooooo Wolfgang :(V):
Ich habe die Kartenleser gefunden, die ich im Juli 2021 gekauft habe.

Hier habe ich ein Programm dazu, womit ich meine SD - Karten mit der Exccel Datei ausgelesen habe.

Grüße
Franz

Code: Alles auswählen

/*
###################################################
Die Pins des Kartenlesers sind beim Arduino Mega:
Miso Pin 50
Mosi Pin 51
SCK Pin 52
CS Pin 53
GND und VCC 5 Volt natürlich auch noch.
Achtung beim Uno ist sie auf anderen Pin´s !!
MOSI - Pin 11 auf Arduino Uno/Duemilanove/Diecimila
MISO - Pin 12 auf Arduino Uno/Duemilanove/Diecimila
CLK - Pin 13 auf Arduino Uno/Duemilanove/Diecimila
CS - hängt von Ihrem SD-Kartenschild oder -modul ab.
der wird mit  chipSelectPin = ?? bestimmt.
Der Kartenleser macht Karten bis 32GB
Mit FAT16/FAT32-Partition
###################################################
*/
#include <SPI.h>
#include <SD.h>
File myFile;
const byte chipSelectPin = 53;
const String filename = "Mappe1.csv";
char zeilenBuffer[30];
char auswerteBuffer[6][8];
byte durchgaenge = 0;
//===========================================================================================
void setup()
{
  pinMode(SS, OUTPUT);
  Serial.begin(9600);
  while (!Serial)
    Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelectPin))
  {
    Serial.println("Initialisierung fehlgeschlagen!");
    while (1);
  }
  Serial.println("Initialisierung abgeschlossen .");
}
//==========================================================================================
void loop()
{
  myFile = SD.open(filename);
  Serial.print(filename);
  if (myFile)
  {
    Serial.println(F(" geöffnet!"));
    while (myFile.available())
    {
      Serial.print(F("Durchgaenge= "));
      Serial.println(durchgaenge);
      durchgaenge ++;
      leseZeile();
      ausgabeZeile();
      teileZeile();
      ausgabeWerte();
    }
    // schließe die Datei:
    myFile.close();
    Serial.println(F(" geschlossen!"));
    while (1);
  }
  else
  {
    // Wenn die Datei nicht geöffnet wurde, drucke einen Fehler :
    Serial.print("Fehler beim öffnen von ");
    Serial.println(filename);
  }
}
//=========================================================================================
void leseZeile()
{
  char myChar = '\0';
  static byte bufferPosition = 0;
  if (bufferPosition == 0) memset(zeilenBuffer, '\0', sizeof(zeilenBuffer));
  while (myFile.available() && myChar != '\n')
  {
    myChar = myFile.read();
    if (isPrintable(myChar))
    {
      zeilenBuffer[bufferPosition] = myChar;
      bufferPosition++;
    }
  }
  // Hier ist ZeilenEnde / DateiEnde
  bufferPosition = 0;
}
//=========================================================================================
void ausgabeZeile()
{
  Serial.print(F("eingelsene Zeile ist: "));
  Serial.println(zeilenBuffer);
}
//=========================================================================================
void teileZeile()
{
  // zeilenbuffer in auswerteBuffer umschreiben
  memset(auswerteBuffer, '\0', sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]));
  strcpy (auswerteBuffer[0], strtok(zeilenBuffer, ";"));
  strcpy (auswerteBuffer[1], strtok(NULL, ";"));
  strcpy (auswerteBuffer[2], strtok(NULL, ";"));
  strcpy (auswerteBuffer[3], strtok(NULL, ";"));
  strcpy (auswerteBuffer[4], strtok(NULL, ";"));
  strcpy (auswerteBuffer[5], strtok(NULL, ";"));
  Serial.println(F("Puffer geteilt!"));
}
//========================================================================================
void ausgabeWerte()
{
  for (byte b = 0; b < sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]); b++)
  {
    Serial.print(F("Wert "));
    Serial.print(b);
    Serial.print(F(" ist: "));
    Serial.println(auswerteBuffer[b]);
  }
}
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: SD- Kartenleser

Beitrag von Admin »

Ich habe hier das Programm zum SD-Karten Auslesen, um meinen Kreuztisch zu steuern. Ich habe dem Kreuztisch die Kurbeln geklaut, und fahre den jetzt mit Nema 23 Motoren. das Projekt klappt schon recht gut. Wer dazu mehr sehen will, geht bitte auf den Link.

Franz

PS: Hier das Programm zum Auslesen der SD - Karte für den Kreuztisch:

Code: Alles auswählen

/*Die Pins des Kartenlesers sind beim Arduino Mega:
  Miso Pin 50
  Mosi Pin 51
  SCK Pin 52
  CS Pin 53
  GND und VCC 5 Volt natürlich auch noch.
  Der Kartenleser macht Karten bis 32GB
  Mit FAT16/FAT32-Partition
*/

#include <SPI.h>
#include <SD.h>
File myFile;
const byte chipSelectPin = 53;
const String filename = "Mappe1.csv";
char zeilenBuffer[30];
char auswerteBuffer[6][8];
byte durchgaenge = 0;
//===========================================================================================
void setup()
{
  pinMode(SS, OUTPUT);
  Serial.begin(9600);
  while (!Serial)
    Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelectPin))
  {
    Serial.println("Initialisierung fehlgeschlagen!");
    while (1);
  }
  Serial.println("Initialisierung abgeschlossen .");
}
//==========================================================================================
void loop()
{
  myFile = SD.open(filename);
  Serial.print(filename);
  if (myFile)
  {
    Serial.println(F(" geöffnet!"));
    while (myFile.available())
    {
      Serial.print(F("Durchgaenge= "));
      Serial.println(durchgaenge);
      durchgaenge ++;
      leseZeile();
      ausgabeZeile();
      teileZeile();
      ausgabeWerte();
    }
    // schließe die Datei:
    myFile.close();
    Serial.println(F(" geschlossen!"));
    while (1);
  }
  else
  {
    // Wenn die Datei nicht geöffnet wurde, drucke einen Fehler :
    Serial.print("Fehler beim öffnen von ");
    Serial.println(filename);
  }
}
//=========================================================================================
void leseZeile()
{
  char myChar = '\0';
  static byte bufferPosition = 0;
  if (bufferPosition == 0) memset(zeilenBuffer, '\0', sizeof(zeilenBuffer));
  while (myFile.available() && myChar != '\n')
  {
    myChar = myFile.read();
    if (isPrintable(myChar))
    {
      zeilenBuffer[bufferPosition] = myChar;
      bufferPosition++;
    }
  }
  // Hier ist ZeilenEnde / DateiEnde
  bufferPosition = 0;
}
//=========================================================================================
void ausgabeZeile()
{
  Serial.print(F("eingelsene Zeile ist: "));
  Serial.println(zeilenBuffer);
}
//=========================================================================================
void teileZeile()
{
  // zeilenbuffer in auswerteBuffer umschreiben
  memset(auswerteBuffer, '\0', sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]));
  strcpy (auswerteBuffer[0], strtok(zeilenBuffer, ";"));
  strcpy (auswerteBuffer[1], strtok(NULL, ";"));
  strcpy (auswerteBuffer[2], strtok(NULL, ";"));
  strcpy (auswerteBuffer[3], strtok(NULL, ";"));
  strcpy (auswerteBuffer[4], strtok(NULL, ";"));
  strcpy (auswerteBuffer[5], strtok(NULL, ";"));
  Serial.println(F("Puffer geteilt!"));
}
//========================================================================================
void ausgabeWerte()
{
  for (byte b = 0; b < sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]); b++)
  {
    Serial.print(F("Wert "));
    Serial.print(b);
    Serial.print(F(" ist: "));
    Serial.println(auswerteBuffer[b]);
  }
}
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: SD- Kartenleser

Beitrag von Admin »

auf der Suche nach dem Befehl "memset" bin ich auf diesen Link gestossen. Über den werde ich mich jetzt mal fürs Erste hermachen. :razz: Dann schaumal weiter.

Franz

Dann habe ich da noch was gut Verständliches gefunden.

Hier ist noch ein C-Kurs. Glaube das kann ich auch noch was brauchen.
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste