2011-11-27 66 views
1

我开发了一个应用程序,通过套接字发送字符串/命令到另一台PC应用程序服务器,并通过串行端口向Arduino发送字符串。如何发送字节为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  
    } 
} 

上的Arduino运行的C++代码:

#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); 
      } 
     } 
    } 
} 
+0

这不是C. – SLaks

+1

是一个C adpted的Arduino的! ;) – FredVaz

回答

1

您应该能够使用原来的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); 
} 
// ... 
2

您想要将字符串的值转换为C中的整数。因此请使用atoi函数。