使用 C# serial.write 拉取任何 Arduino 引脚
Pull ANY Arduino pin using C# serial.write
我正在用 C# 编写一个应用程序,它将向我的 COM 端口发送一个 serial.write。我见过的所有 C# 控制 Arduino 引脚的例子都集中在只拉一个引脚上。下面是我的代码。我现在只能将引脚 9 拉至高电平,其他读取命令的 none 有效。小学生的错误在哪里? :)
Arduino 代码:
void setup() {
// Define inputs and outputs
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// Begin Serial communication at a baudrate of 9600:
Serial.begin(9600);
}
void loop() {
if (Serial.read() == 'a')
{
digitalWrite(9, HIGH);
}
else if (Serial.read() == 'b')
{
digitalWrite(9, LOW);
}
else if (Serial.read() == 'c')
{
digitalWrite(10, HIGH);
}
else if (Serial.read() == 'd')
{
digitalWrite(10, LOW);
}
else if (Serial.read() == 'e')
{
digitalWrite(11, HIGH);
}
else if (Serial.read() == 'f')
{
digitalWrite(11, LOW);
}
else if (Serial.read() == 'g')
{
digitalWrite(12, HIGH);
}
else if (Serial.read() == 'h')
{
digitalWrite(12, LOW);
}
delay(100);
}
C#代码
private void btnOP9on_Click(object sender, EventArgs e)
{
serialPort1.Write("a");
}
private void btnOP9off_Click(object sender, EventArgs e)
{
serialPort1.Write("b");
}
从串行读取一个字符会消耗它。你不能再读同一个字符。您需要从序列中读取一次,然后将其与所有不同的东西进行比较。
void loop() {
char c = 0;
if(Serial.available()){
c = Serial.read();
}
if (c == 'a')
{
digitalWrite(9, HIGH);
}
else if (c == 'b')
{
digitalWrite(9, LOW);
}
else if (c == 'c')
{
digitalWrite(10, HIGH);
}
else if (c == 'd')
{
digitalWrite(10, LOW);
}
else if (c == 'e')
{
digitalWrite(11, HIGH);
}
else if (c == 'f')
{
digitalWrite(11, LOW);
}
else if (c == 'g')
{
digitalWrite(12, HIGH);
}
else if (c == 'h')
{
digitalWrite(12, LOW);
}
delay(100);
}
我正在用 C# 编写一个应用程序,它将向我的 COM 端口发送一个 serial.write。我见过的所有 C# 控制 Arduino 引脚的例子都集中在只拉一个引脚上。下面是我的代码。我现在只能将引脚 9 拉至高电平,其他读取命令的 none 有效。小学生的错误在哪里? :)
Arduino 代码:
void setup() {
// Define inputs and outputs
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// Begin Serial communication at a baudrate of 9600:
Serial.begin(9600);
}
void loop() {
if (Serial.read() == 'a')
{
digitalWrite(9, HIGH);
}
else if (Serial.read() == 'b')
{
digitalWrite(9, LOW);
}
else if (Serial.read() == 'c')
{
digitalWrite(10, HIGH);
}
else if (Serial.read() == 'd')
{
digitalWrite(10, LOW);
}
else if (Serial.read() == 'e')
{
digitalWrite(11, HIGH);
}
else if (Serial.read() == 'f')
{
digitalWrite(11, LOW);
}
else if (Serial.read() == 'g')
{
digitalWrite(12, HIGH);
}
else if (Serial.read() == 'h')
{
digitalWrite(12, LOW);
}
delay(100);
}
C#代码
private void btnOP9on_Click(object sender, EventArgs e)
{
serialPort1.Write("a");
}
private void btnOP9off_Click(object sender, EventArgs e)
{
serialPort1.Write("b");
}
从串行读取一个字符会消耗它。你不能再读同一个字符。您需要从序列中读取一次,然后将其与所有不同的东西进行比较。
void loop() {
char c = 0;
if(Serial.available()){
c = Serial.read();
}
if (c == 'a')
{
digitalWrite(9, HIGH);
}
else if (c == 'b')
{
digitalWrite(9, LOW);
}
else if (c == 'c')
{
digitalWrite(10, HIGH);
}
else if (c == 'd')
{
digitalWrite(10, LOW);
}
else if (c == 'e')
{
digitalWrite(11, HIGH);
}
else if (c == 'f')
{
digitalWrite(11, LOW);
}
else if (c == 'g')
{
digitalWrite(12, HIGH);
}
else if (c == 'h')
{
digitalWrite(12, LOW);
}
delay(100);
}