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);
Scarica

C - Sito personale di Mirto Moressa