Помогите пожалуйста новичку
- Войдите на сайт для отправки комментариев
Пнд, 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 переходник, например
Понял.Спасибо.Попробую.
Есть снифферы порта. На комп поставьте и смотрите обмен.