16x24 Matrix Panel mit 1x4 keypad Steuerung für Zer0 Cosplay

Hallo,
ich habe für die Gamescom 2016 geplant Zer0 aus Borderlands zu cosplayen und will in dem Helm ein 16x24 Red LED Matrix Panel einbauen um per Tastendruck verschiedene Emoticons anzuzeigen.

Leider habe ich in meinem Leben vorher noch nie mit Codierung oder sowas gearbeitet und weiß daher nicht wo ich überhaupt anfangen soll.

Ich habe zwar Tutorials gefunden wie ich alles verkabeln muss aber amsonsten finde ich nichts das mir hilft, daher wende ich mich jetzt mal an euch in der Hoffnung das mir hier jemand weiter helfen kann.

Geplant ist das ich per Tastendruck steuern kann welches Symbol auf dem Display angezeigt wird.
Dabei sollen die Tasten folgende Symbole zugewiesen bekommen:
1- : D
2- : (
3- 0
4- <3
(1 und 2 ohne die Leerzeichen, die sind nur weil hier sonst Smileys angezeigt werden)

Die Symbole sollen weder blinken noch nach kurzer Zeit verschwinden, sondern solange angezeigt werden bis ich eine andere Taste drücke oder mein Arduino ausschalte.

Die Hardware die ich verwende ist wie folgt:
-Arduino Uno R3
-16x24 Red LED Matrix Panel
-Adafruit Membrane 1x4 Keypad

Verkabelt hab ich das Display nach dieser Anleitung

Und das Keypad wie folgt:
5M (Keypad) verbunden mit GND (Arduino)
1 (Keypad) verbunden mit Digital 9 (Arduino)
2 (Keypad) verbunden mit Digital 10 (Arduino)
3 (Keypad) verbunden mit Digital 11 (Arduino)
4 (Keypad) verbunden mit Digital 12 (Arduino)

Ich bin nicht sicher ob das an Infos schon reicht aber ich hoffe hier findet sich jemand der mir helfen kann.

Viele Grüße und danke im Vorraus
Andy

Wenn es das Display aus dem Link ist, dann arbeite doch mal die dazu verlinkten Tutorials durch. Das geht hin bis zur GfX-Library, die dir grundlegende Grafikfunktionen bereitstellt. https://learn.adafruit.com/16x24-led-matrix/drawing Damit dürften nen paar Smileys gar kein Problem sein.

Und wenn du gar nix weiter willst, dann kannst du jeden der vier Smileys auf einen deiner Knöpfe legen und das wars schon. Programmaufbau würde ich dann ungefähr so machen:

void smiley1()

void smiley2() usw.

und in der Hauptschleife einfach die Knöppe abfragen, und je nachdem, ob und was gedrückt wurde, die entsprechenden Unterprogramme aufrufen. Das kann man auch noch weiter aufbohren (seeeehr weit), später.

Rabenauge: Das kann man auch noch weiter aufbohren (seeeehr weit), später.

Apropos ... Läuft eigentlich „Hör’ mal, wer da hämmert“ derzeit irgendwo?

Gruß

Gregor

Rabenauge: Wenn es das Display aus dem Link ist, dann arbeite doch mal die dazu verlinkten Tutorials durch. Das geht hin bis zur GfX-Library, die dir grundlegende Grafikfunktionen bereitstellt. https://learn.adafruit.com/16x24-led-matrix/drawing Damit dürften nen paar Smileys gar kein Problem sein.

Und wenn du gar nix weiter willst, dann kannst du jeden der vier Smileys auf einen deiner Knöpfe legen und das wars schon. Programmaufbau würde ich dann ungefähr so machen:

void smiley1()

void smiley2() usw.

und in der Hauptschleife einfach die Knöppe abfragen, und je nachdem, ob und was gedrückt wurde, die entsprechenden Unterprogramme aufrufen. Das kann man auch noch weiter aufbohren (seeeehr weit), später.

Erst mal danke für die schnelle Antwort.

Die Tutorials habe ich mir bereits schon durchgelen und werd daraus nur bedingt schlauer, ich weiß halt nicht wie ich das machen soll, wo kann ich sehen das die Codes die ich eingebe richtig sind, woher weiß ich das ich am Ende n vernünftiges Bild hab usw. Dazu kommt eben das ich absolut keine Ahnung habe wie ich den ganzen Code überhaupt aufbauen soll, was rein muss damit das Keypad funktioniert, in welcher Reihenfolge das ganze aufgebaut sein muss, was muss unter Void loop, was unter Void Setup usw.

Wie bereits gesagt ich hab mich vorher noch nie mit so Codierungs Zeug beschäftigt und daher hab ich wirklich keine Ahnung was bzw wie ich das alles machen muss x.x (Um ehrlich zu sein hab ich mir das auch etwas einfacher vorgestellt bzw gehofft das ich etwas, für mich, hilfreichere Tutorials finde)

DamnLettuce: (Um ehrlich zu sein hab ich mir das auch etwas einfacher vorgestellt bzw gehofft das ich etwas, für mich, hilfreichere Tutorials finde)

Sich anstrengen ist anstrengend, shit.

Die Dinge sind oft nicht so einfach, wie es aussieht. Evtl. hilft mein Geschreibsel.

„Auf sie mit Gebrüll!“

HTH

Gregor

Ich habe mal mit einem ähnichen Display, was aber nur einreihig war (8x8 x4) oder so ähnlich... es hatte aber auf alle Fälle den selben Ansteuerchip drin. Irgendwo gibt es einen Haufen Arrys, wo jedes einzelne Zeichen definiert ist. Wenn es nicht mit Hex Werten, sondern mit Nullen und Einsen gefüllt ist dann erkennt man die Zeichen schon. Bei dir kommt aber erschwerdend hinzu, das die Zeichen "zusammengepuzzled" werden. Das sollten dann wohl 8x8 Fragmente sein. Die mußt du dann auf Kästchenpapier dir aufmalen und dann auszählen, was in jedes Arry reinkommt. Übe das erst mal im Kleinen. Nur ein Arry für ein Zeichen und da dann mal alles Nullen, alles Einsen, Schachbrett... dann das nächste Fragment und schauen, in welcher Reihenfolge die Fragmente angeordnet werden. Und dann ein großes Zeichen erstellen. Wenn das funzt, dann die restlichen Zeichen...

Ach was- wenn die Adafruit-GfX-lib benutzt wird, brauchste kein Kästchenpapier (obwohl es durchaus hilfreich sein kann), aber mit Arrays schlägt man sich da nich erst rum. Die bietet so praktische Funktionen wie "zeichne nen Pixel an derundder Stelle" oder "male ein Viereck von bis), ganz ohne dass man sich um Arrays kümmern muss.

@DamnLettuce : Mist, nun schreibt dir doch keiner dein Programm. Nee-ich denk auch nicht dran.;) Aber wenn du dich nen bissel einarbeitest (soo viel brauchst du für dein Vorhaben ja wirklich nicht) wirst du sehn, dass es so schwer gar nicht ist. Aber die allernötigsten Grundlagen musst du dir schon erarbeiten. Da gibts aber Unmengen Tutorials, auch auf deutsch. Wirst sehen: es ist einfacher als es für den Moment aussieht.

