2017-12-03 3 views
0

Für ein einfaches Projekt möchte ich einen ATTiny85 verwenden, der mit einem HC-06 Bluetooth Modul verbunden ist, so dass er mit meinem Android Telefon sprechen kann.ATTiny85 Serielle Kommunikation mit Bluetooth Modul

Ich schrieb Code für mein Arduino Uno und es funktionierte wie erwartet. Als ich den Code änderte, um auf meinem ATTiny85 zu verwenden, bekam ich einen Fehler, der 'Serial' was not declared in this scope sagt und angenommen, dass der ATTiny Hardware Serial nicht unterstützt.

Ich muss eine Zeichenfolge lesen, wenn empfangen und die MCU schlafen, wenn nicht empfangen. Ich habe SoftwareSerial benutzt und konnte keinen String bekommen, nur den ersten Char.

Ich näherte es in gewisser Weise, wie eine char string[10]; als globale und string[i] = mySerial.read(); i++; innerhalb der Schleife definieren, aber es funktioniert nicht. Ob es der Schlaf oder meine Arbeit ist, Daten zu lesen, ich konnte es nicht zum Laufen bringen.

Kann jemand eine Möglichkeit bieten, einen ATTiny85 in den Schlaf zu versetzen, aufzuwachen, um einen String über Serial zu erhalten und bis die nächsten Daten durch die serielle, bitte?

schlafen Ich bin mit

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) { 
} 

Und meine Schleife ist so etwas wie

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++; 
    } 
} 

Vielen Dank an alle.

Antwort

0
if (serial.available() > 0) { 

Das ist eine einmalige Sache. Sie sollten dies in eine while Schleife legen.

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

Würde i nach Inkrementieren zu überprüfen, auch nicht schaden.