A23. Ajastukset ilman delayta - matpi/EmbeddedSystemsUTU GitHub Wiki
-
Tässä on koodi joka välkyttää lediä ilman delayta:
-
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. } } }