我无法理解这段代码。用于在Arduino上切换电机速度和方向的2位数

时间:2017-11-20 08:13:05

标签: arduino byte

你能帮助我理解这段代码吗?

#define pin1 2 // motor #1 +
#define pin2 3 // motor #1 –
#define pw1 9 // motor #1 pwm
#define pin3 4 // motor #2 +
#define pin4 5 // motor #2 –
#define pw2 6 // motor #2 pwm

void setup() {
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pw1, OUTPUT);
  pinMode(pw2, OUTPUT);
  Serial.begin(9600);
  digitalWrite(pin1, LOW);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, LOW);
  digitalWrite(pin4, LOW);
  analogWrite(pw1, 50);
  analogWrite(pw2, 50);
}

void loop() {
  if (Serial.available() >= 2) {
    unsigned int a = Serial.read();
    unsigned int b = Serial.read();
    unsigned int val = (b * 256) + a;// THIS
    if (val == 100) {
      // motor 1 reverse
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, HIGH);
    } else if (val == 200) {
      // motor #1 stop
      digitalWrite(pin1, LOW);
      digitalWrite(pin2, LOW);
    } else if (val == 300) {
      // motor #1 forward
      digitalWrite(pin1, HIGH);
      digitalWrite(pin2, LOW);
    } else if (val == 400) {
      // motor #2 reverse
      digitalWrite(pin3, LOW);
      digitalWrite(pin4, HIGH);
    } else if (val == 500) {
      // motor #2 stop
      digitalWrite(pin3, LOW);
      digitalWrite(pin4, LOW);
    } else if (val == 600) {
      // motor #2 forward
      digitalWrite(pin3, HIGH);
      digitalWrite(pin4, LOW);
    } else if (val >= 1000 && val <= 1255) {
      analogWrite (pw1, val – 1000);
    } else if (val >= 2000 && val <= 2255) {
      analogWrite (pw2, val – 2000);
    }
  }
}

我使用2个字节来控制电机。串口正在接收2个字节。我需要帮助理解代码的这一部分:

unsigned int a = Serial.read();
unsigned int b = Serial.read();
unsigned int val = (b * 256) + a

我只是看不到发生了什么。这就是我的理解:如果序列读取,例如1000,则保存在2个变量中:a = 1000 b = 1000.然后1000 * 256 = 256000,然后256000 + 1000 = 257000.但它不能,因为如果......它永远不会进入最后2个......所以我认为我没理解那个部分。

它有效。我制作了电路并将这2个字节发送到串口,电机工作。

1 个答案:

答案 0 :(得分:0)

代码将在串行上设置2个字节。

Serial.read()将处理每个字节

因此a将是引入的第一个字节,而b将是第二个字节。

I suggest to check this arduino reference