Rabenauge: @DamnLettuce : Mist, nun schreibt dir doch keiner dein Programm. Nee-ich denk auch nicht dran.;)

Ich liebe solches Elite gehabe :) Ich verlang von niemandem mir n Programm zu schreiben, ich hab hier lediglich um Hilfe gefragt weil Codierung und Programme schreiben nunmal ein Bereich ist mit dem ich mich noch nie befasst habe, ich weiß nichtmal was ich an Grundlagen wissen muss. Ich hab eigentlich vollkommen andere Interessen und tu mich sehr schwer damit überhaupt zu verstehen was mir in den Tutorials erklärt wird. Sowas soll halt vorkommen. Ich habe mit keinem Wort gefragt ob mir jemand das Programm schreibt, ich würde in erster Linie einfach nur gern wissen wonach genau ich überhaupt suchen muss. Mit dem was ich so auf Google suche hab ich jedenfalls keinen Erfolg gehabt bis jetzt, daher auch der Forum Post.

In HT1632-master\examples\matrixshapes\matrixshapes.ino sehe ich "matrix.print("AdafruitIndustries");", da sollte auch "matrix.print("D");" funktionieren.

DamnLettuce: ... in dem Helm ... -Arduino Uno R3

Fange erstmal mit dem UNO an. Wenn es läuft, wäre ein Umstieg auf eine kleinere Hardware wie Arduino Nano überlegenswert.

