読者です 読者をやめる 読者になる 読者になる

The jonki

呼ばれて飛び出てじょじょじょじょーんき

【Arduino/Android】SoftwareSerialでAndroidとATtiny 85でLEDを2つ光らせる

さて、前回SoftwareSerialでAndroidArduinoがお話できるようになったので、Arduinoブートローダを焼いたATtiny 85を使って、かなり小さいLEDのBlinkモジュールを作りました。こんな感じにAndroid側から光らせるLEDを指定しています。

参考

ATtiny 85のArduino開発環境については下記の記事を参考に構築してみてください。

ATtiny 85のおさらい

ATtiny 85のピン配列はこんな感じでした。SoftwareSerialをPIN0とPIN1で利用しますが、PIN3とPIN4が余るのでこれを自由に使えます。今回はとりあえず2つのLEDをそれぞれ繋いでAndroid側からLEDを光らせてみます。


追記

よく考えればPIN2も開いてますね…

Arduino

糞コードですみません。とりあえずAndroid側からピン番号の文字をArduino側に送ってそれをArduino側でPIN3かPIN4を判断して、LEDを光らせています。

#include "SoftwareSerial.h"

#define StringMaxLength 32

SoftwareSerial mySerial(0, 1); // RX, TX
char data[StringMaxLength];
int counter = 0;

// the setup routine runs once when you press reset:
void setup() {                
    // initialize the digital pin as an output.
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT); 
    mySerial.begin(9600);
    mySerial.println("Hello from Arduino SoftwareSerial!");
}

// the loop routine runs over and over again forever:
void loop() {
    if(mySerial.available()) {
        data[counter] = mySerial.read();
        counter++;
        if(data[counter] == '\0' || counter == StringMaxLength) {
            data[counter] == '\0';
            mySerial.print("Hi from Arduino "); 
            mySerial.println(data);
            counter = 0;
            if(strcmp(data, "3") == 0) {
                mySerial.print("CMN3"); 
                BlinkLed(3);
            } else if(strcmp(data, "4") == 0) {
                mySerial.print("CMN4"); 
                BlinkLed(4);
            }
        }
    }
}

void BlinkLed(int led) {
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);
}