[GELÖST]digitalWrite und pinMode

Hallo zusammen,

ich brauche mal wieder eure Hilfe, ich habe absolut keine Ahnung warum das nicht geht.

Ich lese mit HIlfe der SD eine txt Datei ein, hier ist gespeichert welchen Mode und State ein Pin hat.

Soweit sogut doch wenn ich pinMode und dann digitalWrite setzen will geht das nicht.

Wenn ich manuell setze funkt das ohne Probleme. Liegt das an der SD? Kann man
keine Pins setzen wenn die SD Kommunikation offen ist?

Danke schon mal im vorraus.

Grüße
speedy

Sollen wir raten oder gibst Du uns den Sketch?

Die SD-Karte und dessen lesen bzw schreiben behindern die Funktionen pinMode() und digitalWrite() nicht. Ich tippe auf eine Fehler im Sketch.

Grüße Uwe

Hallo Uwe,

dachte mir fast das so eine Antwort kommt :slight_smile:

void classApp::setupDigital() {
  int iSize = 0;
  char szChar;
  char szBuffer[5]; 
  memset(&szBuffer[0], 0, 5*sizeof(char));
  this->m_SD.OpenRead("digital/ID.txt"); 
  while (this->m_SD.Available()) {
    szChar = this->m_SD.getNextByte();
    if(szChar == '#') {
      break;
    } 
    if(szChar == '\r') {
      continue;
    }    

    if(szChar == '\n') { 
      classSD *pFileRead = new classSD;    
      
      char *pchData = NULL;     
      
      pchData = pFileRead->getValueFromFile("digital", "MODE.txt", szBuffer, NULL);
      if(pchData != NULL) {
        if(strcmp(pchData, "OUTPUT") == 0) {  
          pinMode(atoi(pchData), OUTPUT);   
        } else {  
          pinMode(atoi(pchData), INPUT);   
        }
      }
      free(pchData);
      
      pchData = pFileRead->getValueFromFile("digital", "STATE.txt", szBuffer, NULL);
      if(pchData != NULL) {
         if(strcmp(pchData, "HIGH") == 0) {  
           digitalWrite(atoi(pchData), HIGH);   
         } else {  
           digitalWrite(atoi(pchData), LOW);   
         }
      }
      free(pchData);
 
      free(pFileRead);
      memset(&szBuffer[0], 0, sizeof(szBuffer));
      iSize=0;
      continue;
    } 
    szBuffer[iSize] = szChar;
    iSize++;
  }
  this->m_SD.Close();
}

Hoffe du kannst damit was anfangen.

Grüße
speedy

Hallo Uwe,

man man habe eben den Fehler selber gefunden nach 3 Stunden suchen ]:slight_smile:

Naja manchmal sieht man den Wald vor lauter Bäume nicht.

falsch

digitalWrite(atoi(pchData), LOW);

richtig

digitalWrite(atoi(szBuffer), LOW);

Danke trotzdem

Gute Nacht
speedy