Tipi di dato (codici) numeri byte (N-8 bit) 0 / 255 int (Ca2-16 bit) -32.768 / 32.767 unsigned int (N-16 bit) 0 / 65.535 long (Ca2-32 bit) -2 G / +2 G unsigned long (N-32 bit) 0 / 4 G (short = int) caratteri char (ASCII-8 bit) -127 / +128 virgola mobile float (32 bit) double (64 bit) booleani boolean (true / false) Operazioni + somma differenza * moltiplicazione / divisione % resto della divisione intera Prog_01: test di output sul monitor byte b; //commenti e variable scope void setup(){ Serial.begin(9600); b=0;} void loop(){ //print / println Serial.println(b); b++; delay(1000);} Serial.print(" oct - "); Serial.print(b, HEX); Serial.println(" hex"); b++; delay(1000);} Prog_05: utilizzo dei caratteri ASCII (tramite casting char di un byte) byte b; void setup(){ Serial.begin(9600); b=97;} void loop(){ //print / println Serial.println("stampa di un byte come numero"); Serial.println(b); Serial.println("stampa di un byte come carattere in codifica ASCII"); Serial.println((char)b); Serial.println("\n--------------\n"); b++; delay(1000);} EX_01: stampare tutta la tabella del codice ASCII esteso Prog_05: utilizzo del tipo char char c; void setup(){ Serial.begin(9600); c='a';} Prog_03: test di Overflow delle variabili int e unsigned int void loop(){ Serial.println("stampa di un char come carattere in codifica ASCII"); Serial.println(c); c++; delay(1000);} Prog_04: stampa dei valori in diverse basi (DEC, BIN, OCT, HEX) byte b; Prog_06: utilizzo del tipo boolean (AND = &&, OR = ||, NOT = !) boolean b; void setup(){ Serial.begin(9600); b=0;} void setup(){ Serial.begin(9600); b=true;} void loop(){ Serial.print(b, DEC); Serial.print(" dec - "); Serial.print(b, BIN); Serial.print(" bin - "); Serial.print(b, OCT); void loop(){ if(b){ Serial.println("la variabile e' vera"); b=false; }else{ Prog_02: test di Overflow della variabile byte Serial.println("la variabile e' falsa"); b=true; } delay(1000);} Prog_07: utilizzo dei vettori (const e for) const int lung = 5; int vett[lung]; void setup(){ Serial.begin(9600); vett[0]=50; vett[1]=10; vett[2]=60; vett[3]=20; vett[4]=100;} void loop(){ //variable scope for(int i=0; i<lung; i++){ Serial.println(vett[i]); } delay(1000);} Prog_08: utilizzo delle stringhe (vettori di char con null finale) char msg1[]="Il numero e': "; byte b; void setup(){ Serial.begin(9600); b=0; } void loop(){ Serial.print(msg1); Serial.println(b); b++; delay(1000);} Prog_09: lettura di un carattere da input Seriale char c; void setup(){ Serial.begin(9600); Serial.flush(); } void loop(){ if(Serial.available()>0){ c = Serial.read(); //ci sono anche i caratteri 10 e 13 Serial.println(c); }} EX_02: conversione di un carattere minuscolo (letto in input), nel corrispondente maiuscolo (in output) char c; void setup(){ Serial.begin(9600); Serial.flush(); } void loop(){ char d; if(Serial.available()>0){ c = Serial.read(); d = c-32; if(c!= 10){ Serial.println(d); } }} Prog_10: generazione di numeri casuali (random, randomSeed, millis) int c; void setup(){ Serial.begin(9600); randomSeed(millis()); } void loop(){ c = random(); Serial.println(c); delay(1000);} Prog_11: generazione di numeri casuali in un range ben preciso (random(min, max) ) int c; int min; int max; void setup(){ Serial.begin(9600); randomSeed(millis()); min = 100; max = 200;} void loop(){ // il massimo valore è 199 c = random(min, max); Serial.println(c); delay(1000);} continue;} Serial.println(i); i++;} delay(1000);} Prog_13: estrazione di numeri casuali (da 101 a 200 compreso); l’estrazione si interrompe quando esce un valore superiore al limite (190) e devo tenere traccia di quanti tentativi sono stati necessari; il gioco termina e si riinizia se esce il numero errore (122) (do while – break); //variabili globali int min; int max; int limite; int errore; int numero; void setup(){ Serial.begin(9600); randomSeed(millis()); min = 101; max = 201; limite = 190; errore = 122;} void loop(){ //variabile locale int i = 0; do{ numero = random(min, max); if (numero == errore){ Serial.println("errore"); break;} Serial.println(i); i++; }while(numero <= limite); delay(1000);} Prog_14: menu selezione per funzioni diverse (switch) char c; Prog_12: stampa dei numeri da 0 a 10 escluso, con salto del valore 5 (cicli, while - continue) void setup(){ Serial.begin(9600);} void setup(){ Serial.begin(9600); Serial.flush(); Serial.println("Scegliere la funzione voluta: a, b, c, d, e");} void loop(){ //variabile locale int i = 0; while(i<10){ if(i==5){ i++; void loop(){ if(Serial.available()>0){ c = Serial.read(); switch (c){ case 'a': Serial.println("hai scelto a"); break; case 'b': Serial.println("hai scelto b"); break; case 'c': Serial.println("hai scelto c"); break; case 'd': Serial.println("hai scelto d"); break; case 'e': Serial.println("hai scelto e"); break; default: Serial.println("la selezione non e' corretta"); }} delay(1000);} Prog_15: lettura PIN analogici A0 – A5 sulla sx (solo ingressi); valori da 0 a 1023 (10 bit) convertiti in Volt da 0 a 5 (analogRead, map, funzioni) int volt; int pin; void setup(){ Serial.begin(9600); pin = 0;} void loop(){ int valore = analogRead(pin); volt = convertiInVolt(valore); Serial.print(volt); Serial.println(" V"); delayMicroseconds(1000000);} int convertiInVolt(int a){ //mappa la var a da range 0-1023 //a range 0-5 int risposta = map(a, 0, 1023, 0, 5); return risposta;} Prog_16: utilizzo dei pin digitali (1 – 13, I/O); il pin 11 è di input, il 12 ed il 13 comandano dei led; se l’ingresso è alto (HIGH), viene acceso il 12 e spento il 13; se è basso (LOW), viene spento il 12 e acceso il 13; int pinLettura; int ledVerde; int LedRosso; void setup(){ pinLettura = 11; ledVerde = 12; ledRosso = 13; pinMode(pinLettura, INPUT); pinMode(ledVerde, OUTPUT); pinMode(ledRosso, OUTPUT);} void loop(){ int lettura = digitalRead(pinLettura); if(lettura == HIGH){ digitalWrite(ledVerde, HIGH); digitalWrite(ledRosso, LOW); } if(lettura == LOW){ digitalWrite(ledVerde, LOW); digitalWrite(ledRosso, HIGH); } delay(1000);} Prog_17: controllo PWM (~); accendiamo un led col pin 11, modulandone l’intensità luminosa; (analogWrite, valore 8bit); int ledVerde; int luminosita; void setup(){ ledVerde = 11; luminosita = 0; pinMode(ledVerde, OUTPUT); digitalWrite(ledVerde, LOW);} void loop(){ if(luminosita >= 255){ luminosita =0;} analogWrite(ledVerde, luminosita); luminosita = luminosita + 30; delay(1000);} Elenco delle principali funzioni rimanenti //il contatore in ms da 32 bit va in //overflow dopo circa 9 ore unsigned long millis(); void delayMicroseconds(int us); int min (int x, int y); int max (int x, int y); int abs(int x); //ritorna x se min<x<max, altrim. //min se x<min, max se x>max int constrain(int x, int min, int max); dounle pow (double base, double exp); //misura la durata (in ms) degli //impulse alti unsigned long pulseIn(int pin, HIGH); double sqrt(double x); double sin(double x); double cos(double x); double tan(double x);