完全に個人的な備忘録

完全に個人的な備忘録。学習コストが高くなってきたので、メモしておかないと…片っ端から忘却の彼方なのです。

GR-KURUMIでI2C温度センサ(STTS751)を読んでみた

GR-KURUMI はI2CのSlaveになれる筈なのだが、今のところ成功していない。とりあえず、Masterで確認してみる事にした。以前RPiで読んだ事がある温度センサーSTTS751を接続してみる事にした。RPiの記事は以下の通り。

Raspberry Pi で温度センサ(STTS751)を読んでみた - 完全に個人的な備忘録

一度、やった事があるので、GR-KURUMI でも特に問題なく読めた。

ソースは以下の通り。因みに、LEDのHIGHとLOWが逆である。動作に影響はないけど。

/*GR-KURUMI Sketch Template Version: V1.04*/
#include <RLduino78.h>
#include <Wire.h>

// Addr - tied to GND.
#define STTS751_ADDR 0x39

// Pin 22,23,24 are assigned to RGB LEDs.
int led_red   = 22;                             // LOW active
int led_green = 23;                             // LOW active
int led_blue  = 24;                             // LOW active

// the setup routine runs once when you press reset:
void setup() {
    // initialize the digital pin as an output.
    Serial.begin(115200);
    pinMode(led_red, OUTPUT);
    pinMode(led_green, OUTPUT);
    pinMode(led_blue, OUTPUT);

    // turn the LEDs on, glow white.
    digitalWrite(led_red, LOW);
    digitalWrite(led_green, LOW);
    digitalWrite(led_blue, LOW);
}

int readByte(int addr) {
    Wire.beginTransmission(STTS751_ADDR);
    Wire.write((uint8_t) addr);
    Wire.endTransmission();

    Wire.requestFrom(STTS751_ADDR, 1);

    if (Wire.available()) {
        digitalWrite(led_green, HIGH);
        return Wire.read();
    } else {
        digitalWrite(led_red, HIGH);
        return -1;
    }
}

// the loop routine runs over and over again forever:
void loop() {
    int hi, lo;
    char szBuf[128];

    digitalWrite(led_red, LOW);
    digitalWrite(led_green, LOW);
    digitalWrite(led_blue, LOW);
    delay(500);

    Wire.begin();
    hi = readByte(0);
    lo = readByte(2);

    if (128 <= hi) {
        hi -= 256;
    }
    sprintf(szBuf, "%f", hi + (lo >> 4) * 0.0625);
    Serial.println(szBuf);

    delay(500);
}

f:id:tarancho:20140418234919p:plain