=deutsch brauche hilfe für programm schreiben

tut mir erstens leid das dieses topic im englischen forum ist keine ahnung wie ich zum deutschen komme

alsoooo ich bin totaler anfänger, habe vor alles über arduino zu lernen da es mich sehr fazniniert!

aber als erstes projekt habe ich mir etwas kompliziertes zur aufgabe gemacht.
habe es von einer amerikanischen seite. und habe es 1:1 kopiert

habe es von dieser seite und habe mir darauf diesen HID ProxPro sogar 2 mal bestellt aus USA (musste 4 wochen darauf warten^^). habe auch alle arduino teile bestellt welche nötig sind.
habe im übrigen auch noch einen ganzen koffer voll mit arduino teile für meine weiter zukunft und eigene projekte :wink:

habe alles 1:1 gleich zusammengebaut auch mit LCD bildschirm

nur haperts am code... auf der seite hat der Autor auch seinen code veröffentlich und ich spiele mit diesem seit tagen herum aber wie gesagt ich habe auch noch 0 ahnung vom programmieren. Ich dachte ich kopiere alles 1:1 und es wird funbktionieren...
dem ist aber leider nicht so..

hier ist der code den ich habe und er zeigt mir immer ein problem an.. immer an der gleichen zeile welche lautet:

"SdFat sd; // file system object for SD card" als problem steht :" sdFat does not name a type"

schaut euch das projekt doch mal an ich find es echt interressant aber für mein erstes projekt ist es natürlich etwas zu schwer das ist mir auch klar, darum brauche ich auch hilfe...

also mein code lautet

# Include <SoftwareSerial.h>
# Include <SdFat.h>

// Da das LCD nicht sendet Daten zurück an den Arduino, sollten wir erst definieren die txPin
# Define txPin 4 // Weiß Draht von Serien-LCD-Bildschirm
const int LCDdelay = 10; // konservativ, 2 tatsächlich funktioniert

// SD-Karte variables
const uint8_t ChipSelect = 10; // CS von SD bis 10 auf Arduino Pin
SdFat sd; // file system object for SD card
SdFile File; // Datei-Objekt
char dataFile [] = "cards.txt"; // Datei zum Karten-IDs zu speichern

unsigned long bitHolder1 = 0;
unsigned long bitHolder2 = 0;
unsigned int bitcount = 0;
unsigned long cardChunk1 = 0;
unsigned long cardChunk2 = 0;
int parity = 0;
long previousMillis = 0; // wird letzte Mal aktualisiert wurde LCD speichern
long Intervall = 3000; // Intervall für die Anzeige zurückzusetzen (Millisekunden)

// Start-Code für DATA0 und DATA1 Interrupts, um die binären Daten von der Karte zu bekommen
// Aus welchem ??Grund, wenn der Mikro DATA1 und DATA0 Kabel müssen rückgängig gemacht werden
void DATA1(void) {
    bitcount + +;
    if(bitcount <23) {
      bitHolder1 = bitHolder1 << 1;
    }
    else {
      bitHolder2 = bitHolder2 << 1;
    }
}

void DATA0(void) {
   bitcount + +;
   if(bitcount <23) {
      bitHolder1 = bitHolder1 << 1;
      bitHolder1 | = 1;
   }
   else {
     bitHolder2 = bitHolder2 << 1;
     bitHolder2 | = 1;
   }
}

// End Code for DATA0 und DATA1

// beginn Code for LCD

SoftwareSerial LCD(0, txPin);
/ /
void ClearLCD(){
LCD.write(0xFE); // Befehl Flagge
LCD.write(0x01); // clear Befehl.
delay(LCDdelay);
}

// End-Code für LCD

// Start-Code für SD-Karte