Das hat nix mit Elite-Gehabe zu tun. Grade ich kann sowas nämlich auch nicht ab, aber ungefähr wöchentlich taucht hier ähnliches auf "keine Ahnung, suche Programm, eilig, HILFE!1!". Nicht nur hier, übrigens.

Mal sinds Hausaufgaben, mal ist es ne Uni-Arbeit, mal eben ne coole Bastelei.

Bei dir vermisse ich einfach irgendwie jede Eigeninitiative- ich helfe gern, wirklich, aber ich sehe das als Hilfe zur Selbsthilfe an. Fang an, und sag dann, wo es hängt, da werd ich der Letzte sein, der dir nich weiter hilft (wenn ich es denn kann, kann auch nich alles...). Aber sich einfach hinstellen und "könnt ihr mir helfen" ohne selber irgendwas zu tun, und nachher mit dem Ding rumrennen und einen auf cool machen, ist nicht. :)

Aber du sagst, du willst. Okay. Überlegen wir, was du brauchst:

-Hardware hast du bereits. -Stromversorgung auch? -> das kann auch noch herausfordernd werden! Momentan betreibst du wahrscheinlich alles (wenn denn überhaupt schon) per USB-für unterwegs nicht soo praktisch. Unos haben ne Netzteil-Buchse, an die man auch ein simples Batteriefach anstecken kann oder nen einigermassen passenden Akku- überleg dir das schon mal, wie das später laufen soll.

Dass du die IDE schon installiert hast, und der Arduino auch mit ihr "redet", davon geh ich jetzt einfach mal aus. Falls nicht: kümmere dich darum-das schaffste alleine.

Hast du dir schon die Bibliotheken für deine Hardware installiert? Was du brauchst, steht bei dem Display bei Adafruit dabei. Wie man Bibliotheken installiert, auch.

Wenn das so weit mal alles klar ist, sag Bescheid, dann kümmern wir uns weiter.

Aber Achtung: ich hab weder dieses Keypad noch dieses Display, denke aber, wir kriegen das mal ausnahmsweise (von wegen Elite, kann nich jeden an die Hand nehmen ;) ) auch so hin.

Ich habe noch 4 Monate bis zur Gamescom und der Rest vom Cosplay wird nicht länger als nen Monat vlt dauern, also eilig ist es wirklich nicht, wenn ich die 3 Monate brauch um das Zeug mal zu verstehen dann ists halt so. Ich hab aber als mein Arduino ankam 2 Tage allein damit verbracht Tutorials zu suchen damit ich weiß wie ich anfange.

Stromversorgung ist vorhanden: http://www.exp-tech.de/komponenten-zubehoer/batterien-akkus/9v-battery-holder-switch

Die IDE hab ich installiert, genauso wie die Bibliotheken fürs Display und die Gfx library. Ich hab auch auf youtube nen Code gefunden der ne kleine Animation abspielt und die zum testen selber mal ausprobiert. Funktioniert also alles soweit. ( https://www.youtube.com/watch?v=5bjamkBA2Vs )

Ich versuche mich im moment an dem Code auch etwas zu orientieren bzw draus schlau zu werden wie ich das ganze angehen muss. Ich denke die Symbole erstellen wird eher das geringere übel, sieht zwar auf den ersten Blick mega kompliziert aus aber ich kenn mich, wenn ich mich da mal nen Tag dran setze dann krieg ich das gebacken. Das alles dann aber so einzustellen das ichs per Tastendruck wechsel ist eher meine Sorge, ich finde halt blos Tutorials fürs Keypad ODER fürs Display, aber nichts zusammen.

Das soll alles auch nicht so "ohne Eigeninitiative" rüberkommen, ich will das schon selber machen, ist halt nur so ne Sache da erst mal rein zu kommen als Anfänger :s

@agmue Ich verwende die Hardware die ich von einem anderen zer0 Cosplayer vorgeschlagen bekommen habe, der Helm den ich baue ist groß genug für die Hardware die ich verwende, das ist alse meine geringste Sorge :)

