Sei sulla pagina 1di 34

Arduino:Programmazione

ProgrammazioneformalmenteispirataallinguaggioCdacuideriva.
IprogrammiinARDUINOsonochiamatiSketch.
Unprogrammaunaseriediistruzionichevengonolettedallalto
versoilbassoeconvertiteineseguibileepoitrasferitesullaschedaArduino.

Arduino:Programmazione

LinguaggioC:Strutturadiunprogramma
main()
{
//istruzionidiprogrammadaeseguire
}

Arduino:Programmazione

LinguaggioArduino:Strutturadiunprogramma
voidsetup()
{
//istruzionidaeseguireunasolavolta
}
voidloop()
{
//istruzionidaeseguireciclicamente
}

Arduino:Programmazione
LinguaggioC:Compilazioneedesecuzione
PereseguireunprogrammainlinguaggioCnecessariocompilarlo.
Ilprocessodicompilazionetrasformaleistruzioniscritteinlinguaggionaturaleinuna
seriediistruzionimacchinaeseguibilidalcalcolatore.
Questaoperazioneconverteilcodicesorgenteincodiceoggettoeseguibiledalla
macchina(codicemacchina)
PerARDUINOavvienelastessacosamalafasedicompilazionesitraduceecompleta
essenzialmentenellafasedicaricamentodelcodicesullaschedastessa.

Arduino:Programmazione

LinguaggioArduino:Strutturadiunprogramma
setup()
Fasedipreparazione
loop()
Fasediesecuzione

Arduino:Programmazione

Istruzioni:
Leistruzionidiprogrammavannoterminateconilpuntoevirgola.
Ungruppodiistruzionideveessereracchiusotraparentesigraffe.
LeistruzionidelpreprocessoreNONvannoterminateconilpuntoevirgola.

Arduino:Programmazione
UnesempiodiprogrammaperARDUINO:
#defineLED13
intINGRESSO=7;
voidsetup(){
pinMode(LED,OUTPUT);
pinMode(INGRESSO,INPUT);
}
voidloop(){
if(digitalRead(INGRESSO))digitalWrite(LED,HIGH);
if(!digitalRead(INGRESSO))digitalWrite(LED,LOW);
}

Arduino:Programmazione

Percomprendereilprogrammadiesempiovistonecessariointrodurreiseguenti
concetti:
Variabili,CostantieTipodidato
Funzioni(parametridiingressoeparametridiritorno)
OperazioniAritmeticheeOperatoriLogiciediConfronto
Istruzionicondizionali
Istruzionidipreprocessore
CostantidiArduino
FunzionidiArduino

Arduino:Programmazione

Levariabili:
Lavariabileunalocazionedimemoriaallaqualeattribuiamounnomeenellaquale
memorizziamounvalore.
Levariabiliprimadiessereusatedevonoesseredichiarate.
Levariabilihannounaportatadivisibilitpiomenoampiaasecondadidovesitrova
lalorodichiarazione.

Arduino:Programmazione
UnesempiodiprogrammaperARDUINO:
#defineLED13
intINGRESSO=7;
voidsetup(){
pinMode(LED,OUTPUT);
pinMode(INGRESSO,INPUT);
}
voidloop(){
if(digitalRead(INGRESSO))digitalWrite(LED,HIGH);
if(!digitalRead(INGRESSO))digitalWrite(LED,LOW);
}

Arduino:Programmazione
Tipididato:

Arduino:Programmazione

Lecostanti:
Lacostanteunalocazionedimemoriaallaqualeattribuiamounnomeenellaquale
memorizziamounvalore.
Lecostantiprimadiessereusatedevonoesseredichiarate.
EsistonodellecostantiinARDUINOpredichiarateesempredisponibiliinqualsiasi
puntodelprogramma.

Arduino:Programmazione
UnesempiodiprogrammaperARDUINO:
#defineLED13
intINGRESSO=7;
voidsetup(){
pinMode(LED,OUTPUT);
pinMode(INGRESSO,INPUT);
}
voidloop(){
if(digitalRead(INGRESSO))digitalWrite(LED,HIGH);
if(!digitalRead(INGRESSO))digitalWrite(LED,LOW);
}

Arduino:Programmazione

LeCOSTANTIinArduino:
IllinguaggioArduinohaunaseriediparolechiavepredefiniteconvalorispeciali.
HIGHeLOWsiusano,quandosivuoleaccendereospegnereunpindiArduino.
INPUTeOUTPUTsiusanoperimpostareundeterminatopincomeingressoouscita.
TRUE/FALSEindicailfattocheunacondizioneounespressioneveraofalsa.

Arduino:Programmazione

Icommenti:
Icommentiinseritiall'internodelsorgentetraleistruzionidiprogrammapermettonodi
documentarelepartidelprogramma.
Icommentisonoignoratidalprocessore.
Cenesonodiduetipicommentiablocchiecommentiasingolalinea,naturalmente
consintassidiversa.

