A23. Ajastukset ilman delayta - matpi/EmbeddedSystemsUTU GitHub Wiki

  1. Tässä on koodi joka välkyttää lediä ilman delayta:

  2. Tässä on koodi joka laskee napinpainalluksia 3s ajan, max 5 painallusta. Se myös tunnistaa tilanteen jos nappia pidetään pohjassa eikä laske sitä moneksi painallukseksi.

    const int nappiPinni = 2;

    unsigned long napinTilat[] = {1,1,1,1,1}; // lukutaulukko viidelle arvolle unsigned long alkuAika = 0; // aluksi nollassa unsigned long nykyAika = 0; //

    void setup() { Serial.begin(9600);
    pinMode(nappiPinni, INPUT_PULLUP);
    }

    void loop() {

    if(digitalRead(nappiPinni) != 1) // jos saadaan painallus { // tarkkaillaan napinpainalluksia 2s ja tallennetaan niiden ajat alkuAika = millis(); nykyAika = millis(); int i = 0;

    // toistetaan kunnes 2s on kulunut tai viides painallus tallennettu while(nykyAika - alkuAika < 3000 && napinTilat[4] == 1) {

    nykyAika = millis(); //tämä kasvaa kerta kerralta napinTilat[i] = digitalRead(nappiPinni); if(napinTilat[i] != 1 ) {

    napinTilat[i] = nykyAika - alkuAika; // tallennetaan lukujonon paikkaan napin painon aika delay(200); // odotetaan että kytkin lakkaa värähtelemästä tätä voi lyhentää jos haluaa nopeita painalluksia //odotetaan että kytkin menee pois päältä välillä while(digitalRead(nappiPinni) == 0) { //ei tehdä mitään vaan tästä silmukasta poistutaan jos nappia ei enää paineta } i++; //vaihdetaan tallennuspaikka seuraavaan jos nappi on painettu }

    }

    Serial.println("X"); delay(100);

    if(napinTilat[0] != 1) { for(int i = 0; i <5; i++) { Serial.println(napinTilat[i]);

    } }

    for(int i = 0; i <5; i++) {

    napinTilat[i] = 1; // ja nollaataan samalla jokainen paikka. } } }