Последовательная связь, которую я установил в своем приложении форм, работает с Arduino NANO, но не с Seeed XIAO?C#

Место общения программистов C#
Ответить
Anonymous
 Последовательная связь, которую я установил в своем приложении форм, работает с Arduino NANO, но не с Seeed XIAO?

Сообщение Anonymous »

Полный нуб. Я работал с Arduino, но это мое первое приложение для Windows Forms. Это очень простое приложение, которое взаимодействует с платой Arduino через последовательный порт.
Предпосылка: я построил механизм с приводом от мотор-редуктора, который поднимает и снимает крышку моего телескопа в здании обсерватории, отдельном от моего дома. двигателем управляет плата Seeed Studios XIAO SAMD21. он был протестирован и работает должным образом как с локальными кнопочными переключателями, так и с управлением с помощью последовательного монитора в Arduino IDE. Он также отображает правильный статус на последовательном мониторе с помощью цифр 1–5, обозначающих «закрыто», «движется», «открыто», «неизвестно» или «ошибка». Я пытаюсь написать это простое приложение Windows Forms для использования вместо последовательного монитора в Arduino IDE.
Я тестировал приложение в Visual Studio, и оно отправляет две простые последовательные команды при нажатии кнопок, получает входящие данные от Arduino и отображает данные в текстовом поле, как и ожидалось, при подключении к тестовой плате на моем рабочем столе, которая представляет собой Arduino NANO (единственная запасная плата Arduino, которая у меня была под рукой). Я применяю перемычки, имитирующие замыкание концевого выключателя, и получаю ожидаемые результаты в приложении.
Изначально у меня были проблемы с установкой приложения на целевой компьютер, но после изменения проекта с .netFramework 4.7.2 на 4.8 я смог просто скопировать файл .exe на целевой компьютер, и программа откроется. Затем он подключился к плате Seeed XIAO, которая управляет механизмом, но в текстовом поле «Состояние крышки» не отображалась никакая информация. Кроме того, кнопки кажутся прерывистыми, поскольку они срабатывают один или несколько раз, но затем не работают снова, если я не перезагрузлю Seeeduino и не перезапущу приложение.
Теперь я разобрал физический проект и удалил плату Seeed, принес ее домой, где я могу подключить ее к своему рабочему столу для устранения неполадок и устранения любых возможных проблем, связанных с другим компьютером. Я «запускаю» приложение внутри VS, форма открывается, но в поле «Состояние обложки» (текстовое поле1) ничего нет. Даже если я прикреплю к плате перемычки для имитации концевых выключателей, поле состояния останется пустым.
Если я нажму кнопки «Открыть» или «Закрыть» в форме, на плате Seeed мгновенно загорится синий свет (я предполагаю, что это светодиод RX). Похоже, что форма отправляет последовательные данные, у меня нет платы, подключенной к предполагаемому контроллеру двигателя, поэтому я не могу проверить, все ли работает, но она работала через последовательный монитор Arduino, когда она была установлена, поэтому у меня нет оснований предполагать обратное.
После нескольких нажатий кнопок связь прекращается, но это может быть ошибка пользователя, потому что я использую проволочные перемычки для имитации концевых выключателей. Мой код Arduino написан так, чтобы открываться только в том случае, если сообщается о пределе закрытия, и наоборот, а затем блокироваться, если механизм движется более 5 секунд (время перемещения крышки), а предел не закрылся. сложно смоделировать, нажав кнопку мыши, схватив крошечную плату, отсоединив одну перемычку и снова подключив другую перемычку к правильному контакту, и все это в течение 5 секунд.
Я понятия не имею, какой код мне следует вставить в качестве MRE, я чувствую, что проблема связана с последовательным чтением и записью. Вот текст form1.cs. Для Arduino NANO требуется 8 бит, без четности и один стоповый бит, и именно это, наряду со скоростью 9600 бод, — это мои настройки для последовательного порта1. Однако я не могу найти никакой информации о серийных требованиях к плате Seeed XIAO SAMD21. Я подозреваю, что это может быть причиной моих проблем.
В настоящее время я использую .NET Framework 4.8 на 64-разрядных компьютерах с Windows 11 pro.
рецензенты спрашивали об архитектуре ПК:
Настольный компьютер, на котором я собрал приложение с использованием VS 2026, представляет собой 16-ядерный процессор AMD Ryzen 9 7950X, работающий на частоте 4,5 ГГц, PCI 5.0, 32 потока, 96 ГБ оперативной памяти DDR5.
Целевой компьютер — мини-ПК MSI Cubi NUC с процессором Core i5-1340p, 12 ядер, 4,6 ГГц, 32 ГБ оперативной памяти DDR%, с твердотельным накопителем емкостью 1 ТБ.
Я добавил команды try-catch, предложенные одним из рецензентов. Однако я знаю, что Nano подключается по Com7, а Seed — по Com4. Я меняю этот параметр и пересобираю решение перед тестированием каждой платы.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace My_Cover_Controls
{
public partial class Form1 : Form
{
public delegate void d1(string indata);
private static string status;
public Form1()
{
InitializeComponent();
try { serialPort1.Open(); }
catch (Exception ex) { MessageBox.Show(ex.Message); }
}

private void label1_Click(object sender, EventArgs e)
{

}

private void pictureBox1_Click(object sender, EventArgs e)
{

}

private void OpenButton_Click(object sender, EventArgs e)
{
//Send command to Arduino to Open the Cover
serialPort1.Write("OpenCover");
}

private void CloseButton_Click(object sender, EventArgs e)
{
//Send command to Arduino to Close the cover
serialPort1.Write("CloseCover");
}

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string indata = serialPort1.ReadLine();
d1 writeit = new d1(Write2form);
Invoke(writeit, indata);
}
public void Write2form(string indata)
{
//This function handles data from the Arduino
char firstchar;
firstchar = indata[0];
switch (firstchar)
{
case '1':
status = "Closed";
textBox1.Text = status;
break;
case '2':
status = "Moving";
textBox1.Text = status;
break;
case '3':
status = "Open";
textBox1.Text = status;
break;
case '4':
status = "Unknown";
textBox1.Text = status;
break;
case '5':
status = "Error";
textBox1.Text = status;
break;
default:
status = "Not Present";
textBox1.Text = status;
break;
}
}

}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... nano-but-n
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»