Retro Gadgets: Basic Programming Guide (Tasten, Schalter, Knöpfe und mehr)

Eine Anleitung, die zeigt, wie man die verschiedenen Eingabekomponenten von Retro Gadgets verwendet und sie codiert, um grundlegende Dinge zu tun.

 

Einleitung

Retro Gadgets verfügt über eine Vielzahl von Komponenten, die Sie verwenden können, um Benutzereingaben für Ihre Gadgets bereitzustellen. Wir sind mit einer Auswahl an Knöpfen, Schaltern, Knöpfen, Schiebereglern und mehr ausgestattet. In diesem Handbuch werde ich demonstrieren, wie Sie diese Komponenten verwenden und in Ihr Gadget codieren.

Dieser Leitfaden richtet sich an diejenigen, die wenig bis gar keine Programmiererfahrung haben, und dient auch als schneller Crashkurs zu den Grundlagen des Programmierens und von Lua. Ich werde versuchen, diesen Leitfaden so kurz und prägnant wie möglich zu halten.

Zusammenbau des Gadgets

Wir beginnen damit, ein neues Gadget von Grund auf zusammenzubauen. Ziehen Sie Ihr Multitool von der linken Seite des Bildschirms heraus und erstellen Sie ein neues Gadget aus dem Hauptmenü oder legen Sie Ihr aktuelles in die Archivschublade. Verwenden wir in unserem neuen Gadget das größte quadratische Brett. Gehen Sie zur Brettschublade und ziehen Sie eines davon heraus, es ist das vierte von ganz oben, und legen Sie es auf Ihren Schreibtisch.

Ziehen Sie einen zweiten heraus und verbinden Sie ihn mit dem anderen, dann verwenden Sie den Lötkolben, um sie miteinander zu „verschmelzen“.

Jetzt beginnen wir mit einem einfachen Ein-/Ausschalter. Gehen Sie zur Eingabeschublade, suchen Sie die Schalter und platzieren Sie einen Ihrer Wahl auf Ihrem Gadget (zu Ihrer Information, Sie können ihn mit einem RMB-Klick drehen). Ich habe meine in die linke Ecke gestellt, um später Platz für andere Sachen zu schaffen. Als nächstes brauchen wir irgendeine Ausgabekomponente. Gehen Sie zur Ausgabeschublade, gehen Sie zu den LEDs und nehmen Sie eine einzelne LED (keine Multi-LED) und platzieren Sie sie auf der rechten Seite Ihres Geräts. Ich entschied mich für die quadratische LED.

Lassen Sie uns später etwas Zeit sparen und den Rest der Teile hinzufügen, die wir in diesem Handbuch verwenden werden. Platzieren Sie eine Taste, einen Knopf und einen Schieberegler Ihrer Wahl (allerdings kleine) auf der linken Seite und platzieren Sie dann ein kleines Display auf der rechten Seite Ihres Geräts unter der LED. Ich habe es auch zu Visualisierungszwecken gemalt, aber Sie müssen das nicht tun. Hier ist mein Setup an dieser Stelle:

Rot: Ein-/Ausschalter
Gelb: Taste
Blau: Knopf
Grün: Schieberegler

Wir brauchen auch eine CPU, ein ROM und einen Videochip aus der Misc-Schublade. Keine Sorge, ich werde das alles später erklären, aber jetzt nimm einfach die kleinsten von jedem und platziere sie auf deinem Gadget. Auf der Vorderseite des Boards ist kein Platz, also klappen Sie die Abdeckung ab und drehen Sie das Board um und legen Sie sie auf die Rückseite.

Programmieren zum ersten Mal

