刘睿鹏 发表于 2024-7-3 20:53:12

这是入门套件的器材吗?

186105107987244 发表于 2025-5-1 18:47:10

微型舵机不能调角度呀,SG90就不行是不是~

186105107987244 发表于 2025-5-1 18:48:18

还是2014年的教程,11年了...

B5oi0T0lyJ7m 发表于 4 天前

根据本章内容做的,每行都写了备注,有问题请指教,.

// 项目 - 交通信号灯
int carRed = 13;    // 汽车红灯引脚
int carYellow = 12; // 汽车黄灯引脚
int carGreen = 8;// 汽车绿灯引脚
int button = 2;   // 按钮引脚
int pedRed = 7;   // 行人红灯引脚
int pedGreen = 4;   // 行人绿灯引脚
int crossTime = 5000; // 允许行人通过的时间(毫秒)
unsigned long changeTime; // 按钮按下后的时间

void setup() {
    pinMode(carRed, OUTPUT);//灯光设置为输出
    pinMode(carYellow, OUTPUT);//灯光设置为输出
    pinMode(carGreen, OUTPUT);//灯光设置为输出
    pinMode(pedRed, OUTPUT);//灯光设置为输出
    pinMode(pedGreen, OUTPUT);//灯光设置为输出
    pinMode(button, INPUT); // 按钮设置为输入模式

    // 初始状态设置
    digitalWrite(carRed, HIGH); // 车行红灯亮
    digitalWrite(pedGreen, HIGH);   // 人行绿灯亮
}

void loop() {
    int state = digitalRead(button);//state状态=digitaLRead函数 读取状态(botton按钮)
    // 检测按钮状态及时间间隔
    if (state == HIGH && (millis() - changeTime) > 5000) {    //if判断(state状态==高电平HIGH 与&& (系统运行时间millis() 减- 按钮按下去的时间chuangeTime) 小于> 5秒 5000
      // 调用变灯函数
      changeLights();
    }
}

void changeLights() {          //这里其实我目前还不是很理解.前面那个调用变灯函数和这里的关系.
//给初始化的行人绿灯闪烁
for (int x = 0; x < 3; x++) {      //循环指令
      digitalWrite(pedGreen, HIGH);//打开行人绿灯
      delay(400);                  //等待0.4秒
      digitalWrite(pedGreen, LOW);   //关闭行人绿灯
      delay(400);                  //等待0.4秒
    }                                  //循环3次结束
      digitalWrite(pedGreen,LOW);    //关闭行人绿灯
      delay(500);                  //等待0.5秒
      digitalWrite(pedRed,HIGH);   //开启行人红灯
      delay(1000);                   //等待1秒,显得自然

      for (int i = 0; i < 3; i++){   //循环指令
      digitalWrite(carRed,LOW);      //关闭车辆红灯
      delay(400);                  //等待0.4秒
      digitalWrite(carRed,HIGH);   //打开车辆红灯
      delay(400);                  //等待0.4秒
      }                              //循环3次结束
      digitalWrite(carRed,LOW);      //关闭车辆红灯
      delay(500);                      //等待0.5秒
      digitalWrite(carYellow,HIGH);    //打开车辆黄灯
      delay(1000);                     //等待1秒
      for (int o = 0; o < 3; o++){   //循环指令
      digitalWrite(carYellow,LOW);   //车辆黄灯关闭
      delay(400);                  //等待0.4秒
      digitalWrite(carYellow,HIGH);//车辆黄灯打开
      delay(400);                  //等待0.4秒
      }                              //循环3次结束
      digitalWrite(carYellow,LOW);   //车辆黄灯关闭
      delay(500);                      //等待0.5秒
      digitalWrite(carGreen,HIGH);   //打开车辆绿灯
      delay(10000);                     //等待10秒
      for (int y = 0; y < 3; y++){   //循环指令
      digitalWrite(carGreen,LOW);      //关闭车辆绿灯
      delay(400);                      //等待0.4秒
      digitalWrite(carGreen,HIGH);   //打开车辆绿灯
      delay(400);                      //等待0.4秒
      }                              //循环3次结束
      digitalWrite(carGreen,LOW);      //关闭车辆绿灯
      digitalWrite(pedRed,LOW);      //关闭行人红灯
      delay(500);                      //等待0.5秒
      digitalWrite(carRed,HIGH);       //打开车辆红灯,回到初始状态
      digitalWrite(pedGreen,HIGH);   //打开行人绿灯.回到初始状态
      
    // 更新changeTime
    changeTime = millis();
}

页: 1 2 3 4 [5]
查看完整版本: Arduino教程 03 互动交通信号灯「DFR0100」