Salve a tutti
vi pongo un primo problema per il mio progetto, Chiaramente mi manca tanta conoscenza su Arduino e quindi abbiate pazienza.
Devo far accendere dei led su Arduino due (in questo caso ho provato su Arduino Uno e il problema è identico) tramite dei comandi da PC con un programma fatto in C#
per fare un esempio può semplice ho creato appositamente due righe di codice per capire se è un mio errore o la logica di Arduino è fatta così:
Poi su PC, in C# ho inserito una sola form e un pulsante (button1) . il codice è il seguente :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace prova_arduino_test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool sr;
private void button1_Click(object sender, EventArgs e)
{
string DatoInviato;
if (sr)
{
sr = false;
DatoInviato = "on";
}
else
{
sr= true;
DatoInviato = "off";
}
serialPort1.Write(DatoInviato);
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM9";
try
{
serialPort1.Open();
}
catch
{
MessageBox.Show("Errore sulla porta!",
"Controllo scheda Arduino", MessageBoxButtons.OK);
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
serialPort1.Close();
}
}
}
in pratica il led sull'uscita 7 evidenzia che Arduino riceve un segnale sulla seriale e l'uscita 5 accende e spegne in alternanza.
Quello che non è normale è che non sono "sincronizzati" e attende un tempo che non è modificabile (ho messo un ritardo di 10ms, ma se metto di più non cambia niente) .
Serial.readString() reads characters from the serial buffer into a String. The function terminates if it times out (see setTimeout()).
Serial.readString() inherits from the Stream utility class.
e
Serial.setTimeout()
Description
Serial.setTimeout() sets the maximum milliseconds to wait for serial data. It defaults to 1000 milliseconds.
Serial.setTimeout() inherits from the Stream utility class.
Syntax
Serial.setTimeout(time)
se cerchi qui nel forum l'uso della classe String è sconsigliata per tutta una serie di motivi, legati alla gestione della memoria del micro, e si consiglia invece l'uso delle stringhe classiche del C (array di char) o l'implementazione di semplici protocolli di scambio dati...carattere di inizio, messaggio, carattere di terminazione/controllo.