Unser Gerät ist für die Anleitung fertig montiert, also fangen wir mit der Programmierung an. Ziehen Sie Ihr Multitool von links heraus und gehen Sie dann zum Hauptmenü, Edit Gadget. Klicken Sie dann auf der Gadget-Seite auf Bearbeiten und die Asset-Liste wird angezeigt. Dort wird es eine „CPU0.lua“-Datei geben. Klicken Sie darauf und dann auf Bearbeiten, und Sie gelangen zum Codierungsbildschirm, auf dem Sie Ihre CPU programmieren können. Die CPU ist das „Gehirn“ Ihres Geräts und dort, wo Ihre gesamte Programmierung stattfindet. Es sagt allen anderen Komponenten, was zu tun ist. Ignorieren Sie den Code, der bereits vorhanden ist. Wählen Sie alles mit Strg-A aus und löschen Sie es. Ich werde erklären, was das Zeug war (und Sie werden es später verwenden), aber ich glaube, es ist besser, mit nichts anzufangen. Sie werden sehen, warum.

Lua ist eine sehr einfache, anfängerfreundliche Sprache. Wenn Sie noch nie zuvor programmiert haben, machen Sie sich keine Sorgen, dieser Leitfaden richtet sich an Sie und ich werde erklären, was alles bedeutet und wie es funktioniert. Das allererste, was wir tun wollen, ist, die LED einzuschalten. Fügen Sie die folgende Codezeile zu Ihrem Programm hinzu und denken Sie daran, dass dies der Fall ist Groß- und Kleinschreibung:

gdt.Led0.State = wahr

Sie werden feststellen, dass während der Eingabe ein Popup-Fenster mit Vorschlägen zum automatischen Ausfüllen angezeigt wird. Dies ist ein sehr wertvolles Werkzeug für einen neuen Programmierer, übersehen Sie es nicht. Es enthält eine Liste der verfügbaren Möglichkeiten zum Vervollständigen des Codes und eine einfache Beschreibung der Bedeutung der einzelnen Elemente. Sie können die Aufwärts- und Abwärtspfeile verwenden, um verschiedene Dinge hervorzuheben und ihre Beschreibungen anzuzeigen.

Lassen Sie uns nun die Codezeile untersuchen, die wir gerade hinzugefügt haben:

gdt.Led0.State = wahr

Dieser Code besteht aus verschiedenen Teilen, die durch Punkte und ein Gleichheitszeichen getrennt sind. Der erste Teil „gdt“ heißt a Grundraum. Es ist ein Stück Code, mit dem Sie auf die Komponenten des Gadgets (Schalter, Tasten, LED usw.) zugreifen und es in der aktuellen Codezeile verwenden können. Stellen Sie sich vor, Sie öffnen einen Ordner auf Ihrem Computer. Um auf die Dateien im Ordner zugreifen zu können, müssen Sie den Ordner zuerst öffnen. Beim Codieren funktioniert es genauso, unsere Komponenten sind „Dateien“ in einem „Ordner“, der das Gadget selbst ist, und um auf die Komponenten des Gadgets zugreifen zu können, müssen wir „den Ordner öffnen“, indem wir „gdt“ Basic aufrufen Platz. Nach der Eingabe von „gdt.“ mit einem Punkt sehen Sie eine Liste aller Komponenten des Gadgets.

Der nächste Teil, „Led0“, ist der Name unserer LED. Sie können den Namen einer beliebigen Komponente sehen, indem Sie darauf klicken, während das Gerät ausgeschaltet ist. Nachdem wir am Ende einen Punkt hinzugefügt haben, werden uns zwei weitere mögliche Befehle angezeigt: Farbe und Zustand. Staat ist ein boolean was bedeutet, dass es entweder ein- oder ausgeschaltet ist, was mit „wahr“ oder „falsch“ bezeichnet wird. Durch das Hinzufügen von „true“ haben wir aktiviert, dass unsere LED immer dann leuchtet, wenn das Gerät mit Strom versorgt wird. Also los, drücken Sie den Netzschalter und sehen Sie, wie die LED aufleuchtet.

Wir können die Farbe auch ändern. Geben Sie diesen Code ein:

gdt.Led0.Color = color.green

