WEBVTT

00:01.440 --> 00:08.220
Mentre passiamo all'utilizzo del display Hitachi e il nostro display touchscreen LCD a colori avrà

00:08.220 --> 00:17.170
bisogno di un rapido corso rapido sugli array e gli array di variabili stringa sono semplicemente una variabile con molte parti.

00:17.250 --> 00:27.540
Ad esempio questo è un array il nome della variabile è la mia mappa e ci sono otto parti nell'array

00:27.780 --> 00:28.970
chiamato elementi.

00:29.430 --> 00:37.110
Ho caricato l'array con otto diversi elementi all'interno delle parentesi graffe tutte separate da virgole.

00:37.260 --> 00:44.210
Una volta dichiarato l'array posso scrivere o leggere uno qualsiasi degli elementi.

00:44.230 --> 00:49.170
Ora gli elementi sono semplicemente numerati in sequenza ma il primo elemento è Element Zero.

00:49.260 --> 00:51.660
È molto importante, come vedrai tra un secondo.

00:51.720 --> 01:00.810
Quindi per leggere il primo elemento verrà caricato in un'altra variabile come questa, la variabile coords dello

01:00.960 --> 01:09.360
schermo ora equivale a trentatre negativi perché accede al primo elemento nell'elemento array 0.

01:09.570 --> 01:16.530
Le matrici sono indicizzate 0 perché se riesci a immaginare cosa sta facendo il compilatore

01:16.530 --> 01:25.080
in background quando dichiari l'array, designa una sequenza di posizioni di memoria RAM in cui memorizzare l'array che la

01:25.080 --> 01:31.020
posizione di memoria potrebbe trovarsi ovunque prenderà il primo blocco disponibile di memoria

01:31.020 --> 01:36.330
abbastanza grande da contenere l'array e memorizzerà quell'indirizzo per la variabile.

01:36.330 --> 01:45.720
Ora quando accede a quel blocco di RAM il numero di indice è in realtà un offset il compilatore ottiene l'indirizzo

01:45.720 --> 01:52.140
della prima posizione di memoria e quindi X accede alle diverse posizioni di memoria

01:52.470 --> 01:56.210
nell'array aggiungendo un offset al primo indirizzo.

01:56.220 --> 02:04.830
Quindi, per accedere al primo slot di memoria del gruppo, la memoria RAM verrà spostata per indirizzo di zero, nessun

02:05.790 --> 02:14.430
offset per accedere al secondo slot di memoria aggiungerà un offset di uno all'indirizzo di base per accedere al terzo slot

02:14.430 --> 02:22.500
di memoria aggiungerà un offset di due ecc. . Se dovessimo leggere il quinto elemento, aggiungeremmo un

02:23.040 --> 02:31.890
offset per questo e i coordini dello schermo ora sarebbero uguali a 16 negativi perché questo è il

02:31.920 --> 02:40.640
numero memorizzato nel quinto elemento dell'array che potrei anche scrivere su qualsiasi elemento in qualsiasi momento usando

02:40.640 --> 02:50.210
l'array nome della variabile e un numero indice questo è il numero ventiquattro nel terzo slot dell'array il terzo

02:50.270 --> 02:53.540
slot ha un indice di due.

02:53.720 --> 02:58.650
Ora, quando si dichiara un array, il compilatore deve sapere quanta memoria mettere da parte.

02:58.760 --> 03:04.910
Esistono diversi modi per farlo, tutti validi nel primo esempio.

03:04.930 --> 03:08.750
Non ho designato il numero di posizioni di memoria necessarie.

03:08.890 --> 03:15.250
Quindi presuppone che i valori tra parentesi graffe siano tutti gli elementi che dovranno memorizzare.

03:15.910 --> 03:23.370
Quindi conta quanti elementi ci sono e mette da parte quante posizioni di memoria nel secondo esempio

03:23.370 --> 03:25.450
impostiamo la dimensione dell'array.

03:25.530 --> 03:31.800
Ma come dichiarare qualsiasi altra variabile, non è necessario fornire i numeri da mettere

03:32.430 --> 03:38.520
in memoria, ma è necessario indicare alla dimensione quale dimensione creare l'array.

03:38.550 --> 03:44.970
Non è possibile lasciare vuote le dimensioni dell'array e non includere alcun valore di elemento perché non conosce

03:44.970 --> 03:47.210
le dimensioni necessarie per creare l'array.

03:47.550 --> 03:54.660
È necessario fornire almeno l'uno o l'altro perché deve trovare un blocco di memoria abbastanza grande

03:54.990 --> 04:02.950
in cui archiviare l'array in modo simile nel terzo esempio, è possibile visualizzare 18 posizioni di memoria designate

