Arduino-串口通信

《Arduino从基础到实践》第三章项目十,因为没有买蓝灯,我用的黄色的LED灯代替,代码如下:
char buffer[18];
int red, green, yellow;

int redPin = 9;
int greenPin = 10;
int yellowPin = 11;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.flush();
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available() > 0)
  {
    int index = 0;
    delay(100);
    int numChar = Serial.available();

    Serial.print("Received bytes:");
    Serial.println(numChar);

    if (numChar > 15)
    {
      numChar = 15;
    }

    while (numChar--)
    {
      buffer[index++] = Serial.read();
    }

    splitString(buffer);
  }
}

void splitString(char*data)
{
  Serial.print("Data entered: ");
  Serial.println(data);

  char*parameter;
  parameter = strtok(data, " ,");

  while (parameter != NULL)
  {
    setLED(parameter);
    parameter = strtok(NULL, " ,");
  }

  for (int x = 0; x < 16; x++)
  {
    buffer[x] = '\0';
  }

  Serial.flush();
}

void setLED(char*data)
{
  if ((data[0] == 'r') || (data[0] == 'R'))
  {
    int ans = strtol(data + 1, NULL, 10);
    ans = constrain(ans, 0, 255);
    analogWrite(redPin, ans);
    Serial.print("Red is set to: ");
    Serial.println(ans);
  }

  if ((data[0] == 'g') || (data[0] == 'G'))
  {
    int ans = strtol(data + 1, NULL, 10);
    ans = constrain(ans, 0, 255);
    analogWrite(greenPin, ans);
    Serial.print("Green is set to: ");
    Serial.println(ans);
  }

  if ((data[0] == 'y') || (data[0] == 'Y'))
  {
    int ans = strtol(data + 1, NULL, 10);
    ans = constrain(ans, 0, 255);
    analogWrite(yellowPin, ans);
    Serial.print("Yellow is set to: ");
    Serial.println(ans);
  }
}
一开始用Arduino的串口通信窗口做实验,后来自己在C#里面写了一个串口通信的控制台程序,也可以与之通信,
控制灯的亮度,代码如下:
SerialPort sp = null;
string inputStr = string.Empty;
Console.WriteLine("input cmd to port,input exit to exit");
inputStr = Console.ReadLine();
 try
 {
     sp = new SerialPort("COM3", 9600);
      sp.Open();

       while (!string.Equals(inputStr.ToUpper(), "EXIT"))
        {
            sp.WriteLine(inputStr);
            Console.WriteLine("input cmd to port,input exit to exit");
             inputStr = Console.ReadLine();
           }       
     }
     catch (Exception ex)
      {
           Console.WriteLine(ex);
       }
       finally
       {
            if (sp != null)
           {
                sp.Close();
                sp.Dispose();
            }
         }                

        Console.WriteLine("Press any key to exit...");
        Console.ReadKey(); 

需要注意的是,同一个串口只能同时被一个程序使用,如果Arduino串口窗口打开,则C#程序就会运行出错
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值