Counter Code mehrfach verwenden

ich will Dir noch mal etwas auf die Sprünge helfen.

Klar ist hier ein Array oder Struct oder sogar Classe besser geeignet, aber vermutlich überfordert Dich das im Moment noch . Das wären dann in der Reihenfolge die nächsten Übungen für Dich.
Nochmal zurück zu Deinem Eingangspost Eigendlich bist Du damit ja schon fast da. Es fehlen zwei Dinge

  1. das einlesen des Pins mit digitalRead() und die dazugehörigen bool Variablen
  2. die Übergabe der Parameter an die Function, so dass sie verändert und zurückgegeben werden können. Hier bietet sich an das als Referenz mit dem & symbol vor der entsprechende Variablen zu machen . Link dazu hast Du in #38 bekommen.

void counter_area( bool &dataStatusAlt, byte &counter, bool data)

data , ist ja der Pegel von dem Eingang der soll nicht verändert werden , also nur bool angeben. Den folgenden Code kannst Du sicher verstehen, wenn nicht fragen :wink:

Heinz

byte counter_1 = 0;
bool statusAltCounter_1; // kann ja nur true oder false sein
byte dataPin_1 = 6;
bool statusCounter_1;   // kann ja nur true oder false sein

byte counter_2;
bool statusAltCounter_2;
byte dataPin_2 = 7;
bool statusCounter_2;

void setup()
{
  Serial.begin(9600);
  pinMode(dataPin_1, INPUT_PULLUP); // Eingang nach GND geschaltet bleibt Dir überlassen
  pinMode(dataPin_2, INPUT_PULLUP);
}

void loop()
{
  delay(20); // entprellen
  statusCounter_1 = !digitalRead(dataPin_1); // pin invertiert einlesen da der nach GND liegt
  statusCounter_2 = !digitalRead(dataPin_2); // pin invertiert einlesen

  counter_area(statusAltCounter_1, counter_1, statusCounter_1);
  counter_area(statusAltCounter_2, counter_2, statusCounter_2);
  Serial.print(counter_1); Serial.print('\t');
  Serial.println(counter_2);

}

// Function Counter Parameter als Referenz ubergeben
void counter_area( bool &dataStatusAlt, byte &counter, bool data)
{
  if (dataStatusAlt != data)
  {
    if (data == 1)
    {
      counter++;
    }
  }
  dataStatusAlt = data;
  //counter = counter % 2;

  return ;
}
1 Like