橋本 麦∿Baku Hashimoto

CATEGORY
Tips

ArduinoでSDに保存した設定ファイルを読み込む

諸々の設定値をSDカード内にテキストファイルとして保存して、Arduinoのセットアップ時に読み込むするコードです。 JurgenG/ArduinoSettingsからforkしてます。

baku89 / ArduinoSettings – GitHub

// settings
struct parameters {
  int       intValue;
  bool      boolValue;
  String    stringValue;
} settings;

ここで設定値の構造体を宣言します。

// Property list
if (description == "intValue") {
  settings.intValue = getIntSetting(DEFAULT_INT_VALUE);

} else if (description == "boolValue") {
  settings.boolValue = getBoolSetting(DEFAULT_BOOL_VALUE);

} else if (description == "stringValue") {
  settings.stringValue = getStringSetting(DEFAULT_STRING_VALUE);

} else { // Unknown parameter - ignore this line
  skipLine();
}

ここで設定値を文字列を指定の型へ変換しています。 set*Setting()は設定値を正しく読み出せなかった時のデフォルト値を引数にとります。あとはsetup()内でgetSettings()呼び出せばOKです。

20000byte近くになったので要らない関数は削除した方が良いかもしれません。

まだ全然Arduino使いこなせていないですが、久々に楽しいです。

Arduino同士でRS485通信

RS485を理解するための練習用です。参考にしたサイト。

ArduinoでRS485通信をしてみる – たぶん駄文

RS485の通信にはLTC485CN8を使いました。

LTC485CN8はDE,RE端子の状態によって送信、受信のモードを切り替えて使います。つまりマイコンは,DE,REに直結した端子をHIGHにしてから送信、LOWにしてから受信というように処理を行えばいいわけですね。あとはまぁ別に普通のシリアル通信です。

### 回路図

![回路図](/wp-content/uploads/2014/03/circuit.png)

### プログラム

必要最低限のコードです。秒数カウントを送信します。

### 送信側

int txden = 13;
int count = 0;

void setup(){
 Serial.begin(9600);
 pinMode(txden, OUTPUT);
 digitalWrite(txden, HIGH); // master
}

void loop(){
 Serial.write(count++);
 delay(1000);
}

### 受信側

int txden = 13;

void setup(){
  Serial.begin(9600);
  pinMode(txden, OUTPUT);
  digitalWrite(txden, LOW); // slave
}

void loop(){
  while(Serial.available()){
    byte inChar = (byte)Serial.read();
    Serial.println(inChar);
  }
  delay(10);
}