
Il sistema permette al PC di leggere/generare tensioni e leggere/generare stati logici verso il mondo esterno tramite un collegamento seriale.
Sono disponibili:
· 6 terminali di ingresso analogico A0..A5 (analog in) dove si può applicare una tensione da 0 a 5V, tale tensione viene letta da PC come un numero intero con range da 0 a 1023 (0=0V e 1023=5V)
·
11 terminali di ingresso/uscita digitale 2..13 (digital) dove
0V=Livello logico 0 e 5V=Livello logico 1.
La funzione ingresso/uscita di ciascun terminale è impostabile via software.
Se impostato come ingresso il PC legge lo stato logico del terminale 0V=0 5V=1.
Se impostato come uscita il PC genera lo stato logico del terminale 0=0V 1=5V.
·
Alcuni degli 11 terminali di ingresso/uscita digitale: quelli
contrassegnati da ~ possono essere configurati come uscite PWM.
L’uscita PWM genera un segnale ad onda quadra: livello basso=0V livello alto=5V
a duty-cycle impostabile tramite un numero intero con range 0..255 fornito da
PC, 0 corrisponde a duty-cycle 0%, 255 corrisponde a duty-cycle 100%

Sulla scheda Arduino deve essere installato il seguente software: tseriale.ino
Si trova in: \\xnullo\pubblica\Tool di sviluppo\ardu_seriale\arduino\tseriale
Occorre un componente per la gestione porte seriali del PC nel nostro
casa si chiama AsyncFree104, per verificare se è già stato installato aprire
Delphi e controllare nella palette degli oggetti se esiste la scheda ![]()
altrimenti andare su: \\xnullo\pubblica\Tool di sviluppo\ardu_seriale e
lanciare dphdrser.bat poi con Delphi chiuso andare su:
\\xnullo\pubblica
e lanciare delphi_1.reg
Per facilitare la creazione di un programma Delphi in grado si usare il sistema si parte da un progetto precostruito e lo si modifica in base alle proprie esigenze d’uso. Questo si trova in : \\xnullo\pubblica\Tool di sviluppo\ardu_seriale nella cartella delphi_tpl, copiare questa cartella nella dove si intende memorizzare il programma, è consigliabile cambiare nome alla cartella con un nome consono alle funzioni del programma.
Aprire poi con Delphi il Project.dpr che risiede nella cartella ed iniziare a lavorare.

Nel form precostruito è presente un TButton con Caption Seriale, questo è associato il comando per la configurazione del collegamento seriale tra PC e scheda Arduino quindi non và rimosso.
Col programma in esecuzione se si clicca su seriale appare:
|
|
Scegliere la COM dove risulta connessa la scheda e mettere la spunta su connesso e confermare con OK.
Per vedere la COM utilizzata dalla scheda eseguire: \\xnullo\pubblica\Tool di sviluppo\ardu_seriale\devmgmt.msc |
Estratto della finestra Gestione periferiche:
|
L’interazione tra Delphi ed Arduino avviene con una serie di procedure e funzioni appartenenti all’oggetto FormArduSerCom
function FormArduSerCom.RdAna(Ch:byte):word;
Legge la tensione dal terminale indicato in Ch (Ch=0 : corrisponde ad A0, Ch=5 : corrisponde ad A5).
Ritorna un numero da 0 a 1023 che corrisponde ad una tensione 0 a 5V.
Esempio:
procedure TForm1.Button2Click(Sender: TObject);
var
n:integer;
v:real;
begin
n:=FormArduSerCom.RdAna(0);
v:=n*5/1023;
StaticText1.Caption:=Format('%3.2f V',[v]);
end;
procedure FormArduSerCom.WrAna(Ch,v:byte);
Scrive il valore del duty v (range 0..255) nell’uscita PWM Ch
(i valori di Ch possono essere quello di tutti terminali contrassegnati dal ~).
Esempio:
procedure TForm1.Button2Click(Sender: TObject);
var
n:integer;
v:real;
begin
v:=StrToFloat(Edit1.Text);
n:=round(v*255/5);
FormArduSerCom.WrAna(5,n);
end;
procedure FormArduSerCom.SetMode(Ch,mode:byte);
Imposta il modo di funzionamento del I/O digitale
Ch= terminale (da 2 a 13) mode=modo di funzionamento (0:input,1:output, 2:input_pullup).
Esempio:
procedure TForm1.Button2Click(Sender: TObject);
begin
//Imposta terminale 2 come uscita
FormArduSerCom.SetMode(2,1);
end;
function FormArduSerCom.RdDig(Ch:byte):boolean;
Legge lo stato logico presente sul terminale indicato in Ch.
True se sul terminale c’è 5V.
False se sul terminale c’è 0V.
Esempio:
procedure TForm1.Button2Click(Sender: TObject);
begin
//Imposta terminale 2 come ingresso.
FormArduSerCom.SetMode(2,0);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if FormArduSerCom.RdDig(2) then
Shape1.Brush.Color:=clRed
else
Shape1.Brush.Color:=clMaroon
end;
procedure FormArduSerCom.WrDig(Ch:byte;v:boolean);
Scrive lo stato logico di v sul terminale indicato in Ch.
Se v=True V terminale= 5V.
Se v=FalseV terminale = 0V.
Esempio:
procedure TForm1.Button2Click(Sender: TObject);
begin
//Imposta terminale 2 come uscita
FormArduSerCom.SetMode(2,1);
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
FormArduSerCom.WrDig(2,CheckBox1.Checked);
end;