Ви не увійшли.
Сторінки 1
Привет всем.Помогите пожалуйста новичку.Не могу понять в чем проблема. В общем отправляю на ардуино нано код типа X1000 и так много раз, но в прекрасный момент код перестает исполняться и шаговый двигатель останавливается на 13 строчке кода. Использую ардуино нано, шд Nema 17,Может как то буфер переполняется я ХЗ?
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 System.IO.Ports;
using System.Diagnostics;
using AngleSharp.Text;
//using System.Windows.Documents;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
bool isConnected = false;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
comboBox1.Items.Clear();
string[] portnames = SerialPort.GetPortNames();
if (portnames.Length == 0)
{
MessageBox.Show("COM PORT not found");
}
foreach (string portName in portnames)
{
comboBox1.Items.Add(portName);
Console.WriteLine(portnames.Length);
if (portnames[0] != null)
{
comboBox1.SelectedItem = portnames[0];
}
}
}
private void connectToArduino()
{
isConnected = true;
string selectedPort = comboBox1.GetItemText(comboBox1.SelectedItem);
serialPort1.PortName = selectedPort;
serialPort1.Open();
button2.Text = "Disconnect";
}
private void disconnectFromArduino()
{
isConnected = false;
serialPort1.Close();
button2.Text = "Connect";
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// При закрытии программы, закрываем порт
if (serialPort1.IsOpen) serialPort1.Close();
}
private void button2_Click(object sender, EventArgs e)
{
if (!isConnected)
{
connectToArduino();
}
else
{
disconnectFromArduino();
}
}
private void button3_Click(object sender, EventArgs e)
{
if (isConnected)
{
if (checkBox1.Checked)
{
serialPort1.Write("X");
}
if (checkBox2.Checked)
{
serialPort1.Write("E");
}
if (checkBox3.Checked)
{
serialPort1.Write("J");
}
}
}
private void button4_Click(object sender, EventArgs e)
{
if(checkBox1.Checked)
{
serialPort1.Write("B");
}
if (checkBox2.Checked)
{
serialPort1.Write("C");
}
if (checkBox3.Checked)
{
serialPort1.Write("D");
}
}
private void button5_Click(object sender, EventArgs e)
{
string[] lines = richTextBox1.Text.Split('\n');
foreach (string s in lines)
{
serialPort1.Write(s);
}
}
private void Form1_Load_1(object sender, EventArgs e)
{
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
#include <Arduino.h>
#include <AccelStepper.h>
AccelStepper mystepper(1, 5, 4);
int data;
int data1;
int coefi = 8;
void setup () {
Serial.begin (115200);
mystepper.setMaxSpeed(5000);
mystepper.setAcceleration(800);
}
void loop () {
stepButton();
}
void stepButton(){
if (Serial.available()) {
data1 = Serial.read();
data = Serial.parseInt()-'0';
Serial.println(data);
if (data1=='X'){
//mystepper.setSpeed(9000);
mystepper.setCurrentPosition(0);
mystepper.runToNewPosition(data);
}
if (data1 == 'E') {
mystepper.setSpeed(9000);
mystepper.setCurrentPosition(0);
mystepper.runToNewPosition(2500*coefi);
}
if (data1 == 'J') {
mystepper.setSpeed(9000);
mystepper.setCurrentPosition(0);
mystepper.runToNewPosition(-5000*coefi);
}
if (data1 == 'B' ) {
mystepper.setSpeed(-9000);
mystepper.setCurrentPosition(0);
mystepper.runToNewPosition(-1000*coefi);
}
if(data1 == 'C'){
mystepper.setSpeed(-9000);
mystepper.setCurrentPosition(0);
mystepper.runToNewPosition(-2500*coefi);
}
if(data1 == 'D'){
mystepper.setSpeed(-9000);
mystepper.setCurrentPosition(0);
mystepper.runToNewPosition(5000*coefi);
}
}
}
Неактивний
Бегло просмтривая код, думаю проблема в рассинхронизации комманд.
Например ты отправляешь X1000 но по какой то причине Serial.parseint() не дочитывает данные.
Т.е. срабатывает time out 1 sec по умолчанию для parseint(). и Arduino вычитала только X100, соответсвенно все остальные команды уже сыпяться
Посмотри в отладчике порта, что ты получаешь в Arduino, ну и наверное надо команды терминировать новой строкой
Тогда ParseInt не будет ждать 1 sec, а для тебя это будет признак целостности команды, новый свой цикл всегда будет начинаться после получения новой строки
Код надо будет подправить что вычитать и проверить новую строку
Неактивний
Сторінки 1