ATTiny85 Последовательная связь с модулем Bluetooth

Для простого проекта я хотел бы использовать ATTiny85, подключенный к модулю Bluetooth HC-06, чтобы он мог общаться с моим телефоном Android.

Я написал код для моего Arduino Uno, и он работал как положено. Когда я изменил код для использования на моем ATTiny85, я получил сообщение об ошибке, что 'Serial' was not declared in this scope и предположил, что ATTiny не поддерживает Hardware Serial.

Мне нужно прочитать строку при получении и спать MCU, когда не получает. Я пошел использовать SoftwareSerial и не смог получить строку, только первый символ.

Я подошел к нему каким-то образом, как определение char string[10]; как глобальный и string[i] = mySerial.read(); i++; внутри цикла, но он не работает. Будь то сон или работа по чтению данных, я не мог заставить это работать.

Может кто-нибудь предоставить способ уложить ATTiny85 в спящий режим, проснуться, чтобы получить строку через Serial, и, пожалуйста, спать до следующих данных через Serial?

Спать я пользуюсь

void sleep() {
  GIMSK |= _BV(PCIE); // Enable Pin Change Interrupts
  PCMSK |= _BV(PCINT3); // Use PB3 as interrupt pin
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);

  sleep_enable(); // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
  sei(); // Enable interrupts
  sleep_cpu(); // sleep

  // woke up
  cli(); // Disable interrupts
  PCMSK &= ~_BV(PCINT3); // Turn off PB3 as interrupt pin
  sleep_disable(); // Clear Sleep Enable bit

  sei(); // Enable interrupts
}

ISR(PCINT3_vect) {
}

И мой цикл что-то вроде

char inputString[10];
int i = 0;

void loop() {
  sleep();

  if (serial.available() > 0) {
    char inputChar = serial.read();
    if (inputChar == '2') {    //Char to break
      //Do something and reset i
    } else {
      inputString[i] = inputChar;
    }
    i++;
  }
}

Спасибо всем.

1 ответ

if (serial.available() > 0) {

Это разовая вещь. Вы должны положить это в while петля.

while (serial.available() > 0) {
  char inputChar = serial.read();
  if (inputChar == '2') {    //Char to break
    //Do something and reset i
  } else {
    inputString[i] = inputChar;
  }
  i++;
}

Не мешало бы проверить i после увеличения тоже.

Другие вопросы по тегам