Verständnis frage --> pinMode

Juhu, ich habe es hin bekommen, auch wenn ich der Meinung bin das ich bei der Abfrage von NAN noch was Falsch mache, doch es Klappt :slight_smile:

genial.

DANKE an euch alle.

das ist der Code mit einen Schieber.
muss jetzt erst mal noch weg, werde dann später die Anderen Schieber auch noch einbauen, und den Code hier veröffentlichen.

DANKE noch mal an euch alle.

#include "math.h"
unsigned long temp_millis;
int Taster = 3;                  // Taster PIN = Nr
int i = 0;

float Ergebnis_Schieber5 = NAN; 

void setup()
  {
    Serial.begin(9600);          // Seriele Einstellungen 
    pinMode(Taster,  INPUT);     // Taster PIN = Eingang

    // ********* Tabellen Kopf 
       Serial.print("ID");
       Serial.print("\t");
       Serial.print("Schieber 1");
       Serial.print("\t");
       Serial.print("Schieber 2");
       Serial.print("\t");
       Serial.print("Schieber 3");
       Serial.print("\t");
       Serial.print("Schieber 4");
       Serial.print("\t");
       Serial.print("Schieber 5");
       Serial.print("\t");
       Serial.print("Dehnungsmessstreifen");
       Serial.print("\n");
    // ********* Tabellen Kopf 
  }
  
void loop() 
  {
      while ( digitalRead(Taster)== LOW )  { }       // Waren bis Taster gedrückt wurde 
      delay(100);                                    // kurze Pause machen damit sich nichts überschlägt
      while ( digitalRead(Taster)== HIGH)  { }       // Waren bis Taster gedrückt wurde 

        i = i + 1;                            // vortlaufende ID Nr. hochzählen 
       Serial.print(i);                       // vortlaufende ID Nr. Ausgaben  
       Serial.print("\t");                    // Tabulattor ausgeben  
       Serial.print(Schieber1());             // Schieber Nr. 1 Auslesen udn Wert zurück geben
       Serial.print("\t");                    // Tabulattor ausgeben  
       Serial.print(Schieber2());             // Schieber Nr. 2 Auslesen udn Wert zurück geben
       Serial.print("\t");                    // Tabulattor ausgeben  
       Serial.print(Schieber3());             // Schieber Nr. 3 Auslesen udn Wert zurück geben
       Serial.print("\t");                    // Tabulattor ausgeben  
       Serial.print(Schieber4());             // Schieber Nr. 4 Auslesen udn Wert zurück geben
       Serial.print("\t");                    // Tabulattor ausgeben  
       
          while ( isnan(Ergebnis_Schieber5) )  { Ergebnis_Schieber5 = Schieber5(); }   // Schieber Nr. 5 Auslesen udn Wert zurück geben
          Serial.print(Ergebnis_Schieber5); 
          Ergebnis_Schieber5 = NAN;

       Serial.print("\t");                    // Tabulattor ausgeben  
       Serial.print(Dehnungsmessstreifen());  // Dehnungsmessstreifen auslesen und Wert zurückgeben 
       Serial.print("\n");                    // Zeilenumbruch erstellen

  }  // ENDE --> void loop



float Schieber1()
  {
    
  }  // ENDE --> Schieber1
  
float Schieber2()
  {
  }  // ENDE --> Schieber2   
  
float Schieber3()
  {
  }  // ENDE --> Schieber3

float Schieber4()
  {
  }  // ENDE --> Schieber4

float Schieber5()
  {
    int Schieber_5_ClockPin = 24;  // Pin 24 das 2. Bit vom Port A (PINA PA2)
    int Schieber_5_DataPin  = 25;  // Pin 25 das 3. Bit vom Port A (PINA PA3)

    pinMode(Schieber_5_ClockPin, INPUT);
    pinMode(Schieber_5_DataPin,  INPUT);

    while (digitalRead(Schieber_5_ClockPin) == LOW) {}    // wenn CLOCK auf LOW, dann warten bis wieder HIGH
    temp_millis = millis();                               // aktuelle Zeitnahme
    while (digitalRead(Schieber_5_ClockPin) == HIGH) {}   // wenn CLOCK auf HIGH, warten bis wieder LOW
    if ((millis() - temp_millis) > 100)                   // wenn High-Pegel länger wie 100ms war, springe in 'decode' Funktion
      {

        long value = 0;
        byte SIGN_Bit = 0;                          // Vorzeichen Bit 21
      
          for (int i=0;i<24;i++)                    // 24 Durchläufe, 0 bis 23
            {           
              if ( PINA & ( 1 << PA3 ))             // wenn Data (Port.A Bit.3) HIGH ist, 
                {                                   // eine 1 in die Variable 'value' an Bitnummer i
                  value |= 1UL << i;                // Syntax Hinweis aus dem Forum, wegen default 16 bit int Arithmetik
                }
                while ( !(PINA & (1 << PA2)))  { }  // solange warten bis Clock (Port.A Bit.2) wieder HIGH ist
                while (   PINA & (1 << PA2 ))  { }  // solange warten bis Clock (Port.A Bit.2) wieder LOW ist
            }  // for Schleifenende
    
           SIGN_Bit = (value >> 21) & B01;          // Vorzeichen Bit 21 separieren
           value = value & 0xFFFF;                  // nur Bit 0 bis Bit 15 behalten, den Rest davor nullen
           value = value >> 1;                      // und alles um ein Bit nach rechts schieben, Startsignal wird entfernt
           if (SIGN_Bit == 1)                       // wenn Vorzeichen-Bit gesetzt war, alles mit -1 multiplizieren
            { value = value * -1; }
//         Serial.println((float)value / 100);      // Kommastelle setzen und man erhält den endgültigen Meßwert  (Rückgabe wert)
         return (float)value / 100;                 // Kommastelle setzen und man erhält den endgültigen Meßwert  (Rückgabe wert)
        }
        return NAN;                                 // Fehlerwert ausgeben 
  }  // ENDE --> Schieber5
  
float Dehnungsmessstreifen()
  {
  }  // ENDE --> Dehnungsmessstreifen