X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=lezioni%2Flezioni;h=318b62be8f67900c7aad8418e82fd6ee5c163487;hb=60ddd30355fe6cf4a58b96e26db788cb77f48834;hp=76cb63ee6079ef193349160a3a31af01176e53e3;hpb=ce01064ca177960976c052a74fe9c7ed581435c1;p=arduino diff --git a/lezioni/lezioni b/lezioni/lezioni index 76cb63e..318b62b 100644 --- a/lezioni/lezioni +++ b/lezioni/lezioni @@ -9,16 +9,21 @@ Esercizio Blink, 4 parti: commenti dichiarazioni setup loop. istruzioni e sequenze di istruzioni. Istruzione termina con puntoe virgola. Partire dalla funzione digitalWrite, modificare i tempi e ripetere: sequenze di istruzioni. -Variabili: impostare i tempi con una variabile. +Variabili: impostare i tempi con una variabile (falsa: e' una costante!) Fare una funzione per rapido - lento, guardare loop() e setup() impostare una nuova funzione per tempi e led: argomenti. +introdurre const. Setup() symbolic constant /usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h Mettere funzioni in un file separato, senza estensione. +Blink S.O.S: operazioni ripetitive. +Fare un ciclo while per far brillare un LED 10 volte: +Ciclo For. Informatica: automatismi per operazioni ripetitive. Introdurre un ciclo while() con un iteratore, ragionare sulla gestione dell'iteratore, scope, introdurre ciclo for (esercizio blinks/blink_4) Descrivere variabili e costanti, l'operatore const. +Ora spiegare veramente la differenza tra costante e variabile, Introdurre un LED e un resistore: circuiti elettrici, introduzione. Breadboard, jumpers, colore per cavi. @@ -27,7 +32,7 @@ Legge di Ohm, datasheet per LED. ...diventa ripetitivo: serve qualcosa per cambiare il flusso di esecuzione: cicli condizionali. - Input base per accendere un LED (senza bottone, col jumper), input libero: se non e' collegato a +5 o a ground e' come una antenna. + Input base per accendere un LED (senza bottone, col jumper), input libero: se non e' collegato a +5 o a ground e' come una antenna. http://lab.piffa.net/schemi/led_condizionale.png - Sketch seriale hello world - fare il circuito con un bottone momentaneo button_1 - sketch con debug seriale button_2_serial @@ -37,17 +42,60 @@ Seriali: funzioni base: instanziare con Serial.Begin(), print - println e flush( Usare un bottone e una resistenza: pull up e pull down, ciclo IF, invertire il circuito del bottone: confronto con cambio software per introdurre elettronica digitale. Differenza tra while e for: bottone con ciclo while. -Approfondimento: leggere le resistenze e i LED. +Finito fondamenti di programmazione -Input analogico: usare un potenziometro, resistivita' proporzionale alla lunghezza, potenziometro per varaire pausa dello sketch blink: a intervalli bassi tende al PWM. Cenni ai trimmer. +Analogico +------------- -- http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM -PWM, fatto con intervalli di un millisecondo, cenno a delayMicroseconds(), introdurre i PWM automatici: base con un byte per luminosita': cicli iterativi. Partire da while, variabile contatore e iteratore, e poi fori ternario. -Input analogico per impostare il PWM. +Status: ci stiamo preparando all'uso dei potenziometri per input anaogici - output analogici. Serve sapere un po' di bit/byte per BYTE / INT e ragionare sulle resistenze (conduttivita') per capire come funziona un potenziometro. + +- Operatori binari basi + +Tipi di dati: bit e int e long, signed and unsigned, long +- http://www.ladyada.net/learn/arduino/lesson4.html +- Informatica: sistema binario: 8 / 10bit di risoluzione +- Byte e INT e LONG + +def profondita(bits): + for i in range(bits +1): + print("2 elevato a ", i, "bits = ", 2**i, "valori") + +def binario(i): + for i in range(i): + print(i, "\t", bin(i)[2:] ) + +Approfondimento: leggere le resistenze. +Elettronica: resistivity p (Greek: rho) Resistenza * (Area / lunghezza) - Conductivity sigma 1/p : serve per fare una resisteza da ~5k con due da 10 in parallelo. + +Input analogico: usare un potenziometro, resistivita' proporzionale alla lunghezza, potenziometro per variare pausa dello sketch blink: a intervalli bassi tende al PWM. Cenni ai trimmer. +- basic/analog_input/analogInput_1/ -> precede l'introduzione del PWM con intervalli brevi +esercizio blink con pot che modifica pausa: spiegare uso di magic numbers. +- http://lab.piffa.net/sketchbook_andrea/basic/analog_input/analogInput_2_serial/ + +PWM: Traduzione tra potenziometro e PWM: /basic/pwm/pwm_4_analog_input/ +PWM: stati. Fare esempi con oscilloscopio / Logic Analizer. + - /basic/pwm/pwm_0_stati/ + https://www.arduino.cc/en/Tutorial/PWM +PWM: tutti gli esercizi con cicli while for per aumentare luminosita': + - basic/pwm/pwm_1_while_byte/ + - http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_2_for_loop/pwm_2_for_loop.ino + - pwm/pwm_3_fade_reverser/ richiede operatore OR || + +Fare pitch follower con calibrature. +Input analogico: sensore di luminosita'. Lettura valori, calibrazione manuale, calibrazione automatica, map(), constrain(), smoothing. Sketch basic/analog_input[3,4,5,6]. trasformazione input -> output analogico di un piezo: poibilita' di percepire soglie e range non percepibili con i sensi umani. Smothing (semplificato), claibrazione automatica. - Introdurre gli operatori comparativi (>,<,=!) e booleani (&&, ||, !): -Stato di un bottone poi Debouncing: grafico http://www.ladyada.net/learn/arduino/lesson5.html +Stato di un bottone: esercizi vari e operatori AND. + +- Array: knight rider - cicli loop + +- Piezo e bottoni in pull-up per keyboard +Descrizione del funzionamento, melodie di esempio (mario tunes!). +Arduino dev: utilizzare sketch su piu' tabs (include): percorsi <> "" + + +Debouncing con millis: grafico http://www.ladyada.net/learn/arduino/lesson5.html Eventuale: fare il circuito Knight rider con 6 led per pratica con for loop, magai con un solo resistor. http://arduino.cc/en/Tutorial/ForLoop @@ -73,12 +121,6 @@ Programmazione: vedere come stiamo con operatori e data types. Direttive per preprocesor: # define - # if defined - per DEBUG Usare seriale per aritmetica. -Input: bouncing e state: elettronica digitale. (serie di esercizi in "basic") -http://www.ikalogic.com/de-bouncing-circuits/ -(guardare arduino for dummies) -Analog input con un potenziometro. -Usare map() per ricalibrare una lettura. -Usare map() e poi una diffusuione *4 oer mappare un range 1024 -> 256 su PWM. Seriali: scrivere e debugging. Interpretae input / caratteri da seriale per accendere un LED. @@ -127,4 +169,4 @@ Usare un digitalWrite() per fornire 5v a un sensore (es fotocellula) solo quando Memoria: controllare l'utilizzo della memoria con la libreria MemoryFree. Usare constanti e bytes, rimuovere chiamate a Serial.println() (500bytes) con #IF DEBUG . Programmare arduino senza il bootloader salva un paio di KB. - +Arduino in potenza, slides: http://www.maffucci.it/2015/04/14/on-line-le-slide-alfabeto-di-arduino-lezione-5/