系统上电后,按照D8~D1的顺序循环点亮每一个LED灯;当K1按下时,控制2个LED灯为一组交替点亮并循环(1D2,灯3 D4,D5 D6,D7D8);当K2按下时,控制流水灯在全亮和全熄灭之间循环;当任何按键松开时,恢复循环初始状态
1条回答 默认 最新
关注#include <stdio.h> #include <stdbool.h> #include <wiringPi.h> #define K1_PIN 0 #define K2_PIN 1 #define D1_PIN 2 #define D2_PIN 3 #define D3_PIN 4 #define D4_PIN 5 #define D5_PIN 6 #define D6_PIN 7 #define D7_PIN 8 #define D8_PIN 9 void setup() { wiringPiSetup(); pinMode(K1_PIN, INPUT); pinMode(K2_PIN, INPUT); pinMode(D1_PIN, OUTPUT); pinMode(D2_PIN, OUTPUT); pinMode(D3_PIN, OUTPUT); pinMode(D4_PIN, OUTPUT); pinMode(D5_PIN, OUTPUT); pinMode(D6_PIN, OUTPUT); pinMode(D7_PIN, OUTPUT); pinMode(D8_PIN, OUTPUT); } void turnOnLEDs(bool led1_status, bool led2_status, bool led3_status, bool led4_status) { digitalWrite(D1_PIN, led1_status); digitalWrite(D2_PIN, led2_status); digitalWrite(D3_PIN, led3_status); digitalWrite(D4_PIN, led4_status); } void cycleLEDs() { for (int i = 0; i < 8; i++) { int led_index = i + 1; bool led_status = true; turnOnLEDs(led_index == 1, led_index == 2, led_index == 3, led_index == 4); delay(500); // 点亮每个LED的时间间隔为500ms } } void alternateLEDs() { int led_group = 1; while (digitalRead(K1_PIN) == 0) // 按下K1时持续循环 { if (led_group == 1) { turnOnLEDs(false, false, true, true); // 点亮D5和D6 led_group = 2; } else if (led_group == 2) { turnOnLEDs(true, true, false, false); // 点亮D7和D8 led_group = 1; } delay(500); // 点亮每个组的LED的时间间隔为500ms } } void cycleLights() { bool lights_on = true; while (digitalRead(K2_PIN) == 0) // 按下K2时持续循环 { turnOnLEDs(lights_on, lights_on, lights_on, lights_on); // 全亮或全熄灭 lights_on = !lights_on; delay(500); // 变化的时间间隔为500ms } } int main() { setup(); while (true) { bool k1_state = digitalRead(K1_PIN); bool k2_state = digitalRead(K2_PIN); if (k1_state == 0) { alternateLEDs(); } else if (k2_state == 0) { cycleLights(); } else { cycleLEDs(); } turnOnLEDs(false, false, false, false); // 恢复循环初始状态 } return 0; }解决 无用评论 打赏 举报