Arduino:Programmazione
UnesempiodiprogrammaperARDUINO:
#defineLED13//preprocessore:definiscounacostante
intINGRESSO=7;/* variabileintera
convaloreassegnato
ugualea7
*/
voidsetup(){
pinMode(LED,OUTPUT);
pinMode(INGRESSO,INPUT);
}
voidloop(){
if(digitalRead(INGRESSO))digitalWrite(LED,HIGH);
if(!digitalRead(INGRESSO))digitalWrite(LED,LOW);
}

Arduino:Programmazione
Funzioni(parametridiingressoeparametridiritorno):
Unafunzioneunbloccodicodicechehaunnomebendefinito,quindiunbloccodi
istruzionichevengonoeseguitiquandolafunzionevienechiamata.
Lefunzionisonoutilizzatepereseguireoperazioniripetitiveinmododaridurreilcodice
programmaedevitarequindiconfusionenelprogrammastesso.
Lefunzionisonodichiaratealliniziodelprogrammaespecificatedaltipodifunzione.
Lastrutturadellafunzionelaseguente:
<Tipodelvalorerestituito><nomefunzione>(<elencodeiparametri>)
Dopoiltipo,occorredichiarareilnomedatoallafunzioneetraparentesiiparametriche
vengonopassatiallafunzione.

Arduino:Programmazione

UnesempiodidichiarazionediFunzioneperARDUINO:
intdelayVal() //funzionesenzaparametri
{
intv;
//dichiarolavariabile
v=analogRead(pot);//funzionearduino
v=v/4;
//espressionearitmetica
returnv;
//valorediritornodellafunzione
}

Arduino:Programmazione

UnesempiodiBloccodiIstruzioniperARDUINO:
{
digitalWrite(pin,HIGH);
delay(1000);
digitalWrite(pin,LOW);
delay(1000);
}

//il'pin'su
//unsecondodipausa
//il'pin'gi
//unsecondodipausa

Arduino:Programmazione
Operazioniaritmetiche:
Glioperatoriaritmeticisonoaddizione,sottrazione,moltiplicazioneedivisione.
Esempi:
y=y+3;
x=x7;
i=j*6;
r=r/5;

Arduino:Programmazione
CompoundassignmentsAssegnazionicompound:
Sitrattadioperatorispecialichesiusanoperrenderepiconcisoilcodicediprogramma.
Essocombinaun'operazionearitmeticaconunassegnazionedivariabile.
Esempi:
a=a+1sipuscriverea++
a=a+2sipuscriverea+=2
Attenzione!
Sescrivo:value++,primavalutalavariabilevalueepoilaincrementadi1.
Seinvecescrivo:++value,primaincrementadi1epoilovaluta.
Lostessovaleper(menomeno).

Arduino:Programmazione
CompoundassignmentsAssegnazionicompound:
Questioperatorispecialisitrovanocomunementeneiciclifor.Leassegnazionipicomuni
includono:
x++;
//ugualeax=x+1,incrementalavariabilexdi+1
x;
//ugualeax=x1,decrementaxdi1
x+=y;
//ugualeax=x+y,incrementaxdi+y
x=y;
//ugualeax=xy,decrementaxdiy
x*=y;
//ugualeax=x*y,moltiplicaxpery
x/=y;
//ugualeax=x/y,dividexpery
Nota:peresempio,x*=3dacomerisultatoiltriplodelvaloredixepoivieneriassegnato
allavariabilex.

Arduino:Programmazione
Operatoridiconfronto:
Alcunevoltesihabisognodiconfrontareunavariabileounacostanteconun'altra.Il
confrontosiusanelleistruzionicondizionateif,whileeforperverificareseunadeterminata
condizionevera.
Esempi:
x==y
x!=y
x<y
x>y
x<=y
x>=y

//xugualeay
//xdiversoday
//xminorediy
//xmaggiorediy
//xminoreougualeay
//xmaggioreougualeay

Arduino:Programmazione
Glioperatorilogiciooperatoribooleani:
Glioperatorilogicisonounmodoperconfrontaredueespressioni.Siusanoanchequandosi
voglionocombinarediversecondizioni.RestituisconounafunzioneTRUEoFALSE.
CisonotreoperatorilogiciAND,OReNOT,chevengonoutilizzatiinistruzioniif:
ANDlogico:
if(x>0&&x<5) //verasoloseentrambeleespressionisonovere
ORlogico:
if(x>0||y>0)
NOTlogico:
if(!x>0)

//veroseunodelledueespressionivera

//verasoloselespressionefalsa

Arduino:Programmazione

Controllodelflussodiesecuzionedelcodicediprogramma:

