Guten Morgen liebe Community.
Ich bin mal wieder am rum probieren.
Letztes mal wurde mir schon mal bei sowas ähnlichem geholfen und ich dachte, dass ich es verstanden habe, dem war aber nicht so.
Ich habe ein „counter“ den ich öfter benutzen möchte und es will einfach nicht funktionieren.
Woran liegt es, was habe ich da noch nicht ganz verstanden ?
Hallo,
nehme dir ein bißchen Zeit und studiere die An- und Verwendung vun struct´s und array´s. Das magische Wort dazu lautet: User Defined Data Types - UDT.
Ich rate dir nicht so viel zu probieren!
Sondern vorher ein C++ Buch zu lesen.
Dann die dort beschriebenen Verfahren probieren, mit dem Ziel sich selber zu prüfen ob man/frau es kapiert hat.
Tipps:
Gleichartige Daten gehören in ein Array. Verschiedenartige Daten in eine Struktur.
Durchnummerieren von Variablen ist böse.
Es gibt 3 Verfahren Daten in eine Funktion zu bekommen.
Per Value, per Pointer, oder per Referenz.
Oh man.. ich merke gerade, dass es doch nicht so schnell und ein einfach geht, wie ich dachte.
Und dann soll das Ganze auch erweiterbar sein, wenn ich ein "input 3" verwenden möchte. Das ist ganz schon harter Tobak bis jetzt für mich (das was ich bis jetzt darüber gelesen habe).
Ich mein.... der Counter an sich funktioniert ja schon
@ardouinee
ich glaube du sollst zunächst mal ein wenig googeln & lesen
"c++ array" und "arduino array"
damit es eben nicht counter_1, counter_2, counter_3 braucht.
Übrigens, c++ beginnt gerne mit dem Zählen bei 0. Gewöhne dich daran.
Das Stimmt.. in diesem code nicht aber in einer abgespeckten version wo nur ein counter ist .
Ja du hast Recht, hier ist keine Entprellung drin die kommt später. Bzw. die habe ich schon (bounce2)
Hallo,
hier kommt der versprochende Sketch, für das Studium, für die Anwendung in einfachen Sketchen unter der Verwendung von C++.
// BLOCK COMMENT
// https://www.learncpp.com/cpp-tutorial/
// https://forum.arduino.cc/t/counter-code-mehrfach-verwenden/903725
#define ProjectName "Counter Code mehrfach verwenden"
// CONSTANT DEFINITION
// you may need to change these constants to your hardware and needs
constexpr byte Input_[] {A0, A1, A2}; // button pins connect to GND
// VARIABLE DECLARATION AND DEFINTION
enum {Counter_1, Counter_2, Counter_3}; // Namen der Counter zuorden
unsigned long currentTime;
struct COUNTER { // common structure for the counters with the following members
byte pin;
bool state_;
int counter_;
int mod;
String text;
} counters[] { // initialization of counter 1 to counter 3
{Input_[Counter_1], 0, 0, 2, "Hänsel"},
{Input_[Counter_2], 0, 0, 3, "Gretel"},
{Input_[Counter_3], 0, 0, 4, "der böse Wolf"},
};
struct TIMER {
unsigned long duration;
unsigned long stamp;
};
TIMER scanButton{20, 0}; // initialization of button scan timer
// FUNCTIONS
bool checkTimer(TIMER & time_) { // generic time handler function using TIMER struct
if (currentTime - time_.stamp >= time_.duration) {
time_.stamp = currentTime;
return true;
} else return false;
}
void setup() {
Serial.begin(9600);
Serial.println(F("."));
Serial.print(F("File : ")), Serial.println(__FILE__);
Serial.print(F("Date : ")), Serial.println(__DATE__);
Serial.print(F("Project: ")), Serial.println(ProjectName);
pinMode (LED_BUILTIN, OUTPUT);
// now follows a very important instruction to minimize coding work.
// this instruction is named Range-BasedForLoop and instructs the compiler to do the coding work.
for (auto Input : Input_) pinMode(Input, INPUT_PULLUP);
}
void loop () {
currentTime = millis();
digitalWrite(LED_BUILTIN, (currentTime / 500) % 2);
if (checkTimer(scanButton)) { // timer to scan buttons
// now follows a very important instruction to minimize coding work.
// this instruction is named Range-BasedForLoop and instructs the compiler to do the coding work.
for (auto &counter : counters) {
bool stateNew = !digitalRead(counter.pin); // read current button state
if (counter.state_ != stateNew) { // any changes?
counter.state_ = stateNew; // interlock
if (stateNew) { // button pressed?
counter.counter_++; // increment counter
counter.counter_ = counter.counter_ % counter.mod;
Serial.print(counter.text), Serial.print(F(" = ")), Serial.println(counter.counter_);
}
}
}
}
}
Ich bin mir nicht sicher, aber das [quote="ardouinee, post:1, topic:903725"] counter = counter % 2;
[/quote] sollte eigentlich nur 0 oder 1 in counter speichern. Oder hab ich gerade ein Knoten im Hirn.
Wenn dem so ist, kann der Counter nicht größer werden.