Hallo ich stehe zur Zeit auf dem Schlauch
Ich möchte Einer Zehner und Hunderter Stellen einzeln einstellen und dann als 000 bis 999 weiter verwenden.
ein Tipp wäre gut
Danke VS14
Was?
Hallo,
ich glaube er möchte 3-stellig zählen, 001,002,...010,011,...143,144,145
Gruß und Spaß dabei
Andreas
Multiplikation der Ziffern mit 10, 100, etc. und Addition
Anders herum geht es mit Division und Modulo
Soweit habe ich es teils verstanden, denke aber, dass er sich hier falsch ausdrückt.
Zehner, bzw Hunderter, soll vermutlich zehntel und hunderstel heißen.
Es kann darum gehen, dass er nicht mit float arbeiten möchte. Aber da fehlen viele Angaben.
Bei Werten von 150,499 wird aber bereits ein long benötigt.
Hallo,
wie wäre es mit einem Preisausschreiben?
Gruß und Spaß
Andreas
Danke erste einmal
und sorry für die Verwürrung
also nochmal von vorn und ich hoffe es wird deutlicher
ich möchte
_0 bis 9
dann
0_bis 9
und
0 bis 9
einstellen über zB Taster
und dann
das ganze
als
000 bis 999 verwenden
zb. bei mills()
Gruß
SkobyMobil:
Hallo,
wie wäre es mit einem Preisausschreiben?
Gruß und Spaß
Andreas
Preisausschreiben wer mit der Antwort der Frage an mächsten kommt?
Das funktioniert nicht; ich hab ne Kristallkugel ]
]
]
]
]![]()
@VS14
Du arbeitest mit einem Array mit 3 elementen und dem Index von 0 bis 2.
Mit der Taste "nächste Stelle" erhöhst Du den Index; Nach der Hunderterstelle könntest Du wieder auf die Einserstelle springen.
Mit den Tasten "up" und "Down" erhöhst oder dekrementierst Du das Array an der Stelle des index.
Mit der Taste "Start" machst Du aus dem Array eine Zahl indem Du die Verschiedenen Stellen mit 1,10 und 100 multiplizierst und zusammenzählst und verwendest die Zahl.
Alle Tasten müssen entprellt werden bzw auf das Drücken einmalig reagieren. Das erhält man indem man pro taster einen Statusvariable hat und den Zustand zwischenspeichert. Wenn dann LetzterStatustaste != JetzigerStatusTaster ist und JetzigerStatusTaster == HIGH wurde der Taster gerade gedrückt.
Grüße Uwe
Danke Uwe
Mit der Taste "Start" machst Du aus dem Array eine Zahl indem Du die Verschiedenen Stellen mit 1,10 und 100 multiplizierst und zusammenzählst und verwendest die Zahl.
das ist was mir gefehlt hat
Gruß
int xArray[3] = {0, 0, 0};
int x = 0;
bool button1 = false;
bool button2 = false;
bool button3 = false;
void setup(void)
{
// ...
}
void loop(void)
{
// Abfrage der Taster
if (button1 == true)
{
if (xArray[0] == 9) xArray[0] = 0;
else xArray[0] += 1;
}
if (button2 == true)
{
if (xArray[1] == 9) xArray[1] = 0;
else xArray[1] += 1;
}
if (button3 == true)
{
if (xArray[2] = 9) xArray[2] = 0;
else xArray[2] += 1;
}
// Neuen Wert berechnen
x = xArray[2] * 100;
x += xArray[1] * 10;
x += xArray[0];
}
So dürfte es gehen! Kein fertiger Sketch! Die Buttons musst du selber entprellen können. buttonX gibt lediglich an, ob die Taste gedrückt wurde
sschultewolter Du hat mehr einen Zufallszahlengenerator gebaut als eine einstellbaren Zähler. Das Hochzählen geht so schnell, daß es mit dem Taster kaum kontrollierbar ist.
Das Erhöhen muß entweder auf die Flanke getriggert werden oder so langsam wiederholt werden daß mann den Taster loslassen kann wenn die richtige Zahl erscheint.
Grüße Uwe
Hallo,
probiere das einmal:
/* * Tastendrücke zählen */
int switchPin = 2; // Schalter ist mit Pin 2 verbunden
int val; // Variable für den Pin Zustand
int buttonState; // Variable für den letzten Schalterzustand
int buttonPresses = 0; // Wie oft ist der Schalter gedrückt
const int LED = 13;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(switchPin, INPUT); // Schalter-Pin ist Input
Serial.begin(19200); // Start der seriellen Kommunikation mit 9600bps
buttonState = digitalRead(switchPin); // Anfangszustand lesen
}
void loop()
{
val = digitalRead(switchPin); // Eingabewert lesen und in val speichern
if (val != buttonState)
{ // Der Zustand des Schalters hat sich verändert
if (val == LOW)
{ // Ist der Schalter gedrückt?
buttonPresses++; // Inkrementieren der Variablen buttonPresses
Serial.print("Schalter wurde ");
Serial.print(buttonPresses);
Serial.println(" gedrueckt"); }
} buttonState = val; // Den Zustand merken
if (buttonPresses == 5)
{digitalWrite(LED, HIGH);}
if (buttonPresses == 10)
{digitalWrite(LED, LOW);}
}
Gruß und Spaß
Andreas
uwefed:
sschultewolter Du hat mehr einen Zufallszahlengenerator gebaut als eine einstellbaren Zähler. Das Hochzählen geht so schnell, daß es mit dem Taster kaum kontrollierbar ist.
Das Erhöhen muß entweder auf die Flanke getriggert werden oder so langsam wiederholt werden daß mann den Taster loslassen kann wenn die richtige Zahl erscheint.
Grüße Uwe
Hallo Uwe,
das war komplett gewollt! Mittels Lerneffekt.
Es bringt dem TE nicht, den kompletten Sketch zu schreiben und zu veröffentlichen. Ich habe darauf hingewiesen, dass die buttons lediglich als Status aufgeführt werden. Desweiteren darauf verwiesen, dass er sich um das Entprellen selber kümmert. Dabei sollte, so fern er das auch richtig nachschlägt, auch zu Lösung kommen. Der Buttonstatus wird beim Entprellen ausreichen genau beschrieben. Er sollte dann in der Lage sein, nur auf einen positiven Statuswechsel (von 0 auf 1) auszuwerten.
Gruß Stefan
@Andreas: Der Sketch scheint mir nicht optimal (hab aber nur schnell drübergeschaut). Das Problem ist, ein gut prellender Taster verrichtet dort genug Unfug!
Hallo,
ich- als MöchteGernProgrammierer will Dir ja nicht wiedersprechen-
aber der Sketch ist AllerErsteSahne für nicht entprellte Taster.
Gruß und Spaß
Andreas
SkobyMobil:
der Sketch ist AllerErsteSahne für nicht entprellte Taster.
![]()
Falls du dich auf deinen reply #12 beziehst:
Entprellst du durch eine ausreichende Menge an Serial.write() ? ( Ab 64 Buchstaben wirkt write wie ein delay )
Deine Serial-Ausgaben werden schon in Ordnung sein, denen kannst du nur nicht ansehen, wie schnell und häufig du den Taster "wirklich" gedrückt hast.
Ein bisschen Sahnesteif (STRG-T) würde zumindest das optische Erscheinungsbild etwas verbessern
SkobyMobil:
aber der Sketch ist AllerErsteSahne für nicht entprellte Taster.
Da stimme ich Michael zu.
Der Sketch lebt von den Seriellen Ausgaben auf niedriger Baudrate. Das reicht zum verzögern.
ohne serial.print prellt das ganz schön!
Ich habs ausprobiert.
Hallo,
ähh, das kann ich so nicht hinnehmen…
Diese Routine benutze ich um ein SwitchCase "hochzuschalten" 0-9" auch zum
hochzählen der Uhrzeit in Schalt- und AstroSchaltuhr. Da gibt es nicht
einen Fehler.
Ich will nicht abstreiten, das die Taster prellen, aber es wird ohne Fehler
gezählt. In 2 Sekunden 10mal getastet, ohne Fehler, reproduzierbar.
Gruß und Spaß
Andreas
Andreas, nehm mal die kompletten Code raus, der mit der Seriellen Schnittstelle etwas macht. Dein Glück bei dem Sketch wurde von michael und gunther bereits begründet.
Hallo,
ich habe die Beiden und Dich schon verstanden.
"In 2 Sekunden 10mal getastet, ohne Fehler, reproduzierbar."
Das habe ich ohne "serielle" gemacht. Bei mir funktioniert das ohne Fehler. Daher meine Überzeugung.
Gruß und Spaß
Andreas