Stap 6: Codering het.
U kunt het downloaden van de bijgevoegde schets. Het is eigenlijk heel simpel. De eerste sectie is ingesteld van alle variabelen en constanten die we zullen gebruiken.
Const int buttonPin = 0; het nummer van de pin van de drukknoppen
Const int ledPin = 13; het nummer van de LED-pin voor het testen
Het bovenstaande stelt slechts de pinnen gebruikt. Dan moet u elke knop en het bereik van waarden voor de desbetreffende knop instellen:
Const int BUTTON1 = 1;
...
Const int BUTTON1LOW = 970;
Const int BUTTON1HIGH = 1024;
...
In het Configuratiemenu, we gewoon de pin Staten en beginnen met de seriële poort (welke knop is ingedrukt wordt weggeschreven naar de uitgang voor seriële):
pinMode (buttonPin, INPUT);
pinMode (ledPin, OUTPUT);
Serial.begin(9600);
Dan we bij het interessante deel komen. Het eerste deel van de programma lus is waar de magie gebeurt er eigenlijk, maar het gewoon controleert welke knop werd gelezen gebaseerd op de waarde die we van analogRead() kregen:
int lezing = analogRead(buttonPin);
int tmpButtonState = laag; de huidige lezing van de invoer pin
Als (lezen > BUTTON5LOW & & lezing //Read schakelaar 5
tmpButtonState = BUTTON5;
} else if (lezen > BUTTON4LOW & & lezing //Read schakelaar 4
tmpButtonState = BUTTON4;
} else if
....
} else {}
Geen toets wordt ingedrukt;
tmpButtonState = laag;
}
Het volgende deel debounces alleen de druk op de knop. Kortom, zonder deze druk op de knop lijkt de code als meerdere persen. Meestal dit zou u toestaan om gebruik van de knop als een tuimelschakelaar zo goed, maar ik doe dat niet.
Ik ben van plan over het gebruik van de knoppen als reset knoppen, zodat ik alleen hoef te detecteren wanneer ze worden geduwd en opnieuw instellen van een specifieke variabele. Als ((millis()-lastDebounceTime) > debounceDelay) {}
Als (tmpButtonState! = lastButtonState) {}
lastDebounceTime = millis();
}
buttonState = tmpButtonState;
}
lastButtonState = tmpButtonState;
Het laatste deel van het programma is gewoon een switch statement die door verschillende code op basis van welke knop werd ingedrukt worden uitgevoerd. Voor het testen overschakelen ze alle net op de ingebouwde LED op pin 13.
switch(buttonState) {}
geval laag:
digitalWrite (ledPin, laag);
breken;
Case BUTTON1:
digitalWrite (ledPin, hoge);
breken;
...
}
En dat is in wezen hoe gemakkelijk het is om meerdere bedieningsknoppen. Ik heb niet dit in mijn project nog geïmplementeerd, zodat ik zou kunnen doen een bibliotheek voor het op een gegeven moment, als ik wil.