void writeSD() {
  
    // Die Datei öffnen. beachten Sie, dass nur eine Datei kann zu einer Zeit offen,
    // So müssen Sie diese vor dem Öffnen einer anderen schließen.
    ofstream Datei(dataFile, ios :: out | ios :: app);
  
    // Wenn die Datei vorhanden ist, es zu schreiben:
    if (file) {
      file << bitCount;
      file << "bit card:";
      file << hex << cardChunk1;
      file << hex << cardChunk2;
      file << ", BIN:";
      for (int i = 19; i> = 0; i -) {
        Datei << bitRead(cardChunk1, i);
      }
      for (int i = 23; i> = 0; i -) {
        file << bitRead(cardChunk2, i);
      }
      file << endl;
      
      // Print an die serielle Schnittstelle zu
       Serial.println("Schrieb Daten auf SD-Karte");
    }
else {
ClearLCD();
Lcd.print("Error writing to file");
}
}

// End-Code für SD-Karte

void setup() {
  
Serial.begin(57600);
  
  clearinterrupts();
  
  attachInterrupt(0, DATA0, RISING); // DATA0 (grün) auf HID Leser, Pin 2 auf Arduino
  attachInterrupt(1, DATA1, RISING); // DATA1 (weiß) auf HID Leser, Pin 3 auf Arduino
  delay(10);
  // Initialisieren LCD-Bildschirm
/ / pinMode(txPin, OUTPUT);
/ / LCD.begin(9600);
  
  // Stellen Sie sicher, dass die Standard-Chip-Select-Pin 10 eingestellt ist
  // Ausgabe, auch wenn Sie sie nicht benutzen:
  // Setup Ausgangs-Pin auf SD-Karte
  pinMode(10, OUTPUT);
  pinMode(ChipSelect, OUTPUT);
  
  // Initialisierung SD-Karte
  while(! sd.begin(ChipSelect, SPI_HALF_SPEED)) {
    Serial.println("No SD Card!");
  }
  // Auskommentiert ohne LCD
if (!sd.begin(ChipSelect, SPI_HALF_SPEED)) {
clearLCD();
LCD.print("Problem mit SD-Karte");
  }
else {
clearLCD();
LCD.print("SD-Karte initialisiert.");
  }

  // Schalten Sie onboard LED Betriebsbereitschaft anzuzeigen
  digitalWrite(17, LOW);
    
Serial.println("READER_0001");
  
  // Reset und machen Sie sich bereit für eine Karte
  bitCount = 0; bitHolder1 = 0; bitHolder2 = 0;
}


void loop() {
    if (millis() - previousMillis> Intervall) {
      bitcount = 0; bitHolder1 = 0; bitHolder2 = 0; // falls etwas schief gelaufen ist, klar die Puffer
      previousMillis = millis(); // erinnern, das letzte Mal, dass wir blinzelte die LED
clearLCD();
LCD.print ("Present Card or Enter Pin");
      
    }
    
    // Prüfen, ob ein gültiger empfangenen Bits Länge eine Karte sein, sind
    if(bitcount> = 26) {
        delay (100);
        
        // Aufruf Funktion für unsere beiden Brocken Karte Werte zu erhalten
        getCardValues();
        
        // Debug zeug
Serial.print("Bithalter:");
Serial.print(bitHolder1, BIN);
Serial.print(",");
Serial.println(bitHolder2, BIN);
Serial.print("cardChunk1:");
Serial.println(cardChunk1, BIN);
Serial.print("cardChunk2:");
Serial.println(cardChunk2, BIN);
Serial.print("Card Value (BIN):");
Serial.print(cardChunk1, BIN);
Serial.println(cardChunk2, BIN);
Serial.print("Card Value (HEX):");
Serial.print(cardChunk1, HEX);
Serial.println(cardChunk2, HEX);
        
        // Drucken Sie die Karte Werte auf den LCD-Bildschirm
ClearLCD();
Lcd.print(bitcount);
Lcd.print("Bit-Karte:");
Lcd.print(cardChunk1, HEX);
Lcd.print(cardChunk2, HEX);
        
        // Schreibe die Karte Werte auf die SD-Karte
        writeSD();
        
        // Flash-Onboard-LED, um anzuzeigen, Karte lesen
        digitalWrite(17, HIGH);
        delay (100);
        digitalWrite(17, LOW);
        
        // Reset und machen Sie sich bereit für eine andere Karte
        bitCount = 0; bitHolder1 = 0; bitHolder2 = 0;
        previousMillis = millis();
        delay (100); // Verlängern Sie dies, wenn Sie die Karte Wert auf dem LCD-Bildschirm mehr sehen wollen
    }
}

