Coding

FEZ Game-O

Hab hier schon lange nichts mehr über den Gadgeteer gepostet… Mir fehlte einfach die Zeit, bzw. ist immer noch so. Ich habe einige Projekte im Kopf und hoffe Sie bald umsetzen zu können.

Wollte euch nur kurz das Kickstarter-Projekt FEZ Game-O vorstellen. Finde es einfach nur klasse. Denke gerade für Kinder/Jugendliche ist es eine tolle Sache hier in die Programmierung bzw. Hardware einzusteigen.

1

Werde mir vorerst zwar noch keinen kaufen, da ich ja noch einiges hier habe, was noch programmiert werden will.

Das Projekt hat ihr Ziel schon erreicht, aber ihr könnt es noch unterstützen. Später wird die Hardware von GHI vertrieben.

42b1b15879d49924fa8557ee616c0c9b_large

Von |2018-05-14T15:22:53+02:002013-08-01|Gadgeteer, NETMF|

SimpleOledDisplay

Da ich mit der Standard Klasse des OLED Display modules nicht so glücklich bin, hab ich einen eigenen Treiber geschrieben.

Folgende Funktionen sind verfügbar:

  • Zeilen schreiben
  • Farbe definieren
Bis jetzt ist nur der SmallFont verfügbar.
Beispiel:
//Setup
SimpleOledDisplay.Display = oledDisplay;
Thread.Sleep(3000);
SimpleOledDisplay.Clear();

// WriteLine
SimpleOledDisplay.Writeline(SimpleOledDisplay.Linenumber.Three, "Hello World", GT.Color.Yellow);
SimpleOledDisplay.Writeline(SimpleOledDisplay.Linenumber.Five, "... and Gadgeteer!", GT.Color.Red);
Thread.Sleep(3000);
SimpleOledDisplay.Clear();

// Write more than one line
SimpleOledDisplay.DefaultTextColor = GT.Color.LightGray;
for (int i = 0; i < SimpleOledDisplay.Lines.Length; i++) {     SimpleOledDisplay.Lines[i] = "Write text in line ==> " + (i + 1);
}
SimpleOledDisplay.WriteAllLines();
Thread.Sleep(3000);
SimpleOledDisplay.Clear();

// Color fade
GT.Color myColor;
for (int i = 0; i < 255; i++)
{
    myColor = GT.Color.FromRGB((byte) i, 0, 0);
    SimpleOledDisplay.Writeline(SimpleOledDisplay.Linenumber.Three, "Hello World", myColor);
}
for (int i = 0; i < 255; i++)
{
    myColor = GT.Color.FromRGB(255, (byte) i, 0);
    SimpleOledDisplay.Writeline(SimpleOledDisplay.Linenumber.Three, "Hello World", myColor);
}
for (int i = 0; i < 255; i++)
{
    myColor = GT.Color.FromRGB(255, 255, (byte) i);
    SimpleOledDisplay.Writeline(SimpleOledDisplay.Linenumber.Three, "Hello World", myColor);
}
Von |2012-11-11T16:44:08+01:002012-11-11|Gadgeteer, NETMF|

OLED Display Module debug window

Als sehr praktisch erwies sich die fertige Klasse von RorschachUK aus dem TinyCLR-Forum.

Man kann das Display Modul als Debug Output verwenden. Somit hat man eine schöne Ausgabe direkt bei seinen Modulen.

Quelle: TinyCLR

Die Klasse ist mit der Low-Memory-Methode FlushRawBitmap erstellt und läuft somit auch auf dem FEZ Cerberus.

Ich hab mal ein Video erstellt um es euch zu zeigen.

 

 

Und so wird die Klasse verwendet:

DebugWindow.display = oledDisplay;         // init display
DebugWindow.EchoToDebug = true;            // show in VS output window
for (int i = 0; i < 100; i++)
{
    DebugWindow.Print("Hello value " + i); // print on display
    Thread.Sleep(50);
}
Von |2017-07-25T09:50:11+02:002012-11-08|Gadgeteer, NETMF|

OLED Display Module

Ich hab mir mal das OLED Display Module von Seedstudio geleistet. Der Preis ist mit 30$ ganz OK. Das größere und touchemfindliche Display TE35 war mir für 75$ zu teuer.

Da ich ein FEZ Cerberus Mainboard besitze stehe ich vor einen kleinen Problem. Kleiner Speicher…

Das Module besitzt (komfort) Methoden zum Darstellen von Text:

oledDisplay.SimpleGraphics.DisplayText("Hello World!",
Resources.GetFont(Resources.FontResources.small), GT.Color.Red, 10, 10);

Diese Methode erstellt dummerweise eine Bilddatei (BMP) mit 128×128 Pixeln und stellt es da. Dies ist die Größe des gesamten Bildschirmmoduls.

 

Es gibt eine weitere Möglichkeit Bereiche des Bildschirms zu beschreiben. Dazu nutzen wir die Methode FlushRawBitmap, welche mit virtuellem RAM arbeitet und somit Speicher spart.

 

Beispiel Text:

byte[] vramText = new byte[128 * 20 * 2];
Bitmap bitmapText = new Bitmap(128, 20);
bitmapText.DrawText("Suplanus", Resources.GetFont(Resources.FontResources.small), GT.Color.Yellow, 0, 0);
Util.BitmapConvertBPP(bitmapText.GetBitmap(), vramText, Util.BPP_Type.BPP16_BGR_BE);
oledDisplay.FlushRawBitmap(0, 0, 128, 20, vramText);

Beispiel Bild:

byte[] vramImage32 = new byte[32 * 32 * 2];
Util.BitmapConvertBPP(Resources.GetBitmap(Resources.BitmapResources.star32).GetBitmap(), vramImage32, Util.BPP_Type.BPP16_BGR_BE);
oledDisplay.FlushRawBitmap(48, 40, 32, 32, vramImage32);

Um Bilder zu laden müssen diese zuvor in Resources.resx eingefügt werden.

Von |2018-05-14T15:22:45+02:002012-11-03|Gadgeteer, NETMF|

4-digit-shield class

Wie auch für den Netduino gibt es jetzt auch einen Treiber für den Gadgeteer.

Ihr braucht dafür:

Verdrahtet die zwei Komponenten wie folgt:

  • SCL: Pin 9
  • SDA: Pin 8
  • GDN: GND
  • +5V: +5V

Das erstellen eines I2C-Bus ist relativ einfach, obwohl ich zuvor lange im Internet gesucht habe.

 

Zur Projektseite…

 

Hier ein Beispielvideo mit einigen Funktionen meiner Klasse…

Von |2018-05-14T15:22:19+02:002012-07-17|Gadgeteer, NETMF, Projekte|
Nach oben