Полный нуб. Я работал с 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
Последовательная связь, которую я установил в своем приложении форм, работает с Arduino NANO, но не с Seeed XIAO? ⇐ C#
Место общения программистов C#
1772044857
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;
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79896468/the-serial-communication-i-set-up-in-my-forms-app-works-with-arduino-nano-but-n[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия