ATTiny85与蓝牙模块的串行通信

时间:2017-12-03 02:05:24

标签: arduino attiny software-serial

对于一个简单的项目,我想使用连接到HC-06蓝牙模块的ATTiny85,这样它就能与我的Android手机通话。

我为我的Arduino Uno编写了代码,它按预期工作。当我更改了在ATTiny85上使用的代码时,我收到错误消息'Serial' was not declared in this scope并假设ATTiny不支持硬件序列。

我需要在接收时读取一个字符串,并在没有接收时睡眠MCU。我去使用SoftwareSerial并且无法获得String,只是第一个char。

我以某种方式接近它,比如在循环中将char string[10];定义为全局和string[i] = mySerial.read(); i++;,但它仍然不起作用。无论是睡眠还是我的工作来阅读数据,我都无法使其发挥作用。

有人可以提供一种方法让ATTiny85进入睡眠状态,通过串口唤醒接收字符串并通过串口休眠直到下一个数据吗?

睡觉我正在使用

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 个答案:

答案 0 :(得分:0)

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也不会受到伤害。