Hallo, suche was, um für ein Schülerprojekt mit 2 Tasten 0 und 1 Eingabe zu machen, das soll auf getrenntem Display dargestellt werden und von einem andern Schüler hinter einer Trennwand in Buchstaben ""dekodiert"" werden , nach 4 Buchstaben - Eingabesperre, danach soll der lesende mit einem Taster die Eingabe wieder freigeben für die nächsten 4 Buchstaben.
Willst du jetzt Nullen und Einsen eingeben oder Buchstaben. Decodeiern über ASCII dann brauchst du 8Bit eingabe. Wie gesagt du musst ein paar Infos mehr geben zum Helfen.
Mal ein Ansatz
Du musst die Taster dann auf steigender und fallender Flanke abfragen. Bei Steigender weißt du das es eine Eingabe war bei Fallender das die Angabe fertig ist in diesem Moment zählst du eine Variable hoch für die zweite Stelle und fängst dann wieder mit den Flanken an ob es eine 0 oder 1 ist und den Zähler erhögenbist du bei der 4ten Position sperrst du die Eingabe bis sie wieder freigegeben wird durch den anderen Nutzer oder über Zeit.
Dann kannst du wieder von vorne Anfangen.
Du willst dann eine Eigene "Tabelle" machen mit Bit strukruren für die Buschstaben? Dann reichen auch 4 Bit 0-31 Zähler.
Ich denke das sind jetzt schonmal ein paar Ansätze da kann man schon was mit zaubern. Bei Problemen und Fragen helfen wir gerne weiter.
Also Hilfestellung wirst du hier fast immer bekommen aber keiner wird dir hier aber einen fertigen Sketch schreiben.
Gruß
DerDani
das ist mit schon klar , mache mich mal morgen weiter an die Software, debounce usw hatte ich mir schon angeschaut , hab sowas noch nie gebraucht .. war alles bisher ohne Taster..
wie ichs realisiere - als Flussdiagramm - zeichne ich mir mal morgen .. ich melde mich
Bin einiges weiter - nun stehe ich vor dem Problem:
wie kann ich es realisieren, aus einer
if (digitalRead(KEY1)==LOW){
digitalWrite(ledPin, HIGH); <<<---- hier in Unterroutine zu springen , will ja keine LED an und ausmachen
} else {
digitalWrite(ledPin, LOW);
}
sowie die Abfrage für 2 Tasten zu machen und anstelle, wenn die Bedingung KEY1 LOW - in eine LCD Ausgabe zu springen und eine 0 zu schreiben und wenn KEY2 Low dann raus und eine 1.
Das ich bei jedem Sprung den LCD Zeiger um 1 erhöhen muss und nach dem 6ten Zeichen die Spalte+1 ist klar.
Hab google schon auf den Kopf gestellt aber nichts brauchbares gefunden.
Pittii:
Bin einiges weiter - nun stehe ich vor dem Problem:
Und wo ist dein Flussdiagramm?
Dann verstehen wir evtl. was du machen möchtest.
wie kann ich es realisieren, aus einer
if (digitalRead(KEY1)==LOW){
digitalWrite(ledPin, HIGH); <<<---- hier in Unterroutine zu springen , will ja keine LED an und ausmachen
} else {
digitalWrite(ledPin, LOW);
}
Hier kommt der Aufruf einer Funktion rein:
if (digitalRead(KEY1)==LOW){
DeineFunktion(); // Hier rufst du deine Funktion auf
} else {
digitalWrite(ledPin, LOW);
}
sowie die Abfrage für 2 Tasten zu machen und anstelle, wenn die Bedingung KEY1 LOW - in eine LCD Ausgabe zu springen und eine 0 zu schreiben und wenn KEY2 Low dann raus und eine 1.
Das ich bei jedem Sprung den LCD Zeiger um 1 erhöhen muss und nach dem 6ten Zeichen die Spalte+1 ist klar.
Hier ist eine bessere Erklärung angebracht.
Hab google schon auf den Kopf gestellt aber nichts brauchbares gefunden.
Das glaube ich jetzt nicht. Du hast sicher die falschen Sucheingaben gemacht.
Deine geschweiften Klammern sind unnötig und das ganze vermutlich was anderes als du gedacht hast.
Die nächste Anweisung nach einem if wird (eventuell oder auch nicht) ausgeführt. Diese Anweisung kann, wenn gewünscht , ein { Block aus mehreren Anweisungen sein }
Bei dir ist LCDPRINT0(); diese Anweisung
{ return; } // bricht loop ab, unabhängig davon ob vorher LCDPRINT0(); ausgeführt wurde
Pittii:
Das Bedienteil mit rot grüner Led und den 2 Tasten 0 und 1, das bedient Person 1 - der muss ein Wort z.B. ein E nach Binär -Tabelle eingeben
der 2te sieht den Display und muss nach Tabelle dann das im Display in der ersten Zeile erscheinende 000101 in ein E umsetzen.
dann Reihe 2,3 4
Wird beimPittiicode jeder Buchstabe mit genau 6 Bits codiert?
Beim noch im Postkutschenzeitalter eingeführten Morsecode war die Bitanzahl nicht konstant, sondern in normalem Text häufiger vorkommende Buchstaben hatten kürzere Binärcodes als seltene Buchstaben.
So ist ein E im Morsecode einfach nur ein Punkt (vergleichbar '0') bzw. kurzer Ton 'dit'.
Das seltenere X ist im Morsecode '-..-' (vergleichbar '1001' bzw' dah-dit-dit-dah
Diese Codes wurden auch nicht mit zwei Tasten übermittelt, sondern mit einer einzigen Morsetaste. Ein kurzes Drücken der Taste ist ein 'dit' ('0'/Punkt auf dem Fernschreibstreifen), ein längeres Drücken ein 'dah'1 / Strich auf dem Fernschreibstreifen. Das Timing aus gedrückter/nicht gedrückter Taste und die Pausen dazwischen bestimmen den gesendeten Code.
Nur eine Taste zum Senden zu verwenden wie beim Morsen, das wäre Dir zu einfach, deshalb verwendest Du drei Tasten (wei auf der Sendeseite, eine auf der Empfangsseite" und der Empfänger muss durch das Drücken der Löschtaste in einem passendn Augenblick selbst am korrekten Senden mitwirken?
Wäre die Verwendung nur einer einzigen "Morsetaste" zum Senden von Morsecode in Deinem Fall zu einfach und deshalb möchtest Du drei Tasten zum Senden von Pittiicode haben statt nur eine Taste zum Senden von Morsecode?
nicht darauf vertrauen, jede Millisekunde dranzukommen
auch mehrfach pro Millisekunde laufen können.
Wenn du schon die Bounce2 library verwendest und keine kurzen und langen Tastendrücke unterschiedlich erfassen willst, nutze doch der Einfachheit halber die Flankenwechsel-Funktionen fell / rose ...
Und übrigens:
void abfrage(); // ist eine Funktionsdeklaration, was man bei Arduino normalerweise nicht braucht
hallo, hab bounce2 kpl rausgeschmissen, die Eingabe geändert, jetzt geht 0 und 1 Eingabe -
void abfrage();
reading = digitalRead(KEY2);
if (reading == LOW && previous2 == HIGH && millis() - time > debounce) {
LCDPRINT0(); ;
time = millis();
}
previous2 = reading;
reading = digitalRead(KEY3);
if (reading == LOW && previous3 == HIGH && millis() - time > debounce) {
;
time = millis();
LCDPRINT1(); }
previous3 = reading;
hänge hier: Buchstabenvorschub geht Position 5,6,7 - bis Zeilenende usw aber wenn ich die Rem's wegmache passt was nicht
void LCDPRINT0 () {
RA = 0;
lcd.setCursor(Position, Line); //Start at character 5 on line 0
lcd.print(RA); //0 Schreiben
Position = Position + 1;
{
// if (Position = 11)
{