DamnLettuce: Ich verlang von niemandem mir n Programm zu schreiben, ich hab hier lediglich um Hilfe gefragt weil Codierung und Programme schreiben nunmal ein Bereich ist mit dem ich mich noch nie befasst habe, ich weiß nichtmal was ich an Grundlagen wissen muss. Ich hab eigentlich vollkommen andere Interessen und tu mich sehr schwer damit überhaupt zu verstehen was mir in den Tutorials erklärt wird.

Wenn du mit Google keinen Erfolg hast, dann besorge dir Bücher. Ich finde "Arduino Workshops" ganz gut. Es gab vor kurzem auch eine Zeitschrift Heise "Make Arduino Special". Leider ist die gedruckte Ausgabe wegen des beiliegenden UNOs recht teuer.

Letztlich musst du dich wirklich durch die Grundlagen quälen, wie Tasten auswerten, LEDs ohne Modul blinken lassen usw. , wenn du was eigenes machen willst. Arduino ist wie ein Instrument z.B. Klavier erlernen. Man muss sich die Tonleitern, Fingerübungen usw. kämpfen, ehe man von Musik sprechen kann. Wer einfach nur schöne Musik sucht, kauft sich besser eine fertige CD.

Was ich dank agmue bis jetzt geschafft habe ist ein ": D" Ohne blinken oder sonstiges. ( https://www.dropbox.com/s/tn9d46w8d3s58qj/2016-04-12%2020.36.26.jpg?dl=0 ) Ich hab dafür die matrixshapes.ino etwas zerlegt.

#include "Adafruit_GFX.h"
#include "Adafruit_HT1632.h"

#define HT_DATA 2
#define HT_WR   3
#define HT_CS   4
#define HT_CS2  5

// use this line for single matrix
Adafruit_HT1632LEDMatrix matrix = Adafruit_HT1632LEDMatrix(HT_DATA, HT_WR, HT_CS);
// use this line for two matrices!
//Adafruit_HT1632LEDMatrix matrix = Adafruit_HT1632LEDMatrix(HT_DATA, HT_WR, HT_CS, HT_CS2);

void setup() {
  Serial.begin(9600);
  matrix.begin(ADA_HT1632_COMMON_16NMOS);  
  void setRotation(uint8_t rotation);

}

void loop() { 
  matrix.setTextSize(2);    // size 1 == 8 pixels high
  matrix.setTextColor(1);   // 'lit' LEDs
  matrix.setTextWrap(false);

  matrix.setCursor(0, 0);   // start at top left, with one pixel of spacing
  matrix.print(":D");
  matrix.writeScreen();



}

Allerdings ist das eben verdreht (sprich es soll senkrecht angezeigt werden, nicht wie auf dem Bild waagerecht.)

Auf Adafruit hab ich gelesen das man den Bildschirm mit einem Kommando drehen kann: void setRotation(uint8_t rotation);

Ich hab dieses wie in dem Code zu sehen ist bei void setup eingefügt weil es so in der Anleitung stand, nur passiert eben nichts.

DamnLettuce: Was ich dank agmue bis jetzt geschafft habe ist ein ": D"

Gratulation!

Versuch mal

 setRotation(1);

Gültige Werte sind 0 bis 3.

Ich bekomm eine Fehlermeldung wenn ich

setRotation(uint8_t rotation);

durch

setRotation(1);

ersetze "exit status 1 variable or field 'setRotation' declared void"

Der Objektname (?) muß noch davor: matrix.setRotation(1);

Guck dir das Programm mal an:

-immer, wenn irgendwas aus dieser "Matrix-Bibliothek" aufgerufen wird, kommt erst mal davor nen

matrix.

Damit weiss "der Arduino" (ich geh jetzt hier nich näher drauf ein, für wen diese Info wirklich bestimmt ist, das würde unnötig verwirren), dass das Objekt "Matrix" gemeint ist. Wenn du einfach schreibst "setRotation(xyz)" hat er keine Ahnung, was er rotieren soll.

Aber du kommst ja recht gut voran.

Ich hab das mit dem matrix.rotation versucht, mit 0,1,2,3 passiert aber bei keiner Nummer was.
Im nachhinein ist es aber eig sogar besser wenn ich den Bildshirm waagerecht in den Helm einbaue, so sind die Smileys nämlich deutlich größer und ich muss nicht auf jeden mm achten damit ich später überhaupt noch was sehe durch den Helm.

Gibt es die möglichkeit das ich nur bei einem Symbol (<3) die Schrift irgendwie wechsel?

Das ist jetzt nicht unbedingt das schönste Herz :'D

DamnLettuce: Ich bekomm eine Fehlermeldung wenn ich

setRotation(uint8_t rotation);

durch

setRotation(1);

ersetze "exit status 1 variable or field 'setRotation' declared void"

Du scheinst von Programmierung wirklich Null Ahnung zu haben. Lies Dir mal eine Einführung in C durch.

Gruß

Gregor

Warum müssen es denn unbedingt Buchstaben sein? Die GfX-Bibliothek lässt dich auch jeden Pixel einzeln setzen, ohne jetzt nachzusehen müsste das ungefähr so gehen:

matrix.drawPixel(X-Position,YPosition);

Du musst einfach nur Zeile und Spalte einsetzen, und kannst somit jedes beliebige Symbol basteln.

Dazu gibts unter dem Link zu deinem Display auch nen Tutorial. Mal ehrlich: wenn ich nen Display mit so "jämmerliche" Auflösung habe, dann versuch ich doch nicht, es noch schlimmer zu machen, indem ich fertige, grobe Zeichen verwende.

Die Idee, ein Display einfach umzudrehen, weil man nicht weiss, wie man die Anzeige dreht, ist übrigens nicht neu, das hab ich mal in nem Büro gesehen, da hatte irgendein Hirnie am Anzeigetreiber gespielt und keiner wusste wie man das zurückstellt. Die hatten da tatsächlich den ganzen PC-Monitor hochkant gestellt.... :o

Schreib den Zauberspruch mal in setup()...sollte klappen. Ich glaub, zur Laufzeit lassen sich die Anzeigen nich mehr drehen... Weitere Infos hier: https://learn.adafruit.com/adafruit-gfx-graphics-library/graphics-primitives

Lies da bitte alles denn vieles, was die Bibliothek kann, trifft bei deinem Display natürlich nicht zu, aber da sie auch dafür benutzt werden kann, kommste mit der recht leicht ans Ziel, solche Sachen wie Kreise, Vierecke, Linien macht die mit links.. Dreiecke und Rechtecke mit abgerundeten Ecken auch noch (so weit das deine Auflösung zulässt, eh klar). Hier käme dann das Rechenpapier doch noch zu Ehren: mal dir dein Display da auf (jedes Kästchen ein Pixel), und dann mal das aus, so wie du die anzeige haben willst. Dann brauchste die Kästchen nur noch auszählen und kannst direkt beliebige Symbole ausgeben.

Allerdings: Display hin, Spielerei damit her- an deiner stelle würde ich zuerst mal sehen, wie du die Buttons abfragst. Mit dem Pixelgespiele lernst du, ausser abtippen, nicht wirklich viel jetzt, die fehlen tatsächlich sämtliche Grundlagen.

Erste Lektion: wie man es richtig macht: http://www.arduino-tutorial.de/2010/06/digital-in/

Zweite Lektion: mehrere. http://shelvin.de/3-tasten-einlesen/ hier ne nette Idee, wie man ohne zusätzliche Widerstände auskommt- geht auch mitm Uno bei deinen vier Knöpfchen, und bestimmt hast du keine halbwegs passenden Widerstände da- oder sind in dem Buttonfeld welche verbaut? Eher nich...

Falls du entprellen musst (genaugenommen muss man das immer, nur funktioniert es manches Mal auch ohne) gibt es ein Beispielprogramm in der Arduino-IDE (glaub, debounce heisst es), aber das geht auch wesentlich durchschaubarer. Dazu aber mehr, wenn du die vier Knöpfe zumindest erst mal einlesen kannst. Falls dir in der Zwischenzeit langweilig ist: schau dir weitere Beispiele, die in der IDE sowieso enthalten sind, mal an, da kann man eine ganze Menge lernen. Interessant wäre für etwas später vielleicht das Beispiel "blink_without_delay), irgend ein Bauchgtefühl sagt mir gerade, damit könntest du noch was sehr nettes aus deinem Display rausholen.