У меня есть некоторые проблемы с передачей целых чисел в Arduino, которые не являются 1 или 0. В этом примере я хочу иметь возможность передать 3. Причина в том, что у меня скоро будет больше кнопок, управляющих различными частями Arduino и для этого потребуются разные целые значения.
Вот код Arduino..
void setup()
{
Serial.begin(9600);
// Define the led pin as output
pinMode(13, OUTPUT);
}
void loop()
{
// Read data from serial communication
if (Serial.available() > 0) {
int b = Serial.read();
// Note, I made it so that it more sensitive to 0-40% load.
// Since thats where it usually at when using the computer as normal.
if (b == 3)
{
digitalWrite(13, HIGH);
}
else if (b == 0)
{
digitalWrite(13, LOW);
}
Serial.flush();
}
}
Вот мой код на С#.
int MyInt = 3;
byte[] b = BitConverter.GetBytes(MyInt);
private void OnButton_Click(object sender, EventArgs e)
{
serialPort1.Write(b, 0, 4);
}
private void OffButton_Click(object sender, EventArgs e)
{
serialPort1.Write(new byte[] { Convert.ToByte("0") }, 0, 1);
}
У меня есть два разных способа отправки данных через serialport, но они оба работают одинаково. Мой вопрос: как узнать, какие значения выходят из Serial.read() на стороне Arduino. Когда я выбираю любое значение, которое не является 1 или 0 в моей программе С# для отправки, например, 3, программа не работает. Ясно, что 3 не отправляется как 3 в Arduino для хранения в целочисленное значение.
Я немного изменил ваш код - int b вытащили как объявление вверху, и я изменил вашу строку b = Serial.read(); to b = Serial.read() - '0';
int b;
void setup()
{
Serial.begin(9600);
// Define the led pin as output
pinMode(13, OUTPUT);
}
void loop()
{
// Read data from serial communication
if (Serial.available() > 0) {
b = Serial.read() - '0';
// Note, I made it so that it more sensitive to 0-40% load.
// Since thats where it usually at when using the computer as normal.
if (b == 3)
{
digitalWrite(13, HIGH);
}
else if (b == 0)
{
digitalWrite(13, LOW);
}
Serial.flush();
}}