Bez delay wystarczy sprawdzać co np. 50 czy 100ms stan przycisku.
Można sprawdzać co 10ms i zliczać czas wciśnięcia by zauważać nowe wciśnięcie i puszczenie, przytrzymanie przycisku, teraz jak ktoś przytrzyma to się będzie przełączał stan co 50ms, można też ten czas tak zmienić na 100ms, jest też kilka bibliotek, które robią to w podobny sposób (bounce2, buttons) i dają gotowe wartości.
Kod:
uint32_t czasTeraz,czasPoprzedni,tik=10; //tik musi byc mniejszy niz 1000 i dzilic 1000ms na rowne czesci
uint8_t przycisk8=8,nTik,sekundy,minuty,godziny,dni; //liczniki tikow, sekund, itd.
bool fnTik,fsekundy,fminuty,fgodziny,fdni; //flagi zdarzen nowy tik, nowa sekunda,minuta, godzina, dzien
char napis[10];
uint8_t led1=LED_BUILTIN;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(led1,OUTPUT);
pinMode(przycisk8,INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
czas();
if(fnTik and !(nTik%5==0)) //jesli w tym loop jest nowe 10ms i ich liczba jest podzielna przez 5, minelo 50ms
{
if (digitalRead(przycisk8) == LOW) digitalWrite(led1, !digitalRead(led1));//jesli zwarty do gnd odczytaj stan led i ustaw przeciwny
//pozostale przyciski
}
if(fsekundy) {
sprintf(napis,"%03d:%02d:%02d",godziny,minuty,sekundy);
Serial.println(napis);
}
}//koniec loop
void czas()
{
czasTeraz=millis();
fnTik=fsekundy=fminuty=fgodziny=fdni=0;
if((uint32_t)(czasTeraz-czasPoprzedni)>=tik) //tan napisany warunek jest odporny na "klątwe 50 dni millis()"
{
czasPoprzedni=czasTeraz;
fnTik=1;
nTik++;
if(nTik>=(1000/tik))
{
nTik=0;
sekundy++;
fsekundy=1;
if (sekundy>=60)
{
sekundy=0;
minuty++;
fminuty=1;
if (minuty>=60)
{
minuty=0;
godziny++;
fgodziny=1;
if (godziny>=24)
{
godziny=0;
fdni=1;
dni++;
}
}
}
}
}
}
Można sprawdzać co 10ms i zliczać czas wciśnięcia by zauważać nowe wciśnięcie i puszczenie, przytrzymanie przycisku, teraz jak ktoś przytrzyma to się będzie przełączał stan co 50ms, można też ten czas tak zmienić na 100ms, jest też kilka bibliotek, które robią to w podobny sposób (bounce2, buttons) i dają gotowe wartości.
Miło być decenianym https://buycoffee.to/kaczakat