Salve a tutti, sono nuovo nel forum e spero di poter trovar aiuto e nel caso aiutare tutte le persone che riscontrano il mio problema.
Il mio obiettivo è quello di interfacciarmi con Arduino (In questo caso R4 Minima) tramite un programmino creato con Form Visual Basic.
In poche parole il programma non fa altro che fare una scansione delle COM, selesionare la COM desiderata e connettersi. Con ulteriori due tasti gli mando una stringa in seriale che corrisponde a "start" e "stop". L'arduino risponderà accendendo o spegnendo il LED_BUILTIN.
Qual'è il problema? Beh, lo stesso codice di arduino si comporta diversamente tra:
Arduino UNO R3 e Arduino UNO R4 Minima (Giustamente montano micro diversi)
Nel codice riportato è riportato anche lo stepper ma non lo sto utilizzando.
#include <Stepper.h>
#define GIRO 2746 * 1
const int step_rot = 24;
const int vel = 24;
const int step_tot = GIRO;
const int step_mov = 1;
int step = 0;
Stepper bipolar(step_rot, 8, 9, 10, 11);
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
bipolar.setSpeed(100);
}
void loop() {
if (letturaSeriale().equals("start")) {
digitalWrite(LED_BUILTIN, HIGH);
for (int i = 0; i < GIRO; i++) {
if (letturaSeriale().equals("stop")) {
digitalWrite(LED_BUILTIN, LOW);
break;
}
bipolar.step(step_mov);
}
}
}
String letturaSeriale() {
String comando = "";
char c;
unsigned long startTime = millis();
unsigned long timeout = 1000;
while (millis() - startTime < timeout) {
if (Serial.available()) {
c = Serial.read();
if (c == '\n' || c == '\r') {
comando.trim();
return comando;
} else {
comando += c;
}
}
}
return "";
}
Utilizzando Arduino UNO R3 funziona tutto regolarmente, premo il mio pulsante e invio la stringa "start" e il led si accende.
Lo stesso codice con Arduino UNO R4 Minima invece ha un comportamento strano.. La COM sembra connettersi, ma quando gli mando il comando ("start") non accade nulla.
Ho provato in diversi modi, premendo il tasto reset, mettendogli un while alla seriale ma niente. Nel momento in cui mi collego con il monitor seriale di arduino (dopo essermi connesso con il programmino e avergli inviato le stringe), il LED_BUILTIN si accende, come se il messaggio fosse rimasto in coda. Questo non accade con l'altro Arduino.
Vi condivido anche il codice del Form Visual Basic anche se magari potrebbe interessare di meno:
Public Class Form1
'ESECUZIONE AL CARICAMENTO DEL FORM
Dim connection As Boolean = False
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Button1.PerformClick()
SerialPort1.NewLine = vbLf
End Sub
'TASTO AGGIORNA
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ComboBox1.Items.Clear()
ComboBox1.Items.AddRange(IO.Ports.SerialPort.GetPortNames())
Console.WriteLine("Aggiornamento COM")
End Sub
'TASTO DI CONNESSIONE/DISCONNESSIONE
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If connection Then
SerialPort1.Close()
Console.WriteLine("Disconnesso")
connection = False
Else
SerialPort1.Encoding = System.Text.Encoding.Default
SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = TextBox1.Text
If ComboBox1.Text <> "Seleziona.." Then
SerialPort1.Open()
Console.WriteLine("Connesso")
connection = True
End If
End If
End Sub
'PULSANTE START
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
SerialPort1.WriteLine("start")
Console.WriteLine("start")
End Sub
'PULSANTE STOP
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
SerialPort1.WriteLine("stop")
Console.WriteLine("stop")
End Sub
End Class
Aggiungo che mi sono assicurato che il Form Visual Basic invii le stringhe con il terminatore finale '\n'
Come posso risolvere questo problema? C'è qualche impostazione aggiuntiva che bisogna dare a codice ad arduino per la gestione della seriale?
Fatemi sapere vi ringrazio.