Wie Sie vielleicht gesehen haben, gibt es mehrere Farboptionen. Wir haben die Möglichkeit, eine vordefinierte Farbe auszuwählen, wie wir es gerade mit dem obigen Code getan haben (und erhalten eine Liste der verfügbaren Farben im Autofill-Popup) oder wir können unsere eigene Farbe erstellen, indem wir die RGB-Werte selbst angeben, was wir tun könnten so was:

gdt.Led0.Color = Farbe (0, 255, 0)

Dadurch wird auch die LED grün. Beachten Sie, dass „Color“ in diesem Fall groß geschrieben wird, um es von der vordefinierten Farbe zu unterscheiden, die wir zuvor verwendet haben. Bei Lua wird zwischen Groß- und Kleinschreibung unterschieden, denken Sie immer daran. Die drei Zahlen in Klammern sind die Werte von Rot, Grün bzw. Blau auf einer Skala von 0 bis 255. Spielen Sie mit diesen Zahlen herum und sehen Sie, welche Art von Farben Sie erhalten, denken Sie nur daran, sie mit einem Komma zu trennen.

Stellen Sie die LED mit der gewünschten Methode in der gewünschten Farbe her, und fahren Sie dann fort.

Switches

Unsere nächste Aufgabe ist es, die LED einzuschalten, wenn wir den Schalter einschalten.

Ein Schalter ist entweder ein- oder ausgeschaltet. Ich weiß, Captain Obvious. Ich sage das, weil es eine Visualisierung von booleschen Werten ist. Ein Schalter ist entweder ein- oder ausgeschaltet und gibt ein boolesches „wahr“ oder „falsch“ aus, je nachdem, in welchem ​​Zustand er sich befindet.

Löschen Sie den zuvor hinzugefügten LED-Statuscode:

gdt.Led0.State = wahr

Wenn Sie möchten, können Sie Ihren Farbcode beibehalten. Dieser Code sorgt dafür, dass die LED immer leuchtet, wenn das Gerät eingeschaltet ist. Wir wollen, dass es nur angeht, wenn der Schalter eingeschaltet ist. Dies ist sehr einfach, verwenden Sie einfach die folgende Codezeile:

gdt.Led0.State = gdt.Switch0.State

Wir sagen dem Computer buchstäblich: „Der Status der LED ist derselbe wie der Status des Schalters“. Wenn also der Zustand des Schalters eingeschaltet oder „wahr“ ist, wird der Zustand der LED ebenfalls wahr. Lassen Sie uns den Netzschalter drücken und sehen, wie unsere glorreiche LED mit Helligkeit leuchtet!

.. Uh oh, etwas stimmt nicht. Die LED leuchtet nicht, obwohl ich den Schalter umgelegt habe. Diese Anleitung ist scheiße! Aber warte eine Sekunde, wenn ich den Schalter eingeschaltet lasse, dann den Power-Knopf aus- und wieder einschalte, leuchtet die LED. Überraschung, ich habe gerade den Job demonstriert update()-Funktion, das ist der Code, der standardmäßig in unserem Programm war, als wir unser neues Gadget erstellten und den CPU-Codierungsbildschirm zum ersten Mal öffneten. Sie sehen, ohne die Update-Funktion wird der Code, den wir eingeben, nur einmal ausgeführt, beginnend mit dem Einschalten des Gadgets. Der Code wird erst beim nächsten Einschalten erneut ausgeführt. Wenn wir es also einschalten, sieht es sich den Zustand des Schalters an, sieht, dass der Schalter ausgeschaltet ist, und schaltet daher die LED nicht ein. Wenn wir dann den Schalter einschalten, passiert nichts, weil der Code bereits ausgeführt wurde und nicht mehr nach einer Änderung des Schalterzustands sucht. Wenn wir den Schalter eingeschaltet lassen und das Gerät dann aus- und wieder einschalten, führt es den Code erneut aus und sieht, dass der Schalter eingeschaltet ist, und setzt die LED ebenfalls auf eingeschaltet.