04:02.950 --> 04:07.560
ma fornire solo valori per i primi quattro elementi.

04:07.570 --> 04:09.160
Anche questo va bene.

04:09.250 --> 04:15.160
Gli abbiamo detto quante posizioni di memoria mettere da parte e supponiamo che in seguito

04:15.220 --> 04:17.280
riempiremo gli altri elementi.

04:17.380 --> 04:20.460
Un'ultima cosa molto importante prima di andare avanti.

04:20.530 --> 04:27.250
È molto importante non tentare di indicizzare al di fuori dell'array.

04:27.310 --> 04:34.550
Ad esempio, se dichiariamo questo array, imposta gli array in memoria.

04:34.550 --> 04:44.340
Uno due tre quattro cinque ma ora provo a leggere la mia mappa con cinque distorsioni.

04:44.340 --> 04:49.730
Ho appena fatto l'errore comune di dimenticare semplicemente che l'indice inizia da zero.

04:49.740 --> 04:57.090
Quando ho tentato di leggere l'ultima posizione di memoria nell'array, ora sto leggendo all'esterno dell'array perché sto tentando

04:57.300 --> 05:04.410
di leggere il sesto elemento in un array a cinque elementi, quindi se ricorderete come funziona il

05:04.410 --> 05:06.960
computer come funziona il compilatore.

05:07.170 --> 05:13.490
Quando ho dichiarato l'array ha messo da parte un po 'di memoria RAM per l'array.

05:13.500 --> 05:16.910
Ora non ho idea di dove si trovi quel blocco di memoria.

05:16.950 --> 05:21.590
Né tu né il compilatore, finché non lo compila.

05:21.840 --> 05:26.890
È semplicemente trovare un po 'di memoria disponibile che è abbastanza grande da contenere l'array e lo designa.

05:27.210 --> 05:37.200
Quindi ora quando gli chiedo di leggere la mia mappa 5 aggiunge un offset di 5 e va semplicemente a leggere quella posizione di memoria.

05:37.200 --> 05:43.320
Non hai idea di quale sia la posizione di memoria, ma stai per

05:43.320 --> 05:50.160
scoprire cosa c'è perché leggerà e renderà il mio numero quel valore ora sarà completamente casuale.

05:50.190 --> 05:58.380
Ancora peggio è se provo a scrivere di nuovo fuori dall'array, non hai idea di dove

05:58.590 --> 06:00.390
sia archiviato l'arduino.

06:00.420 --> 06:07.410
Pertanto, quando si dimentica che l'array è indicizzato 0 e si tenta di scrivere all'esterno dell'array, non è

06:07.410 --> 06:12.860
stato appena scritto un valore in una posizione di memoria completamente casuale sull'Arduino.

06:12.930 --> 06:15.440
Potrebbe essere un registro innocuo.

06:15.450 --> 06:21.990
Potrebbe essere un registro critico come una delle righe del tuo programma, il tuo programma è archiviato nella

06:21.990 --> 06:23.190
memoria a destra.

06:23.400 --> 06:29.100
Quindi hai semplicemente cancellato il tuo programma dall'interno perché hai appena scritto casualmente casualità nel mezzo

06:29.100 --> 06:30.510
del tuo programma.

06:30.630 --> 06:37.230
Questo è particolarmente vero se si scrive molto al di fuori dell'array perché l'indice è solo

06:37.230 --> 06:38.240
un offset.

06:38.370 --> 06:45.630
Quindi se ho un array delle dimensioni di 5 ma provo a scrivere su quell'array con un indice di

06:45.640 --> 06:49.160
circa trecentoventitre, allora sta scrivendo dei numeri su quello.

06:49.170 --> 06:51.750
Chi diavolo sa dove sull'Arduino.

06:51.750 --> 06:55.930
Potresti impostare tutti i tipi di registri strani come i registri della velocità di clock.

06:55.950 --> 06:56.620
Chissà.

06:58.260 --> 07:03.950
OK ora che abbiamo un handle sugli array, entriamo in quelle che sono chiamate variabili String.

07:03.960 --> 07:08.970
In realtà li stiamo già usando, ma non li abbiamo spiegati o concentrati su di loro.

07:09.000 --> 07:12.900
Un computer capisce solo i numeri giusti.

07:12.900 --> 07:17.610
Ma comunichiamo utilizzando sia numeri che lettere.

07:17.610 --> 07:20.000
O forse i geroglifici egiziani.

07:20.010 --> 07:26.340
Se ti piacciono cose del genere, a prescindere comunichiamo usando molto più di soli 10 numeri.

