多按键延时亮灯 — Esp32 C6 simulation

An interactive Esp32 C6 circuit simulation you can run free in your browser on Velxio, by yaxin.

Components

Sketch code

// ESP32-C6-DevKitC-1 - blink GPIO8 + serial log.
// GPIO8 also drives the board's WS2812 RGB LED; a plain external LED (through
// a 220R resistor to GND) on the same header pin is what this blinks.
#define LED_PIN 8
const int led[5]={4,5,6,7,0};
const int key[5]={22,21,20,19,18};

unsigned long kaishijishi[5]={0,0,0,0,0};
const unsigned long yanshishijian[5]={1000,2000,3000,4000,5000};
bool keyfanzhuan[5]={0,0,0,0,0};
bool zhongzhuan[5]={0,0,0,0,0};
bool ledfanzhuan[5]={0,0,0,0,0};
bool dengdaisongkai[5]={0,0,0,0,0};

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  Serial.println("ESP32-C6 ready");
  for (int i = 0; i < 5; i++) 
  {
    pinMode(key[i], INPUT_PULLUP);
    pinMode(led[i], OUTPUT);
    digitalWrite(led[i], LOW);
  }
}

void loop() {
  unsigned long now=millis();
  for (int i = 0; i < 5; i++) 
  {
    keyfanzhuan[i]=digitalRead(key[i]);
    if (keyfanzhuan[i]==0) 
    {
      if (!zhongzhuan[i]) 
      {
        dengdaisongkai[i]=0;
        Serial.printf("anjian %d\n", i);
        zhongzhuan[i]=1;
        kaishijishi[i]=now;
      }
    
    if (now-kaishijishi[i]>yanshishijian[i]) 
    {
     if (keyfanzhuan[i]==0&&zhongzhuan[i]==1&&dengdaisongkai[i]==0)
      {
        zhongzhuan[i]=0;
        digitalWrite(led[i], !ledfanzhuan[i]);
        ledfanzhuan[i]=!ledfanzhuan[i];
        Serial.println("diandeng");
      }
    }
    }else if (keyfanzhuan[i]==1) 
    {
      zhongzhuan[i]=0;
    }
    if (now-kaishijishi[i]>yanshishijian[i]&&keyfanzhuan[i]==0) 
    {
      zhongzhuan[i]=1;
      dengdaisongkai[i]=1;
    }
  }

  digitalWrite(LED_PIN, HIGH); //delay(500);
  digitalWrite(LED_PIN, LOW);  //delay(500);
  //Serial.println("tick");
}

More projects by yaxin