Die Update()-Funktion
Die Verwendung der Funktion update() bedeutet, dass jeder Code, der in der Funktion platziert wird, mit jedem neuen Tick ausgeführt wird. Sie können sich einen Tick wie einen einzelnen Rahmen beim Rendern von Grafiken vorstellen. Ihr Gerät läuft mit einer Geschwindigkeit, die in „tps“ oder Ticks pro Sekunde definiert ist (genau wie FPS in Grafiken), die Sie jederzeit im Codierungsfenster sehen können, wenn Ihr Gadget eingeschaltet ist. Je komplexer und anspruchsvoller Ihr Gadget ist, desto niedriger kann Ihre TPS sein, genau wie ein grafisch anspruchsvolles Spiel niedrigere FPS haben wird.

Wie auch immer, um die Funktion update() zu verwenden, fügen Sie dies einfach ganz oben in Ihren Code ein:

Funktionsaktualisierung()

Alle Funktionen müssen ein Ende haben, also fügen Sie ganz unten in Ihrem Code einfach eine Zeile hinzu, die nur „Ende“ sagt.


Schalten Sie jetzt Ihr Gadget ein und drehen Sie den Schalter ein paar Mal um, und Sie werden sehen, wie unsere LED mit dem Schalter ein- und ausschaltet, wie wir es wollten. Herzlichen Glückwunsch!

Zusammenfassend sollte alles, was sich live ändern muss, in einer update()-Funktion platziert werden. Zum Beispiel das Drücken einer Taste, das Umlegen eines Schalters, das Bewegen eines Schiebereglers oder Knopfes. Code innerhalb der Funktion update() wird bei jedem Tick ausgeführt. Code außerhalb wird nur einmal ausgeführt.

Schaltflächen und Wenn/Dann-Anweisungen

Schaltflächen funktionieren sehr ähnlich wie Schalter, da sie einen booleschen Wert ausgeben. Aber es tut es auf verschiedene Arten:

Der Befehl „ButtonState“ ist hier ideal, da er den Wert „true“ ausgibt, solange der Button gedrückt wird. Die anderen beiden geben nur einen einzigen Tick aus. Das ist nicht das, was ich möchte, ich möchte, dass die Schaltfläche funktioniert, solange ich sie drücke, also werde ich ButtonState in dieser nächsten Aufgabe verwenden.

Wir haben einen Schalter, um die LED ein- und auszuschalten. Wir könnten die Schaltfläche verwenden, um dasselbe zu tun, indem wir den Schaltercode durch diesen ersetzen:

gdt.Led0.State = gdt.LedButton0.ButtonState

Aber ich möchte die Taste verwenden, um stattdessen etwas anderes zu tun, anstatt dass 2 Eingänge dasselbe tun. Ich möchte, dass die LED in eine andere Farbe wechselt, während ich die Taste halte, und zurückwechseln, wenn ich sie loslasse. Also habe ich den Code an Ort und Stelle gelassen, der den Schalter verwendet, um die LED ein- und auszuschalten.

Wie Sie im Bild oben sehen können, habe ich die Farbe meiner LED auf Grün geändert. Was ist, wenn ich möchte, dass die LED rot leuchtet, wenn ich die Taste drücke und halte? Wir können das mit einem tun Wenn/Dann-Anweisung.

Fügen Sie am Ende des Programms (aber vor dem „Ende“ der Update-Funktion) den folgenden Code hinzu:

wenn gdt.LedButton0.ButtonState == true dann gdt.Led0.Color = color.red end

Das Einrücken der zweiten Zeile mit einer TAB-TASTE ist eine gute Vorgehensweise, um Ihren Code organisiert und lesbar zu halten, aber nicht erforderlich.

Dieser Code teilt dem Computer mit: „Wenn die Taste gedrückt wird, färben Sie die LED rot“. Wenn Sie eine if/then-Anweisung verwenden, geben Sie a an Zustand – dass der Zustand der Taste „wahr“ ist oder dass sie gedrückt wird. Wenn die Bedingung erfüllt ist, z. B. wenn die Taste gedrückt wird, wird der Code innerhalb der Anweisung ausgeführt, der die LED-Farbe auf Rot setzen soll. Beachten Sie auch die doppelten Gleichheitszeichen in der Bedingungszeile. So müssen Bedingungen geschrieben werden.

