Я использую плату Arduino Mega 2560 для управления полосой светодиодов. Я пытаюсь использовать небольшую консольную программу C# для отправки последовательных команд в мою программу Arduino. В Arduino у меня есть библиотека под названием SerialCommand, где я могу прочитать последовательную строку и использовать ее для выполнения функции, а также передать так же аргументы: «functionName arg1 arg2 arg3». Я проверил это, отправив последовательные команды через терминал, и он отлично работает! Я получил функции Arduino для запуска, отправив последовательные команды из моей программы на C#, но только если эта последовательная строка не содержит пробелов.C# Отправка последовательных команд в Arduino
Вот мой C# код:
class Program
{
public static System.IO.Ports.SerialPort serialPort1;
private void establishConnection()
{
serialPort1 = new System.IO.Ports.SerialPort("COM4");
serialPort1.BaudRate = 115200;
serialPort1.Open();
}
static void Main(string[] args)
{
Program p = new Program();
p.establishConnection();
string i;
while (true)
{
Console.Write("Enter command: ");
i = Console.ReadLine();
if (i == "exit")
{
serialPort1.Close();
break;
}
else if (i == "1")
{
// Turn LED's on and pass argument "test"
serialPort1.Write("ON test\n");
}
}
}
}
Я знаю, что мои работы подключения и мои команды посылают, потому что если я запрограммировать свою функцию ON в Arduino работать без аргумента, он прекрасно работает. Однако, если я отправляю команду «ВКЛЮЧЕНО» и включаю аргумент после пробела, или, вообще говоря, пробелы, Arduino не читает его правильно.
У вас есть какие-либо идеи о том, почему пространство вмешивается в мои серийные команды на C#? Спасибо за любую помощь.
Вот простой пример того, что я делаю в Arduino:
#include "SerialCommand.h"
#include <Adafruit_NeoPixel.h>
SerialCommand sCmd;
#define PIN7 7
// Strip of LED's
Adafruit_NeoPixel testStrip = Adafruit_NeoPixel(10, PIN7, NEO_GRB + NEO_KHZ800);
uint32_t testStripColor = 0xFFFFFF;
void setup() {
Serial.begin(115200);
sCmd.addCommand("ON", lightsOn);
sCmd.addCommand("OFF", lightsOff);
testStrip.begin();
testStrip.show();
}
void loop() {
sCmd.readSerial();
}
void lightsOn() {
char *lightSet;
lightSet = sCmd.next(); // Read argument
if (strcmp(lightSet, "test") == 0) {
for (int i=0; i < testStrip.numPixels(); i++)
{
testStrip.setPixelColor(i, testStripColor);
}
testStrip.show();
}
}
void lightsOff() {
char *lightSet;
lightSet = sCmd.next(); // Read argument
if (strcmp(lightSet, "test") == 0) {
testStrip.clear();
testStrip.show();
}
}
Что делает ваш Arduino эскиз выглядит? –
Просто добавленный код Arduino – Jp837
Хмм странный. Вы пытались отправить строку «ON test» через последовательный монитор Arduino? –