Stephan NollerMatthias L. Jugel
Published © CC BY

I2C Tools

Wenn man Dinge über den Grove-Port anschliessen möchte kommt häufig das I2C Protokoll zum Einsatz. Hier erstmal ein einfacher Scanner dafür.

AdvancedProtip1 hour587
I2C Tools

Things used in this project

Hardware components

Calliope mini
Calliope mini
×1

Story

Read more

Code

i2c scanner to Console

JavaScript
scans the i2c bus and reports findings on the serial console
let Platzhalter = 0
for (let i = 0; i <= 128 - 1; i++) {
    pins.i2cWriteNumber(i, 0, NumberFormat.UInt8LE)
    Platzhalter = pins.i2cReadNumber(i, NumberFormat.UInt8LE)
    if (Platzhalter != 0) {
        serial.writeLine("")
        for (let r = 0; r <= 255 - 1; r++) {
            pins.i2cWriteNumber(i, r, NumberFormat.UInt8LE)
            Platzhalter = pins.i2cReadNumber(i, NumberFormat.UInt8LE)
            if (Platzhalter != 0) {
                serial.writeNumber(i)
                serial.writeString("[")
                serial.writeNumber(r)
                serial.writeString("] = ")
                serial.writeNumber(Platzhalter)
                serial.writeLine("")
            } else {
                serial.writeNumber(i)
                serial.writeString("[")
                serial.writeNumber(r)
                serial.writeString("]\r")
            }
        }
    } else {
        serial.writeNumber(i)
        serial.writeString("[")
        serial.writeNumber(0)
        serial.writeString("]\r")
    }
}

visual i2c scanner

JavaScript
scans the is2 bus and reports found devices with their adress on the 5x5 matrice
input.onButtonPressed(Button.A, () => {
    for (let i = 0; i <= 127; i++) {
        if (pins.i2cReadNumber(i, NumberFormat.UInt16LE) != 0) {
            music.playTone(Note.C, music.beat(BeatFraction.Whole))
            basic.showNumber(i)
        } else {
            music.playTone(Note.D4, music.beat(BeatFraction.Sixteenth))
        }
        basic.clearScreen()
    }
})
input.onButtonPressed(Button.B, () => {
    for (let index = 0; index <= 99; index++) {
        pins.i2cWriteNumber(68, index, NumberFormat.UInt16BE)
        if (pins.i2cReadNumber(68, NumberFormat.UInt16BE) != 0) {
            music.playTone(Note.C, music.beat(BeatFraction.Whole))
            basic.showNumber(index)
        } else {
            music.playTone(Note.D4, music.beat(BeatFraction.Quarter))
        }
    }
})

Credits

Stephan Noller

Stephan Noller

8 projects • 11 followers
Matthias L. Jugel

Matthias L. Jugel

4 projects • 10 followers
Hacker, dad. I flash devices for fun. Mostly stuff works for me...

Comments