2017-12-03 226 views
0

對於一個簡單的項目,我想使用連接到HC-06藍牙模塊的ATTiny85,以便它可以與我的Android手機通話。ATTiny85與藍牙模塊的串行通信

我爲我的Arduino Uno編寫了代碼,它按預期工作。當我改變ATTiny85上使用的代碼時,我得到一個錯誤,說'Serial' was not declared in this scope,並假定ATTiny不支持硬件串行。

我需要在接收時讀取一個字符串,並在未接收時將其休眠。我去使用SoftwareSerial並且無法獲取字符串,只是第一個字符。

我以某種方式接近它,例如在循環內定義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++; 
    } 
} 

感謝所有。

回答

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