07:26.340 --> 07:33.690
Se stai comunicando in cantonese, stai usando qualcosa come 37 colpi diversi e verso l'alto di

07:33.690 --> 07:40.860
circa duecento radicali, quindi i computer semplicemente non ci capiscono e non possono capirci.

07:40.890 --> 07:46.950
Questo diventerà più significativo quando entreremo nell'intelligenza artificiale.

07:46.950 --> 07:50.920
Nel corso 5 perché un computer si occupa solo di numeri.

07:51.090 --> 07:53.160
Questo è tutto.

07:53.460 --> 07:59.700
Quindi, come mai un computer svolge funzioni di intelligenza artificiale che potrebbero essere assolutamente spaventose e

07:59.700 --> 08:03.400
il loro potere come il riconoscimento vocale al testo.

08:03.750 --> 08:10.200
Cercare le parole chiave nelle tue conversazioni e passare quelle informazioni all'NSA in modo da poter

08:10.200 --> 08:14.880
essere messo nella lista dei terroristi senza che il computer

08:17.570 --> 08:23.010
capisca nemmeno il linguaggio umano, non è paranoia se ti stanno davvero guardando.

08:24.320 --> 08:26.600
Quindi come fa l'intelligenza artificiale a farlo.

08:26.600 --> 08:29.350
Oh, questo è un mistero per un altro giorno.

08:29.450 --> 08:36.200
L'enfasi in questo momento è che i nostri computer non comunicano con lettere una variabile stringa è

08:36.200 --> 08:38.780
solo una variabile che contiene caratteri.

08:38.780 --> 08:41.720
Ad esempio, abbiamo sempre usato stringhe.

08:41.780 --> 08:50.320
Quando abbiamo inviato un comando di stampa alla stampa seriale del monitor seriale questa è una variabile di stringa, la variabile

08:50.320 --> 08:54.520
di stringa è quelle lettere che compongono quella frase.

08:54.550 --> 08:57.780
In realtà è tecnicamente un array.

08:57.850 --> 09:06.100
È una matrice di caratteri con ogni carattere tra virgolette che costituisce un elemento nella matrice.

09:06.220 --> 09:08.520
Ora il computer non conosce i loro personaggi.

09:08.530 --> 09:13.010
In effetti li converte in numeri in modo da poterli gestire.

09:13.030 --> 09:15.180
In quale tipo di numeri li converte.

09:15.190 --> 09:17.390
Beh, ASCII ovviamente.

09:17.420 --> 09:25.820
Ricorda che i nostri fantasiosi campionati vedono l'arte ASCII per inviare una serie di caratteri al nostro display Hitoshi.

09:25.870 --> 09:31.990
Trasmetteremmo le singole lettere in codici ASCII che era un no inviare quel numero al

09:32.230 --> 09:38.530
display e il display avrebbe interpretato cosa fare del codice ASCII e come visualizzare ciò che

09:38.530 --> 09:39.990
volevamo sullo schermo.

09:40.090 --> 09:48.600
Nel caso dell'Arduino Ida e qualche brava persona ha già codificato l'intera carta ASCII nell'I.

09:48.600 --> 09:48.600
D. e.

09:48.880 --> 09:54.390
Guarda tutto il lavoro che ti hanno salvato ora per inviare SMS al nostro schermo Hitachi.

09:54.430 --> 09:56.070
Lo scriviamo tra virgolette.

09:56.140 --> 10:03.130
Il programma arduino si converte in ASCII lo invia alla schermata allegata e voilà apparirà proprio come lo

10:03.130 --> 10:04.030
abbiamo digitato.

10:04.030 --> 10:05.830
Quella chiazza di petrolio o cosa.

10:07.150 --> 10:11.940
Quindi le variabili stringa di solito devono essere dichiarate come qualsiasi altra variabile.

10:12.250 --> 10:19.120
E proprio come qualsiasi altra variabile non è necessario caricarlo con un valore quando lo si dichiara.

10:19.230 --> 10:21.800
Ma puoi caricarlo se lo desideri.

10:21.810 --> 10:23.620
Quindi va così.

10:24.300 --> 10:31.380
Quindi devo prima dire al compilatore che tipo di variabile è.

10:31.380 --> 10:37.330
È un tipo di carattere, quindi il carattere indica che si tratta di caratteri.

10:37.500 --> 10:40.440
Quindi il nome della

10:43.220 --> 10:48.090
variabile e quindi assegna un valore alla variabile.

10:50.170 --> 10:54.430
Ora solo per confondere le cose c'è un oggetto stringa.

10:54.580 --> 11:04.200
Ha una S maiuscola che è molto simile e fa molte delle stesse cose che fa un array di caratteri, ma

