PDA

View Full Version : [C#] Invio dati ad intervalli su porta seriale


GiuppeZip
23-08-2009, 18:01
ciao a tutti,

ho scritto un programmino WinForm semplicissimo, di prova, che serve ad inviare dati sulla porta seriale. Scrivo una stringa in una TextBox e, cliccando un pulsante, la spedisco tramite porta seriale, secondo questo codice:

namespace ProvaSeriale
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// apre la porta seriale all'apertura del programma
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
}
// invia i dati via seriale
private void button1_Click(object sender, EventArgs e)
{
serialPort1.WriteLine(textBox1.Text);
}
}
}

Il mio dubbio, ora è: avendo un array di stringhe, è possibile inviarne gli elementi via porta seriale secondo un intervallo temporale predefinito?
Cioè, è possibile implementare un ciclo in cui invio l'elemento di indice "n", poi quello successivo (e così via) ad esempio ogni secondo? Esistono esempi?
Spero di essermi spiegato, e ringrazio in anticipo chi mi potrà fornire spunti e idee.

Kralizek
23-08-2009, 18:39
la prima soluzione che mi viene in mente è usare una variabile contatore ed un'istanza della classe timer :)

GiuppeZip
26-08-2009, 21:16
Grazie per il suggerimento, ho risolto proprio così:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

int i = 0;

private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
timer1.Enabled = false;
timer1.Interval = 1000;
}

int[] numeri = {1, 2, 3, 4, 5};

private void timer1_Tick(object sender, EventArgs e)
{
i++;
serialPort1.Write(" " + numeri[i - 1].ToString());
}

private void btInvio_Click(object sender, EventArgs e)
{
timer1.Start();
}
}

Ho impostato l'intervallo del timer ad un secondo (1000 millisecondi), ed all'evento Tick (lo "scatto") ho associato l'istruzione di scrittura dell'elemento n-esimo dell'array. Ovviamente, siccome l'indice del vettore parte da zero, ho dovuto decrementarlo di uno (n-1). Il button "btInvio" serve a far partire il timer

:mano: