《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#程序就会运行出错