Gadget retrò: guida alla programmazione di base (pulsanti, interruttori, manopole e altro)

Una guida per mostrare come utilizzare i vari componenti di input di Retro Gadgets e codificarli per eseguire operazioni di base.

 

Introduzione

Retro Gadgets ha una varietà di componenti che puoi utilizzare per fornire l'input dell'utente ai tuoi gadget. Disponiamo di un assortimento di pulsanti, interruttori, manopole, cursori e altro ancora. In questa guida, dimostrerò come utilizzare questi componenti e codificarli nel tuo gadget.

Questa guida è rivolta a coloro che hanno poca o nessuna esperienza di programmazione e servirà anche come rapido corso accelerato sulle basi della programmazione e di Lua. Cercherò di mantenere questa guida il più veloce e concisa possibile.

Assemblare il gadget

Inizieremo assemblando un nuovo gadget da zero. Estrai il tuo multitool dal lato sinistro dello schermo e crea un nuovo gadget dal menu principale, oppure riponi quello attuale nel cassetto dell'archivio. Nel nostro nuovo gadget, usiamo la tavola quadrata più grande. Vai al cassetto delle schede e tira fuori uno di quelli, è il quarto dall'alto in basso, e mettilo sulla tua scrivania.

Tirane fuori un secondo e collegalo all'altro, quindi usa il saldatore per "fonderli" insieme.

Ora inizieremo con un semplice interruttore on/off. Vai al cassetto degli input, trova gli interruttori e posiziona uno di tua scelta sul tuo gadget (per tua informazione puoi ruotarlo usando un clic RMB). Ho messo il mio nell'angolo sinistro per fare spazio ad altre cose in seguito. Successivamente, abbiamo bisogno di un componente di output di qualche tipo. Vai al cassetto di uscita, vai ai LED e prendi un singolo LED (non un multi-LED) e posizionalo sul lato destro del tuo gadget. Ho scelto il LED di forma quadrata.

Risparmiamo un po' di tempo dopo e andiamo avanti aggiungendo il resto delle parti che useremo in questa guida. Posiziona un pulsante, una manopola e un dispositivo di scorrimento a tua scelta (piccoli però) sul lato sinistro e quindi posiziona un piccolo display sul lato destro del tuo gadget, sotto il LED. Sono anche andato avanti e l'ho dipinto per scopi di visualizzazione, ma non devi farlo. Ecco la mia configurazione a questo punto:

Rosso: interruttore di accensione/spegnimento
Giallo: pulsante
Blu: manopola
Verde: cursore

Abbiamo anche bisogno di CPU, ROM e chip video dal cassetto Varie. Non preoccuparti, ti spiegherò tutto più tardi, ma per ora prendi solo il più piccolo di ciascuno e posizionalo sul tuo gadget. Non ci sarà spazio sulla parte anteriore del tabellone, quindi togli il coperchio, capovolgi il tabellone e mettili sul retro.

Programmazione per la prima volta

Il nostro dispositivo è completamente assemblato per la guida, quindi iniziamo con la programmazione. Fai scorrere il tuo multitool da sinistra, quindi vai al menu principale, Modifica gadget. Quindi fai clic su Modifica nella pagina del gadget e verrà visualizzato l'elenco delle risorse. Ci sarà un file "CPU0.lua" lì. Fai clic su di esso, quindi fai clic su Modifica e ti porterà alla schermata di codifica in cui puoi programmare la tua CPU. La CPU è il "cervello" del tuo gadget ed è dove va tutta la tua programmazione. È ciò che dice a tutti gli altri componenti cosa fare. Ignora il codice che è già lì. Seleziona tutto con Ctrl-A ed eliminalo. Spiegherò cos'era quella roba (e la userai più avanti) ma credo che sia meglio imparare partendo da niente. Vedrai perché.

