Versionsnummer auf dem mini: 1.0
Benutzter Editor: MakeCode
Hallo zusammen,
ich beschäftige mich gerade mal wieder mit dem Calliope und wollte endlich einmal I2C-Module von Seeed ans Laufen bekommen.
Da es als erstes immer wichtig ist, die Adressen der angeschlossenen I2C-Devices zu finden und nicht immer die Dokumentation verfügbar ist, habe ich einmal versucht, einen Scanner für diese Adressen zusammenzuschieben.
Der Code schaltet die RGB-Led auf rot und wartet auf einen Druck auf Knopf „A“, bevor er mit dem Scan beginnt. Während des Scans der Adressen von 1 bis 127 wird mit „plotBarGraph“ eine Art Fortschrittsbalken angezeigt und die LED leuchtet grün.
Liefert ein Auslesen des I2C-Buses auf einer Adresse einen anderen Wert als 0, schaltet die LED auf gelb und zeigt fortlaufend die Adresse an. Ein Druck auf „A“ sucht nach weiteren Adressen.
Sind alle Adressen durchgelaufen, fängt der Calliope wieder von vorne an.
Standardmässig - also ohne angeschlossene Module finde ich zwei genutzte Adressen: 24 (Barometer?) und 104 (Gyroskop?).
Schließe ich z.B. an A0 einen Seeed I2C Motortreiber an, wird je nach Adress-Einstellung auf dem Gerät auch diese Adresse ausgegeben.
Fragen dazu:
- Stimmt die Zuordnung der beiden Adressen für Barometer und Gyroskop?
- Kann man überhaupt so scannen, indem man einfach die Adressen durch versucht oder ist das Vorgehen eher blauäugig?
let result = 0
let address = 0
let _continue = false
input.onButtonPressed(Button.A, () => {
_continue = true
})
basic.forever(() => {
basic.setLedColor(Colors.Red)
basic.clearScreen()
_continue = false
while (!(_continue)) {
basic.pause(100)
}
for (let index = 0; index <= 126; index++) {
led.plotBarGraph(
index,
126
)
basic.setLedColor(Colors.Green)
address = index + 1
result = pins.i2cReadNumber(address, NumberFormat.UInt8LE, false)
if (result != 0) {
basic.setLedColor(Colors.Yellow)
_continue = false
while (!(_continue)) {
basic.clearScreen()
basic.showNumber(address)
}
}
}
})