Помогите пожалуйста новичку
- Войдите на сайт для отправки комментариев
Пнд, 08/06/2020 - 13:24
#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);
}
}
}
Код C#
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)
{
}
}
}
Привет всем.Помогите пожалуйста новичку.Не могу понять в чем проблема. В общем отправляю на ардуино нано код типа X1000 и так много раз, но в прекрасный момент код перестает исполняться и шаговый двигатель останавливается на 13 строчке кода. Использую ардуино нано, шд Nema 17, С# VB.NET.
Может как то буфер переполняется я ХЗ?
https://drive.google.com/file/d/11aY49rmVylbuZxBZRyh808ie49AkQV6E/view?u...
в 25 строке что происходит?
Считывает числовые данные
Считывает числовые данные
ага, считало оно, положим 1000, а потом вычло '0' ?
a "-'0'" в конце, это че?
без -0 точно так же останавливается на 13 строчке
Это типо чтобы не переводило по ASCII таблице. А какое ты значение ввел такое и пришло на ардуино. По моему так. не судите строго я новичек
отправляю на ардуино нано код типа X1000 и так много раз, но в прекрасный момент код перестает исполняться и шаговый двигатель останавливается на 13 строчке кода.
Это в принципе невозможно, чтобы код до этого исполнялся, а потом остановился на 13 строке. 13 строка - это setup(). код исполняет ее при старте ардуино, один единственный раз задолго до того, как принимает что-то по Сериал
отправляю на ардуино нано код типа X1000 и так много раз, но в прекрасный момент код перестает исполняться и шаговый двигатель останавливается на 13 строчке кода.
Это в принципе невозможно, чтобы код до этого исполнялся, а потом остановился на 13 строке. 13 строка - это setup(). код исполняет ее при старте ардуино, один единственный раз задолго до того, как принимает что-то по Сериал
лучше задать вопрос так - как вы определяете, что останавливается на 13 строчке?
Нет. Вы не так поняли. Останавивается на 13 строчке моего типо G-code. Тоисть я посылаю команды X1000 много раз вот 13 раз X1000 исполняет а остальные команды нет
Нет. Вы не так поняли. Останавивается на 13 строчке моего типо G-code. Тоисть я посылаю команды X1000 много раз вот 13 раз X1000 исполняет а остальные команды нет
ничего не понял, простите. 13 раз исполняется? или на 13-й строке останавливается? а эта 13-ая строка всегда разная или одна и та же? может в самой этой строке дело, а не в коде?
Строчки кода могут быть разные но всегда исполняет только 13 строчек
Я пробовал через монитор порта в ардуино посылать X1000. Но ни каких проблем не было
а в вашем окошке для кода richTextBox1 в виндовой программе - случайно не 13 строчек?
как раз нет я намного больше туда вписывал
как раз нет я намного больше туда вписывал
не, ну может оно у вас отсылает только 13 строк?
Попробуйте написать простенькую программу для ардуинки, которая просто считала бы все пришедшие строчки
А как я увижу что на ардуинку приходит если у меня порт уже занят отправкой данных?
А как я увижу что на ардуинку приходит если у меня порт уже занят отправкой данных?
много вариантов - подключить к ардуине экранчик, или вывести на другой USB порт через внешний USB-UART переходник, например
Понял.Спасибо.Попробую.
Есть снифферы порта. На комп поставьте и смотрите обмен.