Wenn ich jetzt mein Gerät einschalte und den Schalter umlege, leuchtet meine LED grün. Wenn ich die Taste drücke, wird sie rot und wird wieder grün, wenn ich die Taste loslasse. Hurra! Wenn ich jetzt nicht „gdt.Led0.Color = Color(0, 255, 0)“ oben hätte, würde die Farbe nicht wieder auf Grün zurückgehen. Es würde rot bleiben, da es keinen Code gibt, der angibt, welche Farbe es haben sollte, wenn die Taste NICHT gedrückt wird. Sie könnten es so lassen, wie ich es hatte, aber eine andere Möglichkeit, diese Aufgabe zu erledigen, wäre, ein hinzuzufügen sonst nach der if/then-Anweisung.

Wenn gdt.LedButton0.ButtonState == true, dann gdt.Led0.Color = color.red, sonst gdt.Led0.Color = color.green Ende

Es ist ziemlich selbsterklärend. Es sagt zum Computer: „Wenn der Tastenzustand wahr ist, setze die LED-Farbe auf Rot. Andernfalls stellen Sie die LED-Farbe auf grün“.

Jetzt, genau wie zuvor, können wir unser Licht einschalten und den Knopf hin und her schalten, damit die LED die Farbe ändert, und unser Code sieht dank der if/then-Anweisung etwas sauberer aus als zuvor.

Schieberegler, Knöpfe und Variablen

Ok, wir sind jetzt Boolean-Experten. Lassen Sie uns mit etwas anderem arbeiten. Schieberegler und Drehregler sind unterschiedlich, sie geben keine booleschen Werte aus, sondern geben einen numerischen Wert aus. Ein Schieberegler reicht von 0 bis 100, während ein Regler einen negativen Bereich hat und von -100 bis 100 reicht.

Lassen Sie uns mit dem Schieberegler etwas anderes machen. Wir verwenden es, um den Blaupegel in der LED zu steuern. Um dies zu tun, ändern wir die beiden „Farb“-Funktionen innerhalb der if/then-Anweisung stattdessen von vordefinierten Farben zu RGB, wie hier gezeigt.

Bis zu diesem Punkt gebe ich die RGB-Werte selbst mit einer festen Zahl an, wenn ich die RGB-Farbfunktion verwende, wie oben gezeigt. 255 rot, 0 grün, 0 blau oder 0 rot, 255 grün, 0 blau. Sie müssen es nicht fest codieren, Sie können es mit irgendetwas einstellen, das eine Zahl ausgibt. Schau dir das an!

gdt.Led0.Color = Farbe(0, 0, gdt.Slider0.Value)

Diese Codezeile teilt dem Computer mit, dass die Rot- und Grünwerte 0 sind und dass der Blauwert dem Wert des Schiebereglers entspricht. Aber warten Sie, der Schieberegler geht nur von 0-100 und der RGB-Bereich ist 0-255! Also müssen wir den Wert dieses Schiebereglers gleichzeitig mit 2.55 multiplizieren!

gdt.Led0.Color = Farbe (0, 0, gdt.Slider0.Value * 2.55)

Ok, das fängt an, ein wenig chaotisch auszusehen. Das ist wo Variablen nützlich sein. Eine Variable speichert Informationen unter einem von Ihnen angegebenen Namen. Lassen Sie uns all dieses blaue Hokuspokus in eine Variable stecken, damit wir diese ganze Gleichung nicht mehrmals eingeben müssen. Fügen Sie oben im Programm (aber innerhalb der Update-Funktion) Folgendes hinzu:

Lokales Blau = gdt.Slider0.Value * 2.55

Das Wort „lokal“ erstellt eine Variable, und danach möchten Sie die Variable nennen. Ich habe die Variable „blau“ genannt, weil der Zweck der Variablen darin besteht, den Wert der Farbe Blau zu speichern. Du kannst es aber nennen wie du willst.

