2015-06-23 3 views
1

Я использую плату 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(); 
    } 
} 
+0

Что делает ваш Arduino эскиз выглядит? –

+0

Просто добавленный код Arduino – Jp837

+1

Хмм странный. Вы пытались отправить строку «ON test» через последовательный монитор Arduino? –

ответ

0

Пожалуйста, попробуйте:

serialPort1.WriteLine("ON test");

Смежные вопросы