【问题标题】:Serial monitor displaying random characters arduino串行监视器显示随机字符 arduino
【发布时间】:2019-12-04 02:44:17
【问题描述】:

我正在尝试设置一个 L298n,以便能够使用 arduino UNO 控制两个直流电机 (VIA BLUETOOTH) 的速度。

我创建了一个 MIT 应用发明者应用,并尝试使用应用上的滑块功能来控制电机速度。但是,当我打开串行监视器以查看我已连接到 arduino 上的 RX 和 TX 引脚以及 5v 和 GND 的 HC05 输入的内容时,会出现一些乱码。我附上了串行监视器产生的图像和我的 MIT 应用程序发明者块的图像。我读过很多人通过波特率遇到这个问题,但我的已经改为 34800。 非常感谢您在解决此问题时提供的任何帮助。 代码如下:

int enA = 6;
int enB = 3;
int in1 = 4;
int in2 = 9;
int in3 = 8;
int in4 = 2;
int val2;

void setup() {
    Serial.begin(38400);
    pinMode(enA, OUTPUT);
    pinMode(enB, OUTPUT);
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
    digitalWrite (in1, HIGH);
    digitalWrite (in2, LOW);
    digitalWrite (in3, HIGH);
    digitalWrite (in4, LOW);
}

void loop() {

    if (Serial.available() >= 0 ) {
        unsigned int a = Serial.read();
        unsigned int b = Serial.read();
        unsigned int val = (b * 256) + a;
        Serial.println(val);

        if (val >= 0 && val <= 255) {
            analogWrite(enA, val);
        }

        if (val >= 1000 && val <= 1255) {
            val2 = val - 1000;
            analogWrite(enB, val2);
        }
    }
}

【问题讨论】:

    标签: arduino bluetooth


    【解决方案1】:

    即使没有要读取的字节,您也正在尝试读取串行缓冲区。查看你的 if 语句。

    if (Serial.available() >= 0 ) {
    

    Serial.available() 返回缓冲区中可用的字节数 (see Arduino documentation)。当Serial.available() == 0 时,没有什么可读的。

    您只想在缓冲区中有内容时调用Serial.read()。将 if 语句更改为:

    if (Serial.available() > 0 ) {
    

    或者,简单地说

    if (Serial.available()) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多