1.Controllodiflusso(IF)istruzionecondizionale
2.Controllodiflusso(IFELSE)istruzionecondizionale
3.Controllodiflusso(FOR)ciclofinitoedeterminato
4.Controllodiflusso(WHILE)cicloacondizioneiniziale
5.Controllodiflusso(DOWHILE)cicloacondizionefinale

Arduino:Programmazione
Controllodiflusso(IF):
Listruzioneifverificaseunacertacondizione.
Selespressioneveralosketchesegueleistruzionicheseguono.
Sefalsailprogrammaignoraladichiarazione.
Unesempio:
if(variabile==valore)
{
//eseguebloccodiistruzioni
}

Arduino:Programmazione
Controllodiflusso(IFELSE):
Selespressionecontenutaallinternodelleparentesitondevera,
vieneeseguitoilcodicediprogrammachesegue.Selespressionefalsavengono
eseguitelerighedicodicesubitodopolistruzioneelse.
#defineAcceso1//definisceAcceso=1
#defineSpento0//definisceSpento=0
if(pulsante==ON)
{
digitalWrite(rele,acceso);
}
else
{
digitalWrite(rele,spento);
}

Arduino:Programmazione
Controllodiflusso(FOR):
Ilforvieneutilizzatoperripetereunbloccodiistruzioniracchiusotraparentesigraffeun
determinatonumerodivolte.Vieneutilizzatouncontatoreperincrementaree
terminareilciclo.Essocompostodatreparti,separatedapuntoevirgola(;):
for(inizializzazione;condizione;espressione)
{
eseguiistruzioni;
}

Esempio:
for(intA=0;A<10;A++)
{
//eseguileistruzioni;
}

Arduino:Programmazione
Controllodiflusso(WHILE):
uncomandosimileaIf.
Ilciclowhileesegueallinfinitoleistruzioniracchiusetraleparentesigraffefinoa
quandolacondizioneracchiusadentroleparentesitondediventafalsa.
Qualcosadevefarcambiarelavariabileinesame,oilciclowhilenonpotrmaiuscire.
Esempio:
while(someVariable<200)//verificasemenodi200
{
doSomething;
//esegueleistruzioniracchiusetraleparentesigraffe
SomeVariable++;
//lavariabilevieneincrementatadiunaunit
}

Arduino:Programmazione
Controllodiflusso(DOWHILE):
Ilciclodowhilesicomportacomelistruzionewhilemaconunaimportantedifferenza:
eseguealmenounavoltalistruzioneallinternodelciclodowhile.Quindivieneusato
quandosivuolecheilcodicedentroleparentesigraffevengaeseguitoalmenouna
voltaprimadiverificarelacondizione.
Esempio:
do
{
x=readSensors();
delay(50);
}while(x<100);

//assegnailvaloredireadSensors()ax
//pausadi50millisecondi
//ciclofinchxminoredi100

Arduino:Programmazione
Ingressi/Uscitedigitali:
pinMode(pin,mode)
Utilizzatoinvoidsetup(),serveperconfigurareundeterminatopinestabiliresedeveessere
uningressooun'uscita.

digitalRead(pin)
ListruzionepermettedileggerelostatodiunpindiinputerestituisceunvaloreHIGHsealpin
applicatountensioneounvaloreLOWsenonapplicatonessunsegnale.Ilpinpuessere
specificatocomeunavariabileocostante(013).

digitalWrite(pin,valore)
Attivaodisattivaunpindigitale,quindilistruzioneponeilpindiuscitaalivellologicoHIGHo
LOW.Ilpinpuesserespecificatocomeunavariabileounacostante(013).

Arduino:Programmazione
Ingressi/Usciteanalogici:
analogRead(pin)
Leggeilvaloreditensioneapplicatoadunpindiinputanalogicoconunarisoluzioneparia10
bit.Questafunzionerestituisceunnumerointerocompresotra0e1023.
analogWrite(pin,value)
Cambialapercentualedellamodulazionedilarghezzadiimpulso(PulseWidthModulation
PWM)suunodeipincontrassegnatidallasiglaPWM.

Arduino:Programmazione
OrologioInterno:
delay(ms)
Metteinpausaunprogrammaperlaquantitditempospecificatoinmillisecondi.Ilvalore1000
paria1secondo.
Esempio:delay(1000);//attendeunsecondo

DelayMicroseconds(us)
Metteinpausailprogrammaperlaquantitspecificatadimicrosecondi.
Esempio:delayMicroseconds(1000);//attendeunmillesimodisecondo

Millis()
RestituisceilnumerodimillisecondidaquandolaschedaArduinohainiziatol'esecuzionedel
programmacorrente.Iltipodidatoununsignedlong.
value=Millis();//impostalavariabile'value'alnumerodimillisecondiMillis()

Riferimenti

valentino.stampone@gmail.com
https://www.facebook.com/valentino.stampone
http://about.me/valentino.stampone

Potrebbero piacerti anche