__Grzegorz__ napisał: Napisz program na Arduino, który odczyta rejestr R16 po szynie I2C ze scalaka WM8804.
Niech podłączony LED zapali się, gdy wartość młodszego nibbla odczytanego rejestru wyniesie b0100.
Niech będzie zgaszony w przeciwnym wypadku.
Oto program na Arduino, który odczyta rejestr R16 po szynie I2C ze scalaka WM8804 i zapali LED, gdy wartość młodszego nibbla odczytanego rejestru wyniesie b0100:
```cpp
#include <Wire.h>
const uint8_t WM8804_ADDR = 0x3b; // adres WM8804 na szynie I2C
const uint8_t LED_PIN = 13; // pin LED
void setup() {
Wire.begin();
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
}
void loop() {
Wire.beginTransmission(WM8804_ADDR);
Wire.write(0x10); // adres rejestru R16
Wire.endTransmission(false); // nie przerywaj transmisji
Wire.requestFrom(WM8804_ADDR, 1); // odczytaj 1 bajt
if (Wire.available()) {
uint8_t r16 = Wire.read(); // odczytaj bajt
if ((r16 & 0x0F) == 0x04) { // młodszy nibbel == b0100
digitalWrite(LED_PIN, HIGH); // zapal LED
} else {
digitalWrite(LED_PIN, LOW); // zgasi LED
}
}
delay(100); // odczekaj 100ms
}
```
Program ten najpierw inicjuje połączenie I2C i ustawia pin LED jako wyjście. W pętli programu odczytuje rejestr R16 z WM8804, odczytuje młodszy nibbel i zapala LED, jeśli jest równy b0100, lub gasi LED w przeciwnym wypadku. Pętla oczekuje 100 milisekund przed kolejnym odczytem.
Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.