PchButik.se

5. Snabbare klick

Video: Trafikljusprojektet som grund för Snabbare klick.

5. Snabbare klick koppling

Video/inbÀddat innehÄll: KodgenomgÄng för KlickFastDelay.

// Kod 5 SnabbareKlick
#include <Arduino.h>

void TrafikSekvens(); // Kan tas bort om det Àr Arduino IDE
void KlickDelay(unsigned long);
void KlickFastDelay(unsigned long);

#define KNAPP_PINNE 2
#define PIEZO_PINNE 11

#define WALK_RED_PINNE 7
#define WALK_YELLOW_PINNE 8
#define WALK_GREEN_PINNE 9

#define CAR_RED_PINNE 4
#define CAR_YELLOW_PINNE 5
#define CAR_GREEN_PINNE 6

unsigned long _TimeToNextTick; // Förbereder variabeln för nÀsta klick

void setup() {
    pinMode(KNAPP_PINNE, INPUT_PULLUP);
    pinMode(PIEZO_PINNE, OUTPUT);

    pinMode(CAR_RED_PINNE, OUTPUT);
    pinMode(CAR_YELLOW_PINNE, OUTPUT);
    pinMode(CAR_GREEN_PINNE, OUTPUT);

    pinMode(WALK_RED_PINNE, OUTPUT);
    pinMode(WALK_YELLOW_PINNE, OUTPUT);
    pinMode(WALK_GREEN_PINNE, OUTPUT);

    digitalWrite(WALK_RED_PINNE, HIGH);
    digitalWrite(CAR_GREEN_PINNE, HIGH);
    _TimeToNextTick = millis() + 999;
}

void loop() {
    KlickDelay(1);

    bool statusKnapp = digitalRead(KNAPP_PINNE);
    if (statusKnapp == LOW) {
        tone(PIEZO_PINNE, 3000, 100); // Kort ton vid knapptryck
        TrafikSekvens();
        KlickDelay(30000); // VĂ€nta innan ny sekvens
    }
}

void TrafikSekvens() {
    digitalWrite(CAR_GREEN_PINNE, LOW);
    digitalWrite(CAR_YELLOW_PINNE, HIGH);
    KlickDelay(3000);

    digitalWrite(CAR_YELLOW_PINNE, LOW);
    digitalWrite(CAR_RED_PINNE, HIGH);
    KlickDelay(2000);

    digitalWrite(WALK_RED_PINNE, LOW);
    digitalWrite(WALK_GREEN_PINNE, HIGH);
    _TimeToNextTick = millis() + 100; // Snabbare klick var tionde sekunddel
    KlickFastDelay(6000);
    KlickDelay(4000);

    digitalWrite(WALK_GREEN_PINNE, LOW);
    digitalWrite(WALK_RED_PINNE, HIGH);
    KlickDelay(3000);
    digitalWrite(CAR_YELLOW_PINNE, HIGH);
    KlickDelay(1000);

    digitalWrite(CAR_RED_PINNE, LOW);
    digitalWrite(CAR_YELLOW_PINNE, LOW);
    digitalWrite(CAR_GREEN_PINNE, HIGH);
}

void KlickDelay(unsigned long time) {
    for (size_t i = 0; i < time; i++) {
        if (millis() > _TimeToNextTick) {
            digitalWrite(PIEZO_PINNE, HIGH);
            delay(1);
            digitalWrite(PIEZO_PINNE, LOW);
            _TimeToNextTick = millis() + 999;
        }
        delay(1);
    }
}

void KlickFastDelay(unsigned long time) {
    for (size_t i = 0; i < time; i++) {
        if (millis() > _TimeToNextTick) {
            digitalWrite(PIEZO_PINNE, HIGH);
            delay(1);
            digitalWrite(PIEZO_PINNE, LOW);
            _TimeToNextTick = millis() + 100;
        }
        delay(1);
    }
}

Koden har fÄtt en ny funktion KlickFastDelay som startas i TrafikSekvens.

Sista 4 sekunderna av tiden med grön gubbe Àr det normalt ett dubbelklickande ljud.

Kan du fixa detta sjÀlv? Annars kanske detta kommer hÀr i framtiden.

Knappen funkar inte nÀr TrafikSekvens görs, kanske ocksÄ kommer i framtiden.

Inköpslista.

Artikel: 2805 Trafikljus kit, med kod som passar nybörjare.

Direkt lÀnk: https://pchbutik.se/mcu/1794-trafikljus-kit-med-kod-som-passar-nyborjare.html

Denna sida Àr konverterad med hjÀlp av AI.

En sida för dig som bygger elektronik sjÀlv, experimenterar och laborerar.

Skapad av Per-Anders Hult för PchButik.se.