Как заставить Arduino Nano управлять шаговым двигателем с помощью Firmata

У меня есть шаговый двигатель, и в настоящее время он управляется с помощью скетча, все работает нормально. Теперь мне нужно добавить его в приложение Win32, чтобы управлять им по схеме с существующим серводвигателем. Сервопривод хорошо работает через Firmata из приложения Win32 следующим образом

в части настройки

arduino.pinMode(9, Arduino.SERVO);

В цикле

 private void btn_set_servo_Click(object sender, EventArgs e)
        {
            int angle = Convert.ToInt32(Math.Round(numupdwn_degrees.Value, 0));
            arduino.servoWrite(9, angle);//скажите серводвигателю перейти в положение
        }

Как управлять шаговым двигателем с помощью Firmata у кого-нибудь есть пример?

, 👍1

Обсуждение

Ты говоришь, что это работает нормально. Так в чем же ваша проблема?, @PMF

Серводвигатель работает нормально, но шаговый двигатель вообще не работает. Серводвигатель и шаговый двигатель-это два разных животных. Мне нужно, чтобы оба они работали с одного и того же контроллера Win10., @user3884423

У меня нет ничего из этого, так что я могу только догадываться. Я думаю, вам нужен модуль AccelStepper firmata. Какую клиентскую библиотеку вы используете на ПК?, @PMF

Спасибо за помощь и понимание, но это библиотека для скетча, не работающего по протоколу Firmata, которая позволит мне запускать приложение C# Win32 с другими элементами., @user3884423


1 ответ


Лучший ответ:

0

Обновление: Я создал C# .Сетевое приложение для подключения и управления шаговым двигателем. Код и файл Readme доступны по адресу

https://github.com/zizwiz/Arduino_Projects/tree/main/FirmataStepperMotorTest


Первоначальный ответ:

После некоторого размышления мне удалось запустить шаговый двигатель, работающий по протоколу Firmata, из моего приложения C# Win32. Этот пост-всего лишь базовый план, который я использую, чтобы запустить его, мне нужно еще много думать и возиться, пока я не получу то, что мне нужно, но в случае, если это полезно, вот оно.

Создайте кнопку, которую нужно нажать для запуска. Создайте поток при нажатии кнопки

   private void btn_stepper_start_Click(object sender, EventArgs e)
        {
           var thread = new Thread(() =>
           {
               while (true)
               {
                   RunStepper();
               }

           });
            
            thread.IsBackground = true;
            thread.Start();

        }

В функции RunStepper() создайте следующее

 private void RunStepper()
        {
            while (true)
            {
                arduino.digitalWrite(7, Convert.ToByte(255));
                arduino.digitalWrite(8, 0);
                arduino.digitalWrite(9, 0);
                arduino.digitalWrite(10, 0);
                Task.Delay(10);
                arduino.digitalWrite(7, 0);
                arduino.digitalWrite(8, Convert.ToByte(255));
                arduino.digitalWrite(9, 0);
                arduino.digitalWrite(10, 0);
                Task.Delay(10);
                arduino.digitalWrite(7, 0);
                arduino.digitalWrite(8, 0);
                arduino.digitalWrite(9, Convert.ToByte(255));
                arduino.digitalWrite(10, 0);
                Task.Delay(10);
                arduino.digitalWrite(7, 0);
                arduino.digitalWrite(8, 0);
                arduino.digitalWrite(9, 0);
                arduino.digitalWrite(10, Convert.ToByte(255));
                Task.Delay(10);
            }
        }

Как уже упоминалось, этот небольшой базовый пример-только начало, чтобы доказать, что я могу делать то, что мне нужно.

,