Una guida per mostrare come utilizzare i vari componenti di input di Retro Gadgets e codificarli per eseguire operazioni di base.
Introduzione
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
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
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:
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:
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:
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:
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
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:
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:
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.
Ad ogni modo, per utilizzare la funzione update(), aggiungi semplicemente questo all'inizio del tuo codice:
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
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:
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):
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.
È 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
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!
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!
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:
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":
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!
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:
Lo modificheremo in questo modo:
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!