Как можно отправить байты для Arduino? - PullRequest
1 голос
/ 27 ноября 2011

Я разработал приложение, которое отправляет строку / команду по сокету на другой сервер приложений ПК и отправляет строку в Arduino через последовательный порт.

Проблема в том, как я могуотправить байты в Arduino?

C # сервера приложений, который отправляет строку через последовательный порт:

using System;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.IO.Ports;

public class senddata
{
    private void Form1_Load(object sender, System.EventArgs e)
    {
        // Define a Porta Serial

        serialPort1.PortName = textBox2.Text;
        serialPort1.BaudRate = 9600;
        serialPort1.Open();
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
        serialPort1.Write("1");  // 1 is a String     
    }
} 

Код C ++, работающий на Arduino:

#include <Servo.h>

Servo servo;
int pos;

void setup()
{
    servo.attach(9);
    Serial.begin(9600);
    pinMode(13, OUTPUT);
}

void loop()
{
    if (Serial.available()) {
        int msg = Serial.read();

       if (msg > 0) {
           servo.write(msg); // 10 = pos 1 10-9 = 1
    }
  }
}

Чтобы попытаться лучше понять проблему, я изменил код на этот (однако, поскольку значение сервопривода изменяется от 0 до 180, это не работает):

#include <Servo.h>

Servo servo;
int pos;

void setup()
{
    servo.attach(9);
    Serial.begin(9600);
    pinMode(13, OUTPUT);
}

void loop()
{
    if (Serial.available()) {
        int cmd = Serial.read();

        if (cmd > 0) {
            // If I send a 1 the LED stays ON...
            // but when a send 12 the LED doesn't stay OFF.
            if (cmd == '1') {
                digitalWrite(13,HIGH);
            }

            if (cmd == '12') {
                digitalWrite(13,LOW);
            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Вы хотите преобразовать значение строки в целое число в C. Поэтому используйте функцию atoi .

1 голос
/ 28 ноября 2011

Вы должны иметь возможность использовать свой оригинальный код Arduino, но измените код C # на этот:

// ...   
private void button1_Click(object sender, System.EventArgs e)
{
    SendByte(1); // Send byte '1' to the Arduino
}

private void SendByte(byte byteToSend) {
    byte[] bytes = new byte[] { byteToSend };
    serialPort1.Write(bytes, 0, bytes.Length);
}
// ...
...