// Funktion, um Interrupts zu löschen und bereiten sie für den Einsatz
void clearinterrupts() {
  // Die Unterbrechung in den Atmel Prozessor vermasselt die ersten negativen Impuls wie die Eingänge sind bereits hoch,
  // So das gibt einen Impuls an jedem Leser Eingabezeile, um die Interrupts richtig funktioniert.
  // Dann räumen die Leser Variablen.
  // Die Leser sind offener Kollektor sitzen normalerweise in einer ein, so ist dies OK
  for (int i = 2; i <4; i + +) {
    pinMode (i, OUTPUT);
    digitalWrite (i, HIGH); // enable interner Pull up was einen ein
    digitalWrite (i, LOW); // Deaktivieren interner Pull up verursacht Null und damit einen Interrupt
    pinMode (i, INPUT);
    digitalWrite (i, HIGH); // enable interne Pull-up
  }
  delay (10);
}

das is die zweite hälfte vom code. und sry weil ich es 2 mal gepostet hatte

// Die Datei öffnen. beachten Sie, dass nur eine Datei kann zu einer Zeit offen,
    // So müssen Sie diese vor dem Öffnen einer anderen schließen.
    ofstream Datei(dataFile, ios :: out | ios :: app);
  
    // Wenn die Datei vorhanden ist, es zu schreiben:
    if (file) {
      file << bitCount;
      file << "bit card:";
      file << hex << cardChunk1;
      file << hex << cardChunk2;
      file << ", BIN:";
      for (int i = 19; i> = 0; i -) {
        Datei << bitRead(cardChunk1, i);
      }
      for (int i = 23; i> = 0; i -) {
        file << bitRead(cardChunk2, i);
      }
      file << endl;
      
      // Print an die serielle Schnittstelle zu
       Serial.println("Schrieb Daten auf SD-Karte");
    }
else {
ClearLCD();
Lcd.print("Error writing to file");
}
}

// End-Code für SD-Karte

void setup() {
  
Serial.begin(57600);
  
  clearinterrupts();
  
  attachInterrupt(0, DATA0, RISING); // DATA0 (grün) auf HID Leser, Pin 2 auf Arduino
  attachInterrupt(1, DATA1, RISING); // DATA1 (weiß) auf HID Leser, Pin 3 auf Arduino
  delay(10);
  // Initialisieren LCD-Bildschirm
/ / pinMode(txPin, OUTPUT);
/ / LCD.begin(9600);
  
  // Stellen Sie sicher, dass die Standard-Chip-Select-Pin 10 eingestellt ist
  // Ausgabe, auch wenn Sie sie nicht benutzen:
  // Setup Ausgangs-Pin auf SD-Karte
  pinMode(10, OUTPUT);
  pinMode(ChipSelect, OUTPUT);
  
  // Initialisierung SD-Karte
  while(! sd.begin(ChipSelect, SPI_HALF_SPEED)) {
    Serial.println("No SD Card!");
  }
  // Auskommentiert ohne LCD
if (!sd.begin(ChipSelect, SPI_HALF_SPEED)) {
clearLCD();
LCD.print("Problem mit SD-Karte");
  }
else {
clearLCD();
LCD.print("SD-Karte initialisiert.");
  }

  // Schalten Sie onboard LED Betriebsbereitschaft anzuzeigen
  digitalWrite(17, LOW);
    
Serial.println("READER_0001");
  
  // Reset und machen Sie sich bereit für eine Karte
  bitCount = 0; bitHolder1 = 0; bitHolder2 = 0;
}