Lua è una lingua molto semplice e adatta ai principianti. Se non hai mai programmato prima, non preoccuparti, questa guida è rivolta a te e ti spiegherò cosa significa tutto e come funziona. La prima cosa che vogliamo fare è accendere il LED. Aggiungi la seguente riga di codice al tuo programma, tenendo presente che lo è case sensitive:

gdt.Led0.State = vero

Noterai mentre digiti che è apparso un pop-up, che ti dà suggerimenti per il riempimento automatico. Questo è uno strumento molto prezioso per un nuovo programmatore, non trascurarlo. Fornisce un elenco di modi disponibili per completare il codice e fornisce una semplice descrizione del significato di ciascun elemento. Puoi utilizzare le frecce su e giù per evidenziare cose diverse e visualizzarne le descrizioni.

Ora, esaminiamo quella riga di codice che abbiamo appena aggiunto:

gdt.Led0.State = vero

Ci sono diverse parti di quel codice, separate da punti e un segno di uguale. La prima parte “gdt” si chiama a spazio fondamentale. È un pezzo di codice che ti consente di accedere ai componenti del gadget (l'interruttore, i pulsanti, il LED, ecc.) e di utilizzarlo nella riga di codice corrente. Pensalo come aprire una cartella sul tuo computer. Per accedere ai file all'interno della cartella, devi prima aprire la cartella. Funziona allo stesso modo nella codifica, i nostri componenti sono dei “file” all'interno di una “cartella” che è il gadget stesso, e per accedere ai componenti del gadget dobbiamo “aprire la cartella” chiamando il basic “gdt” spazio. Dopo aver digitato "gdt". con un punto, vedrai un elenco di tutti i componenti del gadget.

La parte successiva, "Led0" è il nome del nostro LED. Puoi vedere il nome di qualsiasi componente facendo clic su di esso mentre il dispositivo è spento. Dopo aver aggiunto un punto alla fine, ci verranno mostrati altri due possibili comandi: Colore e Stato. Lo stato è un booleano nel senso che è acceso o spento, indicato con "vero" o "falso". Aggiungendo "true" abbiamo abilitato l'accensione del nostro LED ogni volta che il dispositivo è alimentato. Quindi, vai avanti e premi il pulsante di accensione e guarda il LED accendersi.

Possiamo cambiare anche il colore. Inserisci questo codice:

gdt.Led0.Color = colore.verde

Ci sono più opzioni di colore, come avrai visto. Abbiamo la possibilità di selezionare un colore predefinito come abbiamo appena fatto usando il codice sopra (e ci viene fornito un elenco di colori disponibili nel popup di riempimento automatico) oppure possiamo creare il nostro colore specificando noi stessi i valori RGB che potremmo fare come questo:

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

Questo renderà anche il LED verde. Nota che "Colore" è in maiuscolo in questo, per differenziarlo dal colore predefinito che abbiamo usato prima. Lua fa distinzione tra maiuscole e minuscole, ricordalo sempre. I tre numeri tra parentesi sono rispettivamente i valori del rosso, del verde e del blu, su una scala da 0 a 255. Gioca con quei numeri e vedi che tipo di colori ottieni, ricorda solo di separarli con una virgola.

Rendi il LED di qualsiasi colore desideri utilizzando il metodo che desideri, quindi continuiamo.

Switches

Il nostro prossimo compito è far accendere il LED quando accendiamo l'interruttore.

Un interruttore è acceso o spento. Lo so, Capitan Ovvio. Lo dico perché è una visualizzazione di valori booleani. Un interruttore può essere attivato o disattivato ed emette un valore booleano "vero" o "falso" a seconda dello stato in cui si trova.

Elimina il codice Led State che abbiamo aggiunto prima:

gdt.Led0.State = vero

Puoi lasciare il tuo codice colore se lo desideri. Questo codice fa in modo che il LED sia acceso ogni volta che il dispositivo è acceso. Vogliamo che si accenda solo quando l'interruttore è acceso. Questo è molto facile da fare, basta usare la seguente riga di codice:

gdt.Led0.State = gdt.Switch0.State

Stiamo letteralmente dicendo al computer "lo stato del LED è uguale allo stato dell'interruttore". Quindi, se lo stato dell'interruttore è acceso o "vero", renderà vero anche lo stato del LED. Premiamo il pulsante di accensione e vediamo il nostro glorioso LED brillare di luminosità!

.. Uh oh, qualcosa non va. Il LED non si accende nemmeno dopo aver acceso l'interruttore. Questa guida fa schifo! Ma aspetta un secondo, se lascio l'interruttore acceso, quindi spengo e riaccendo il pulsante di accensione, il LED si accende. Sorpresa, ho appena dimostrato il lavoro del funzione update(), che è il codice che era nel nostro programma per impostazione predefinita quando abbiamo creato il nostro nuovo gadget e aperto la schermata di codifica della CPU per la prima volta. Vedi, senza la funzione di aggiornamento, il codice che inseriamo viene eseguito solo una volta, a partire da quando accendiamo il gadget. Non eseguirà nuovamente il codice fino alla successiva accensione. Quindi, quando lo accendiamo, guarda lo stato dell'interruttore, vede che l'interruttore è spento e quindi non accende il LED. Quindi, quando accendiamo l'interruttore, non accade nulla perché il codice è già stato eseguito e non cerca più un cambiamento nello stato dell'interruttore. Allo stesso modo, se lasciamo l'interruttore acceso, quindi spegniamo e riaccendiamo il gadget, esegue nuovamente il codice e vede che l'interruttore è acceso e imposta anche il LED in modo che si accenda.

La funzione Aggiorna()
L'utilizzo della funzione update() significa che qualsiasi codice inserito all'interno della funzione verrà eseguito ad ogni nuovo tick. Puoi pensare a un segno di spunta come a un singolo fotogramma durante il rendering della grafica. Il tuo dispositivo funziona a una velocità definita in "tps" o tick al secondo (proprio come FPS nella grafica), che puoi vedere dalla finestra di codifica ogni volta che il tuo gadget è acceso. Più complesso ed esigente è il tuo gadget, più basso può essere il tuo tps, proprio come un gioco graficamente impegnativo avrà un FPS inferiore.

Ad ogni modo, per utilizzare la funzione update(), aggiungi semplicemente questo all'inizio del tuo codice:

funzione aggiornamento()

Tutte le funzioni devono avere una fine, quindi in fondo al codice, aggiungi semplicemente una riga che dice semplicemente "fine".


Ora accendi il tuo gadget e gira l'interruttore un po', e vedrai il nostro LED accendersi e spegnersi con l'interruttore come volevamo. Congratulazioni!

Quindi, per riassumere, tutto ciò che deve cambiare in tempo reale dovrebbe essere inserito all'interno di una funzione update(). Come premere un pulsante, premere un interruttore, spostare un cursore o una manopola. Il codice all'interno della funzione update() verrà eseguito ad ogni tick. Il codice al di fuori di esso verrà eseguito solo una volta.

Pulsanti e istruzioni if/then

I pulsanti funzionano in modo molto simile a un interruttore, nel fatto che emette un valore booleano. Ma lo fa in modi diversi:

Il comando "ButtonState" sarà l'ideale qui, in quanto produrrà un valore di "true" fintanto che il pulsante viene premuto. Gli altri due emetteranno solo per un singolo tick. Non è quello che voglio, voglio che il pulsante funzioni finché lo premo, quindi userò ButtonState in questa prossima attività.

Abbiamo un interruttore per accendere e spegnere il LED. Potremmo usare il pulsante per fare la stessa cosa sostituendo il codice switch con questo:

gdt.Led0.State = gdt.LedButton0.ButtonState

Ma voglio invece usare il pulsante per fare qualcos'altro, piuttosto che avere 2 ingressi che fanno la stessa cosa. Voglio che il LED cambi in un colore diverso mentre tengo premuto il pulsante e torni indietro quando lo lascio andare. Quindi, ho lasciato il codice che utilizza l'interruttore per accendere e spegnere il LED.

Come puoi vedere nell'immagine sopra, ho cambiato il colore del mio LED in verde. Cosa succede se voglio che il LED sia rosso quando tengo premuto il pulsante? Possiamo farlo usando un file istruzione se/allora.

Aggiungi il seguente codice in fondo al programma (ma prima della "fine" della funzione di aggiornamento):

se gdt.LedButton0.ButtonState == true allora gdt.Led0.Color = color.red end

Il rientro della seconda riga con un tasto TAB è una buona pratica per mantenere il codice organizzato e leggibile, ma non è obbligatorio.

Quello che fa questo codice è dire al computer "Se il pulsante viene premuto, allora rendi il colore del LED rosso". Quando si utilizza un'istruzione if/then, si specifica a condizione – che lo stato del pulsante è "vero" o che viene premuto. Quando la condizione è soddisfatta, ad esempio quando il pulsante viene premuto, eseguirà il codice all'interno dell'istruzione che consiste nell'impostare il colore del LED su rosso. Inoltre, notate i doppi segni di uguale nella riga della condizione. Ecco come devono essere scritte le condizioni.

Ora, quando accendo il mio dispositivo e premo l'interruttore, il mio LED si illumina in verde. Quando premo il pulsante, diventa rosso e torna verde quando lo rilascio. Evviva! Ora, se non avessi quel "gdt.Led0.Color = Color(0, 255, 0) in alto, il colore non tornerebbe al verde. Rimarrebbe rosso perché non esiste un codice che specifichi di che colore dovrebbe essere se il pulsante NON viene premuto. Potresti lasciarlo come l'avevo fatto io, ma un altro modo di gestire quell'attività sarebbe aggiungere un file altro dopo l'istruzione if/then.

se gdt.LedButton0.ButtonState == true allora gdt.Led0.Color = color.red altrimenti gdt.Led0.Color = color.green end

È abbastanza autoesplicativo. Dice al computer "se lo stato del pulsante è vero, imposta il colore del LED su rosso. In caso contrario, impostare il colore del LED su verde”.

Ora, proprio come prima, possiamo accendere la nostra luce e spostare il pulsante avanti e indietro per far cambiare colore al LED, e il nostro codice appare un po' più pulito di prima grazie all'istruzione if/then.

Cursori, manopole e variabili

Ok, ora siamo esperti booleani. Lavoriamo con qualcosa di diverso. I cursori e le manopole sono diversi, non emettono valori booleani, invece emettono un valore numerico. Uno slider va da 0 a 100, mentre una manopola ha un range negativo e va da -100 a 100.

Facciamo qualcosa di diverso usando il dispositivo di scorrimento. Lo useremo per controllare il livello di blu nel LED. Per fare ciò, cambiamo invece le due funzioni "colore" all'interno dell'istruzione if/then da colori predefiniti a RGB, in questo modo.

Ora, fino a questo punto ogni volta che utilizzo la funzione colore RGB, come mostrato sopra, specifico io stesso i valori RGB utilizzando un numero fisso. 255 rosso, 0 verde, 0 blu o 0 rosso, 255 verde, 0 blu. Non devi impostarlo codificandolo, puoi impostarlo usando qualsiasi cosa che emetta un numero. Guarda questo!

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

Questa riga di codice dice al computer che i valori rosso e verde sono 0 e che il valore blu è qualunque sia il valore dello Slider. Ma aspetta, il cursore va solo da 0-100 e l'intervallo RGB è 0-255! Quindi dobbiamo moltiplicare il valore di quel cursore per 2.55 allo stesso tempo!

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

Ok, questo sta iniziando a sembrare un po' disordinato. Qui è dove variabili tornare utile. Una variabile memorizza le informazioni con un nome specificato. Mettiamo tutto questo mumbo jumbo blu in una variabile in modo da non dover digitare l'intera equazione più volte. In cima al programma (ma all'interno della funzione di aggiornamento) aggiungi:

blu locale = gdt.Slider0.Value * 2.55

La parola "local" crea una variabile, dopodiché è ciò che vuoi chiamare la variabile. Ho chiamato la variabile "blu" perché lo scopo della variabile è memorizzare il valore del colore blu. Puoi chiamarlo come vuoi, però.

Ora, invece di digitare "gdt.Slider0.Value * 2.55" al posto del valore blu nella funzione RGB, possiamo semplicemente usare il nome della variabile, che è "blu":

se gdt.LedButton0.ButtonState == true allora gdt.Led0.Color = Color(255,0,blue) altrimenti gdt.Led0.Color = Color(0,255,blue) end

Ora possiamo accendere il nostro gadget e utilizzare il dispositivo di scorrimento per impostare il livello di blu del nostro LED. Abbastanza bello, eh?

Potremmo usare anche la manopola per fare la stessa cosa, ma una manopola va da -100 a 100, quindi metà della sua gamma non farebbe nulla perché non puoi avere un valore RGB negativo. Quindi invece mi piacerebbe fare qualcos'altro, con esso, voglio stampare il valore della manopola sullo schermo che abbiamo posizionato tanto tempo fa sotto il LED.

Esiste già una buona guida su come eseguire il rendering del testo su uno schermo. Leggilo qui prima di continuare.

Una volta che sai come visualizzare il testo sullo schermo, usiamo il nostro schermo per visualizzare il valore della nostra manopola. Aggiungi questo codice in fondo, separalo dal resto del nostro codice usando un mucchio di chiavi di ritorno. Ma tienilo all'interno della funzione di aggiornamento!

local videochip = gdt.VideoChip0 local font = gdt.ROM.System.SpriteSheets[“StandardFont”] gdt.Screen0.VideoChip = videochip local knob = gdt.Knob0.Value videochip.Clear(videochip, color.black) videochip.DrawText( videochip, vec2(0,0), font, manopola, color.white, color.black)

Per chiarire cosa stiamo facendo qui passo dopo passo, impostiamo il Video Chip del gadget su una variabile chiamata videochip, impostiamo il font incorporato su una variabile chiamata font, accoppiamo lo schermo al videochip, e poi creiamo una variabile per il nostro valore di manopola. Quindi iniziamo ogni tick cancellando lo schermo e quindi disegnando il testo contenuto nella variabile knob sullo schermo. Premi il pulsante di accensione e vediamo la magia accadere!

Uh oh, la mia guida fa di nuovo schifo! Stavo solo scherzando. Viene visualizzato un errore perché il comando DrawText richiede che il testo sia a stringa, non un numero (chiamato numero intero in programmazione). Una stringa è una serie di caratteri che vengono interpretati letteralmente, in altre parole visualizzati esattamente come inseriti.

Quindi, per visualizzare il valore della nostra manopola sullo schermo, dobbiamo convertire il suo valore in una stringa. Fortunatamente è così facile, dobbiamo solo modificare una singola riga di codice: la riga in cui creiamo la variabile knob. Invece di:

manopola locale = gdt.Knob0.Value

Lo modificheremo in questo modo:

manopola locale = (tostring(gdt.Knob0.Value))

Questo convertirà il valore della manopola in una stringa. Ora possiamo accendere il nostro gadget e voilà!

Questo è il nostro prodotto completamente finito! L'interruttore accende e spegne il nostro LED, il pulsante lo cambia tra verde e rosso, il cursore controlla il livello del blu e lo schermo mostra il valore della manopola. Abbiamo finito!

Lascia un tuo commento

ArabicEnglishFrenchGermanItalianJapaneseKoreanPortugueseSpanish