HC-05/Arduino получает спам-данные

Я все подключил правильно. С первой попытки я получил данные так, как должен был. Затем я написал какую-то логику, перезалил и начал получать сумасшедший спам.

Мой последовательный монитор получает спам:

  • знаки вопроса, если переменная имеет вид char или;
  • 25252525252, если переменная имеет вид int, или;
  • -1, если переменная имеет значение String.

Я отслеживаю скорость 38400 бод, что соответствует моему Serial.begin().

Есть идеи?

Код:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define MIN_PULSE_WIDTH 650
#define MAX_PULSE_WIDTH 2350
#define DEFAULT_PULSE_WIDTH 1500
#define FREQUENCY 50

char data = 'a';

void setup()
{
  analogReference(DEFAULT);

  Serial.begin(38400);

  pwm.begin();
  pwm.setPWMFreq(FREQUENCY);
  Serial.println("hello world");
}

void loop()
{
  data = Serial.read();
  Serial.println(data);
  Serial.flush();
  if (data == 'a'){
    pwm.setPWM(0, 0, pulseWidth(90));
  }
  if (data == 's'){
    pwm.setPWM(0, 0, pulseWidth(30));
  }
  delay(1000);
  //время печати в секундах
}

int pulseWidth(int angle)
{
  int pulse_wide, analog_value;
  pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
  analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);

  return analog_value;
}

, 👍0


1 ответ


2

Serial.read() возвращает -1, если данные недоступны. Он не ждет байта. Проверьте наличие -1 или используйте Serial.available(), как это делается в любом примере.

Замените Serial.print(data) на Serial.write(data), чтобы вернуть данные без изменений.

,