void loop() {
    if (millis() - previousMillis> Intervall) {
      bitcount = 0; bitHolder1 = 0; bitHolder2 = 0; // falls etwas schief gelaufen ist, klar die Puffer
      previousMillis = millis(); // erinnern, das letzte Mal, dass wir blinzelte die LED
clearLCD();
LCD.print ("Present Card or Enter Pin");
      
    }
    
    // Prüfen, ob ein gültiger empfangenen Bits Länge eine Karte sein, sind
    if(bitcount> = 26) {
        delay (100);
        
        // Aufruf Funktion für unsere beiden Brocken Karte Werte zu erhalten
        getCardValues();
        
        // Debug zeug
Serial.print("Bithalter:");
Serial.print(bitHolder1, BIN);
Serial.print(",");
Serial.println(bitHolder2, BIN);
Serial.print("cardChunk1:");
Serial.println(cardChunk1, BIN);
Serial.print("cardChunk2:");
Serial.println(cardChunk2, BIN);
Serial.print("Card Value (BIN):");
Serial.print(cardChunk1, BIN);
Serial.println(cardChunk2, BIN);
Serial.print("Card Value (HEX):");
Serial.print(cardChunk1, HEX);
Serial.println(cardChunk2, HEX);
        
        // Drucken Sie die Karte Werte auf den LCD-Bildschirm
ClearLCD();
Lcd.print(bitcount);
Lcd.print("Bit-Karte:");
Lcd.print(cardChunk1, HEX);
Lcd.print(cardChunk2, HEX);
        
        // Schreibe die Karte Werte auf die SD-Karte
        writeSD();
        
        // Flash-Onboard-LED, um anzuzeigen, Karte lesen
        digitalWrite(17, HIGH);
        delay (100);
        digitalWrite(17, LOW);
        
        // Reset und machen Sie sich bereit für eine andere Karte
        bitCount = 0; bitHolder1 = 0; bitHolder2 = 0;
        previousMillis = millis();
        delay (100); // Verlängern Sie dies, wenn Sie die Karte Wert auf dem LCD-Bildschirm mehr sehen wollen
    }
}

// Funktion, um Interrupts zu löschen und bereiten sie für den Einsatz
void clearinterrupts() {
  // Die Unterbrechung in den Atmel Prozessor vermasselt die ersten negativen Impuls wie die Eingänge sind bereits hoch,
  // So das gibt einen Impuls an jedem Leser Eingabezeile, um die Interrupts richtig funktioniert.
  // Dann räumen die Leser Variablen.
  // Die Leser sind offener Kollektor sitzen normalerweise in einer ein, so ist dies OK
  for (int i = 2; i <4; i + +) {
    pinMode (i, OUTPUT);
    digitalWrite (i, HIGH); // enable interner Pull up was einen ein
    digitalWrite (i, LOW); // Deaktivieren interner Pull up verursacht Null und damit einen Interrupt
    pinMode (i, INPUT);
    digitalWrite (i, HIGH); // enable interne Pull-up
  }
  delay (10);
}