Anstatt „gdt.Slider0.Value * 2.55“ anstelle des blauen Werts in der RGB-Funktion einzugeben, können wir jetzt einfach den Namen der Variablen verwenden, der „blau“ ist:

Wenn gdt.LedButton0.ButtonState == true, dann gdt.Led0.Color = Color(255,0,blue) sonst gdt.Led0.Color = Color(0,255,blue) Ende

Jetzt können wir unser Gadget einschalten und mit dem Schieberegler den Blaupegel unserer LED einstellen. Ziemlich cool, oder?

Wir könnten den Regler auch verwenden, um dasselbe zu tun, aber ein Regler geht von -100 bis 100, also würde die Hälfte seines Bereichs nichts tun, weil Sie keinen negativen RGB-Wert haben können. Also möchte ich stattdessen etwas anderes machen, ich möchte damit den Wert des Knopfes auf den Bildschirm drucken, den wir vor all der Zeit unter der LED platziert haben.

Es gibt bereits eine gute Anleitung zum Rendern von Text auf einem Bildschirm. Lies es hier bevor Sie fortfahren.

Sobald Sie wissen, wie Text auf dem Bildschirm angezeigt wird, können Sie unseren Bildschirm verwenden, um den Wert unseres Reglers anzuzeigen. Fügen Sie diesen Code unten hinzu und trennen Sie ihn vom Rest unseres Codes, indem Sie eine Reihe von Return-Tasten verwenden. Aber behalte es innerhalb der Update-Funktion!

lokaler Videochip = gdt.VideoChip0 lokaler Font = gdt.ROM.System.SpriteSheets[„StandardFont“] gdt.Screen0.VideoChip = videochip lokaler Knopf = gdt.Knob0.Value videochip.Clear(Videochip, color.black) videochip.DrawText( Videochip, vec2(0,0), Schriftart, Knopf, Farbe.Weiß, Farbe.Schwarz)

Um Schritt für Schritt zu verdeutlichen, was wir hier tun, setzen wir den Videochip des Gadgets auf eine Variable namens videochip, wir setzen die integrierte Schriftart auf eine Variable namens font, wir koppeln den Bildschirm mit dem Videochip und erstellen dann eine Variable für unser Knopfwert. Dann beginnen wir jeden Tick, indem wir den Bildschirm löschen und dann den Text, der in der Reglervariablen enthalten ist, auf den Bildschirm zeichnen. Drücken Sie den Netzschalter und lassen Sie uns sehen, wie die Magie geschieht!

Uh oh, mein Guide ist wieder scheiße! Nur ein Scherz. Wir erhalten eine Fehlermeldung, weil der DrawText-Befehl erfordert, dass der Text a ist Schnur, keine Zahl (in der Programmierung Ganzzahl genannt). Ein String ist eine Folge von Zeichen, die wörtlich interpretiert werden, also genau so angezeigt werden, wie sie eingegeben wurden.

Um also den Wert unseres Reglers auf dem Bildschirm anzuzeigen, müssen wir seinen Wert in einen String umwandeln. Glücklicherweise ist das so einfach, dass wir nur eine einzige Codezeile ändern müssen – die Zeile, in der wir die Reglervariable erstellen. Anstatt von:

lokaler Knopf = gdt.Knob0.Value

Wir werden es wie folgt ändern:

lokaler Knopf = (tostring(gdt.Knob0.Value))

Dadurch wird der Wert des Reglers in einen String umgewandelt. Jetzt können wir unser Gerät einschalten und voila!

Dies ist unser vollständig fertiges Produkt! Der Schalter schaltet unsere LED ein und aus, die Taste ändert sie zwischen grün und rot, der Schieberegler steuert den Blaupegel und der Bildschirm zeigt den Wert des Reglers an. Wir sind fertig!

Hinterlasse einen Kommentar

ArabicEnglishFrenchGermanItalianJapaneseKoreanPortugueseSpanish