Hallo
Ich habe einen arduino nano und mit diesem und 64 blauen LEDs einen 4x4x4 Würfel gebastelt (nach YouTube howto).
Mein Problem ist nun ich würde gerne durch einen tastendruck auf einen Taster etwas im Programm auslösen z.b. das das blinken sich ändert.
Leider habe ich keine pins/ports mehr frei, außer A6 und A7 .
Ich habe schon diverse Ansätze aus dem Internet probiert aber komme zu keinem brauchbaren Ergebnisse.
Kann mir dabei vielleicht jemand helfen der sich mehr auskennt als ich?
Meine Ideen wären auch nicht ein high/low signal auf die TX oder RX (was davon auch immer für den Empfang zuständig ist) Schnittstelle zu geben und damit den Programm aublauf zu ändern.
(Als debug hatte ich noch den Versuch gemacht den Programm Ablauf via serial Eingabe zu ändern. Aber irgendwie hatte ich sogar da probleme. Das wenn ein ausgewählter programmabschnitt lief . dann nicht überprüft wurde ob währenddessen nochmal die taste gedrückt wurde)
Ich schätze mal hier sind viele Leute die bestimmt noch bessere ideen haben als ich.
Na zwei freie Analogeingänge sind doch super, da kannst du sogar mehr als zwei Taster oder Schalter anklemmen.
Zum Beispiel an einem Eingang zwei Taster für Bildänderung rauf/runter und am anderen Eingang ein Poti mit dem die Geschwindigkeit verändert wird. Oder oder oder...
Aber, um Vorschläge machen zu können, wie dies Software mäßig aussieht, muss man die Software erst mal kennen.
Den Schaltplan braucht man dafür nicht, du hast ja schon geschrieben das A6 und 7 noch frei sind. Außer jemand möchte sich auch einen Würfel bauen
(Als debug hatte ich noch den Versuch gemacht den Programm Ablauf via serial Eingabe zu ändern. Aber irgendwie hatte ich sogar da probleme. Das wenn ein ausgewählter programmabschnitt lief . dann nicht überprüft wurde ob währenddessen nochmal die taste gedrückt wurde)
Ich befürchte dieses Problem wirst Du ohne radikale Programumgestaltung nicht lösen.
Wenn Du die Zeiten millels delay() machst ist der Sketch einfach mit dem beschäftigt und Tasten oder die serielle Schnittstelle werden nicht gelesen.
Wow ich bin überrascht so viele hilfreiche und zuversichtliche Antworten.
Danke.
Das ist der fertige würfel momentan.
gebaut habe ich den nach dieser Anleitung 1zu1
mein sketch sieht momentan so aus
Anhang Sketch.txt
ich dachte mir das wenn man auf die Taste drückt das das abarbeiten der unterprogramme dann anhält und solange ein unterprogramm geloopt wird bis man ieder die taste drückt oder das teil resettet wird
Mehr IOs erhälst Du mittels MCP23017 und der Bibliothek von Adafruit.
Zu 2. Du ersetzt delay(zeit) durch verzoegerung(zeit) und fragst innerhalb von dieser Funktion den Schalterzustand ab und veränderst Variablen entsprechend.
Zu 1. Suche im Forum nach "agmue anleitung", da findest Du entsprechende Anleitungen.
Also das mit dem MCP23017, fällt warscheinlich erstmal aus.
ich habe leider nur den arduino nano hier und keine weiteren elemente.
ja dann werde ich mir das mal alles anschauen und probieren was zusammen zu basteln.
mal sehen wie ich das mache. leider kenne ich mich mit programmiersprachen noch nicht so richtig aus. und mit arduino habe ich jetzt erst angefangen,.
flexcon:
ja dann werde ich mir das mal alles anschauen und probieren was zusammen zu basteln.
mal sehen wie ich das mache. leider kenne ich mich mit programmiersprachen noch nicht so richtig aus. und mit arduino habe ich jetzt erst angefangen,.
Ich habe die bisherigen Antworten nicht gelesen. Womöglich ist mein Vorschlag also „von gestern“:
Wenn Du zwei analoge Pins frei hast, kannst Du zum Beispiel prima mit LDRs spielen. Das sind Widerstände, die je nach Lichteinfall den Wert ändern. Also zum Beispiel: Je mehr Licht LDR x sieht, desto heller wird die vordere/rechte/obere Ecke des Würfels (oder die Mitte, oder der Würfel wird irgendwo dunkler).
Schon mit LDRs lässt sich sehr gut spielen. Dito mit einem simplen Poti.
Man kann auch mit geringem Aufwand einen Haufen Spaß haben
Gruß
Gregor
PS: Wenn Du ein Arduino-Anfänger bist, dann lies hier gelegentlich mit. Ich finde dieses Forum irre lehr- und hilfreich.
Hi leute;
also ich habe eine für mich akzeptable Lösung gefunden.
Ich habe einen 3 Poligen Schlater genommen und schalte mit diesem wechselnd Masse oder +5v auf den Pin A6.
Im Anhang eine kleine zeichnung.
Damit erreiche ich beim "analogRead(schalter)" immer einen absoluten Werten von,
0 für GND (Masse)
und
1023 für +5v
und damit frage ich dann einfach nach jedem unterprogramm den Schalterzustand ab.
Dieser sagt dann ob das eine unterprogramm wiederholt werden soll oder das nächste abgespielt wird.
Ich denke damit kann ich leben.
Dennoch bedanke ich mich bei euch allen für eure Hilfreichen Tipps.
Beispiel Sketch
int layer[4] = {A3, A2, A1, A0}; //initializing and declaring led layers
int column[16] = {13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1, A5, A4}; //initializing and declaring led rows
int time = 250;
int schalter = A6;
int schalterzustand;
void loop()
{
turnEverythingOff();
flickerOn();
while (schalterzustand = analogRead(schalter) == 1023)
{
flickerOn();
Serial.println("Schalter Loop");
}
//-------------------------------------------------
turnEverythingOn();
while (schalterzustand = analogRead(schalter) == 1023)
{
turnEverythingOn();
Serial.println("Schalter Loop");
}
delay(time);
//-------------------------------------------------
turnOnAndOffAllByLayerUpAndDownNotTimed();
while (schalterzustand = analogRead(schalter) == 1023)
{
turnOnAndOffAllByLayerUpAndDownNotTimed();
Serial.println("Schalter Loop");
}
//-------------------------------------------------
layerstompUpAndDown();
while (schalterzustand = analogRead(schalter) == 1023)
{
layerstompUpAndDown();
Serial.println("Schalter Loop");
}
//--------------------------------------------------
Ich würde aber trozdem einen Spannungsteiler mit 2 gleichen Widerständen (10kOhm) an den analogen Eingang schalten damit dieser einen definierten Pegel hat wenn der Schalter in Mittelstellung ist. Dies weil ich annehme daß das nicht ein 3-poliger Schalter ist sondern ein Schalter mit 3 Positionen.
Der Schalter nennt sich "1x um" oder auch ON/ON oder einpoliger Wechsler. Nur weil dieser drei Anschlüsse hat heißt er nicht [...]3 Poligen Schlater[...]!
Und, warum schließt dur -5V und Masse (GND) kurz? Wo kommen die -5V eigentlich her?
Nagut, ich nehme, wie Gregor, an, dass dies nur ein "Tippfehler" war bzw. ist.
Aber, nichts desto Trotz ist die Schaltung schlecht. So hast du im Umschaltmoment einen offenen Eingang. Mein Vorschlag, mach nen 10k Pulldown an den Eingang A6 und lasse den von dir mit [...]-5v GND[...] beschrifteten Eingang vom Schalter offen. So liegt A6 IMMER an Plus oder über den Widerstand an Masse, aber niemals offen.
Ja stimmt war ein schreib fehler.
der schalter hat nur zwei positionen/stellungen.
und legt beim schalten entweder +5v oder GND an den Pin A6.
wenn ich nichts an den pin anlege dann bekomme ich auch keine absoluten werte von 0 und 1023 . sondern die schwanken dann die ganze zeit zwischen 200-800.
also auch wenn der schalter mal so ungünstig stehen sollte das werder +5v nocht GND anliegen. dann läuft das programm einfach nur normal durch.