// Funktion, um die Karte Wert (bitHolder1 und bitHolder2) auf die notwendige Array angehängt werden dann tranlate dass zu
// Die beiden Stücke für die Karte Wert ausgegeben
void getCardValues() {
  switch(bitcount) {

musste den code auf 3 mal reinmachen da ich nur 9600 tips habe oder so :wink:

case 26:
        // Beispiel für volle Karte Wert
        // |> Präambel <| |> Aktuelle Karte Wert <|
        // 11 000000100000000001 111000100000100100111000
        // |> In chunk1 schreiben <| |> zur chunk2 schreiben <|
        
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 2) {
            bitWrite(cardChunk1, i, 1); // Schreiben der Präambel 1. bis 13. und 2. Bits
          }
          else if (i> 2) {
            bitWrite(cardChunk1, i, 0); // Schreiben der Präambel 0 für alle anderen Bits über 1
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 20)); // Schreiben restlichen Bits cardChunk1 von bitHolder1
          }
          if (i <20) {
            bitWrite(cardChunk2, i + 4, bitRead(bitHolder1, i)); // Schreibe die restlichen Bits bitHolder1 zu cardChunk2
          }
          if (i <4) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i)); // Schreiben Sie die verbleibenden bisschen cardChunk2 mit bitHolder2 Bits
          }
        }
        break;

    case 27:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 3) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 3) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 19));
          }
          if (i <19) {
            bitWrite(cardChunk2, i + 5, bitRead(bitHolder1, i));
          }
          if (i <5) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 28:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 4) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 4) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 18));
          }
          if (i <18) {
            bitWrite(cardChunk2, i + 6, bitRead(bitHolder1, i));
          }
          if (i <6) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 29:
       for(int i = 19; i> = 0; i -) {
          if (i == 13 | | i == 5) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 5) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 17));
          }
          if (i <17) {
            bitWrite(cardChunk2, i + 7, bitRead(bitHolder1, i));
          }
          if (i <7) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 30:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 6) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 6) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 16));
          }
          if (i <16) {
            bitWrite(cardChunk2, i + 8, bitRead(bitHolder1, i));
          }
          if (i <8) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 31:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 7) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 7) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 15));
          }
          if (i <15) {
            bitWrite(cardChunk2, i + 9, bitRead(bitHolder1, i));
          }
          if (i <9) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 32:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 8) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 8) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRea(bitHolder1, i + 14));
          }
          if (i <14) {
            bitWrite(cardChunk2, i + 10, bitRead(bitHolder1, i));
          }
          if (i <10) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 33:
       for(int i = 19; i> = 0; i -) {
          if (i == 13 | | i == 9) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 9) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 13));
          }
          if (i <13) {
            bitWrite(cardChunk2, i + 11, bitRead(bitHolder1, i));
          }
          if (i <11) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

     case 34:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 10) {
            bitWrite(cardChunk1, i, 1);
          }
          else if(i> 10) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 12));
          }
          if (i <12) {
            bitWrite(cardChunk2, i + 12, bitRead(bitHolder1, i));
          }
          if (i <12) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 35:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 11) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 11) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 11));
          }
          if (i <11) {
            bitWrite(cardChunk2, i + 13, bitRead(bitHolder1, i));
          }
          if (i <13) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 36:
       for(int i = 19; i> = 0; i -) {
          if(i == 13 | | i == 12) {
            bitWrite(cardChunk1, i, 1);
          }
          else if (i> 12) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 10));
          }
          if (i <10) {
            bitWrite(cardChunk2, i + 14, bitRead(bitHolder1, i));
          }
          if (i <14) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;

    case 37:
       for (int i = 19; i> = 0; i -) {
          if (i == 13) {
            bitWrite(cardChunk1, i, 0);
          }
          else {
            bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 9));
          }
          if (i <9) {
            bitWrite(cardChunk2, i + 15, bitRead(bitHolder1, i));
          }
          if (i <15) {
            bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
          }
        }
        break;
  }
  return;
}

würde mich sehr über eure hilfe freuen.
mfg smithsen

so ich habe den code auf 3 mal aufgeteilt. einfach alles zusammenfügen und das ist er dann komplett

find ich kacke das ich mit einem post keinen ganten code posten kann :frowning:

hoffe ihr könnt mir helfen!!!!

Sorry wegen den umständlichen posts :wink:
und schaut euch doch bitte das projekt an von welchen ich die URL eingefügt habe. auf dieser seite findet ihr auch den original code.
der ist englisch und ich musste viel ändern so das ca 25 fehler wegfielen. jetzt häng ich nurmehr bei diesen einem der sdfat sd; der eh ganz am anfang ist

smithsen:
aber als erstes projekt habe ich mir etwas kompliziertes zur aufgabe gemacht.
habe es von einer amerikanischen seite. und habe es 1:1 kopiert

Welcome colligomentis.com - Justhost.com

Mann, das sieht für mich total kriminell aus!

Weil mir beim besten Willen nur völlig kriminelle Einsatzzwecke für so ein System zum heimlichen Belauschen von Personenzugangssystemen einfallen wollen.

"SdFat sd; // file system object for SD card" als problem steht :" sdFat does not name a type"

Hört sich an, als wäre ein Lib nicht korrekt eingebunden. Hast du den überhaupt eine SdFat.h?

"sdFat does not name a type"
SdFat oder sdFat ?

leider kommt es bei c auf Gross-Klein-Schreibung an.

So ist deine Fehlermeldung erstmal unglaubwürdig ( sorry ).
Entweder hast du dir beim Abschreiben der Fehlermeldung einen kleine Freiheit erlaubt, oder du hast das Problem schon gelöst ...