11:04.200 --> 11:07.950
lo fa a scapito di più memoria.

11:07.980 --> 11:13.560
Non lo useremo perché la prima cosa che devi capire è che

11:13.650 --> 11:23.050
gli array di caratteri consumano già un accumulo di memoria e l'oggetto stringa prende ancora di più da qui in poi.

11:23.050 --> 11:27.840
Ogni volta che mi riferivo a un array di stringhe mi riferisco a un personaggio.

11:28.000 --> 11:30.700
In questo momento è un array.

11:30.880 --> 11:39.100
Ognuno di quei caratteri nell'array consuma una posizione di memoria e alla fine c'è un carattere nascosto

11:39.100 --> 11:44.520
chiamato un carattere no che indica la fine della stringa.

11:44.560 --> 11:53.710
Quindi ciascuno di quei personaggi, inclusi gli spazi tra le parole, consumano ciascuno una posizione

11:55.300 --> 12:07.240
di memoria, quindi questa semplice breve affermazione ha quarantasei caratteri e spazi e un carattere nascosto, quindi consuma quarantasette

12:07.330 --> 12:09.800
byte di memoria.

12:09.850 --> 12:15.310
Non suona molto, ma considerando che hai solo duemila byte di memoria per

12:15.310 --> 12:22.400
iniziare con quella piccola stringa che ha appena consumato quasi il due percento e mezzo dell'intero RAM disponibile.

12:22.510 --> 12:28.510
Supponiamo quindi che tu stia utilizzando il tuo display Hitachi per interagire con l'utente.

12:28.510 --> 12:36.030
Se un messaggio semplice e breve consuma in media 40 byte di memoria, 50 messaggi di testo

12:36.040 --> 12:41.240
che approvano lo schizzo consumerebbero tutti i ram disponibili su Arduino.

12:41.290 --> 12:44.210
Non c'è spazio per altre variabili.

12:44.470 --> 12:50.800
Non c'è spazio per la stampa sul monitor seriale perché utilizza variabili stringa ecc.

12:50.950 --> 13:06.930
In effetti, se dai un'occhiata a un esempio di Conor Toohey No, vai agli esempi di file SD e informazioni sulla scheda.

13:06.980 --> 13:15.110
Questo è uno schizzo che verifica semplicemente una scheda di memoria SD inserita nell'Arduino attraverso uno scudo del lettore

13:15.350 --> 13:17.140
di schede SD.

13:17.180 --> 13:18.590
Dò una rapida occhiata

13:22.180 --> 13:24.630
allo schizzo, non c'è molto che ci sia.

13:24.730 --> 13:37.500
Ma guarda tutte le variabili di stringa in questo piccolo schizzo che consuma un enorme milleduecentoquarantotto byte più della metà della RAM totale

13:37.500 --> 13:44.630
disponibile perché gli array di caratteri sono array che puoi sia leggere che

13:44.640 --> 13:51.450
scrivere elementi specifici all'interno dell'array esattamente come faresti tu a qualsiasi altro

13:51.450 --> 13:52.040
array.

13:52.050 --> 13:56.640
È solo che devi tenere a mente che hai a che fare con una variabile stringa.

13:56.700 --> 14:05.040
Una stranezza con il linguaggio di programmazione C su cui sappiamo si basa è che se hai un singolo

14:05.040 --> 14:08.230
carattere devi metterlo tra virgolette singole.

14:08.250 --> 14:20.460
Se hai più caratteri devi metterlo tra virgolette doppie, quindi se memorizziamo un carattere nella variabile della mia

14:20.460 --> 14:24.610
frase in questo modo cambierebbe

14:27.700 --> 14:40.220
le lettere minuscole nella somma delle parole in lettere maiuscole che lo slot 8 nota perché sono avendo a

14:40.340 --> 14:50.130
che fare solo con il singolo personaggio, ce l'ho tra virgolette singole, lo so.

14:50.130 --> 14:51.300
Non guardarmi

14:51.570 --> 14:53.230
Non ho fatto le regole.

14:53.340 --> 14:58.250
Onestamente non ho idea del perché l'hanno fatto in questo modo.

14:58.680 --> 15:05.070
Come in molte aree di questi corsi, ti sto semplicemente introducendo a questi concetti in modo da poterli

15:05.070 --> 15:05.720
usare.

15:05.730 --> 15:08.570
C'è così tanto da manipolare le stringhe.

15:08.610 --> 15:15.150
Potrei fare diverse lezioni proprio su questo, ma puoi approfondire questo argomento se sei interessato.

15:15.180 --> 15:20.670
Non entrerò nei dettagli perché non ne abbiamo bisogno per quello che faremo in questi corsi.
