// 送信機スケッチ(3×3キースキャン)A0~A2 = 行, A3~A5 = 列 OK確認;湯川 #include #include // CE=D7, CSN=D8 RF24 radio(7, 8); const byte address[6] = "00001"; const byte rowPins[3] = {A0, A1, A2}; // 行ピン(出力) const byte colPins[3] = {A3, A4, A5}; // 列ピン(入力:プルアップ) uint8_t lastKey = 0; // 前回送信したキー番号 void setup() { radio.begin(); radio.setChannel(10); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_LOW); radio.stopListening(); // 行ピン設定(初期LOW) for (int i = 0; i < 3; i++) { pinMode(rowPins[i], OUTPUT); digitalWrite(rowPins[i], LOW); } // 列ピン設定(プルアップ入力) for (int i = 0; i < 3; i++) { pinMode(colPins[i], INPUT_PULLUP); } } void loop() { uint8_t key = 0; // マトリクススキャン for (int row = 0; row < 3; row++) { for (int i = 0; i < 3; i++) { digitalWrite(rowPins[i], (i == row) ? LOW : HIGH); } delayMicroseconds(100); // 安定化時間 for (int col = 0; col < 3; col++) { if (digitalRead(colPins[col]) == LOW) { key = row * 3 + col + 1; } } } // 状態が変化したときだけ送信 if (key != lastKey) { radio.write(&key, sizeof(key)); lastKey = key; } delay(50); // スキャン周期調整(少し短め) }