Add LED dim code
This commit is contained in:
parent
0137b4e009
commit
8de71e7b08
6
Sketches/sketch_oct25a-LEDDimming/.vscode/arduino.json
vendored
Normal file
6
Sketches/sketch_oct25a-LEDDimming/.vscode/arduino.json
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"board": "arduino:avr:uno",
|
||||||
|
"port": "COM7",
|
||||||
|
"output": "C:\\Temp",
|
||||||
|
"sketch": "sketch_oct25a-LEDDimming.ino"
|
||||||
|
}
|
16
Sketches/sketch_oct25a-LEDDimming/.vscode/c_cpp_properties.json
vendored
Normal file
16
Sketches/sketch_oct25a-LEDDimming/.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Win32",
|
||||||
|
"includePath": [
|
||||||
|
"C:\\Users\\Alex\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\**",
|
||||||
|
"C:\\Users\\Alex\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.6.21\\**"
|
||||||
|
],
|
||||||
|
"forcedInclude": [
|
||||||
|
"C:\\Users\\Alex\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.6.21\\cores\\arduino\\Arduino.h"
|
||||||
|
],
|
||||||
|
"intelliSenseMode": "msvc-x64"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
151
Sketches/sketch_oct25a-LEDDimming/sketch_oct25a-LEDDimming.ino
Normal file
151
Sketches/sketch_oct25a-LEDDimming/sketch_oct25a-LEDDimming.ino
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
// Pin som LED er koblet til.
|
||||||
|
int LED_PIN = 10;
|
||||||
|
// "Increment" pin - altså pin'en som "increment" (pluss) knapp er koblet til.
|
||||||
|
int INC_PIN = 3;
|
||||||
|
// "Decrement" pin - altså pin som "decrement" (minus) knapp er koblet til.
|
||||||
|
int DEC_PIN = 2;
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
// Sett LED som output og knapper som input med "pullup flagg"
|
||||||
|
pinMode(LED_PIN, OUTPUT);
|
||||||
|
pinMode(INC_PIN, INPUT_PULLUP);
|
||||||
|
pinMode(DEC_PIN, INPUT_PULLUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sett LED lysverdi til å være laveste gyldige verdi: 0.
|
||||||
|
*/
|
||||||
|
int LIGHT_LEVEL = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sett en standard verdi for "increment/decrement" av LED.
|
||||||
|
* Dette er "dimmeverdien".
|
||||||
|
*/
|
||||||
|
int INCDEC_VALUE = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lagre sist gang knappene ble trykket (ved hjelp av millis()).
|
||||||
|
*/
|
||||||
|
unsigned long INC_LASTPRESS = millis();
|
||||||
|
unsigned long DEC_LASTPRESS = millis();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lagre sist sjekka verdi om knappen allerede var trykt ned eller ikke.
|
||||||
|
* true = knapp er trykt ned.
|
||||||
|
* false = knapp er sluppet opp.
|
||||||
|
*/
|
||||||
|
bool INC_LASTSTATE = false;
|
||||||
|
bool DEC_LASTSTATE = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Antall millisekunder som er max "differanse", slik at hvis knappen blir holdt ned i lenger enn LASTPRESS_DIFF (default er 500) ms,
|
||||||
|
* skal den dimme opp/ned lyset.
|
||||||
|
*/
|
||||||
|
int LASTPRESS_DIFF = 500;
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// Definer et midlertidig variabel for å holde ny LED verdi.
|
||||||
|
int NEW_LIGHT_LEVEL = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shouldInc/Dec sjekker om den relaterte knappen er trykt ned.
|
||||||
|
* Verdiene på disse knappene, hvis de er trykket ned, vil være "LOW".
|
||||||
|
*
|
||||||
|
* Jeg har gjort et bevisst valg om å ikke bruke elseif/else.
|
||||||
|
* Dette vil resultere i at hvis begge knappene er trykt ned, vil den siste "if" overstyre den første.
|
||||||
|
*/
|
||||||
|
int shouldInc = digitalRead(INC_PIN);
|
||||||
|
int shouldDec = digitalRead(DEC_PIN);
|
||||||
|
|
||||||
|
// Lagre millis() som et delt "currentTime".
|
||||||
|
unsigned long currentTime = millis();
|
||||||
|
|
||||||
|
// Sjekk om increment-knappen er trykket
|
||||||
|
if (shouldInc == LOW)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Sjekk LASTSTATE om at knappen allerede har blitt trykt ned.
|
||||||
|
* Hvis den IKKE var trykt ned, sett LASTPRESS til currentTime for å tracke
|
||||||
|
* millisekunder.
|
||||||
|
*/
|
||||||
|
if (!INC_LASTSTATE) {
|
||||||
|
INC_LASTPRESS = currentTime;
|
||||||
|
INC_LASTSTATE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ta gamle LIGHT_LEVEL verdi og legg til INCDEC_VALUE for å få LED til å lyse sterkere.
|
||||||
|
NEW_LIGHT_LEVEL = LIGHT_LEVEL + INCDEC_VALUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metoden min() setter variabelet til den laveste av de spesifiserte verdiene.
|
||||||
|
* Det vil si at hvis NEW_LIGHT_LEVEL er over 255, vil min() passe på at LIGHT_LEVEL
|
||||||
|
* bare blir satt til 255 og ikke noe høyere enn det.
|
||||||
|
*
|
||||||
|
* Noe lignende blir brukt med funksjonen max() lenger ned når lysverdien
|
||||||
|
* skal senkes med den andre knappen.
|
||||||
|
*/
|
||||||
|
LIGHT_LEVEL = min(NEW_LIGHT_LEVEL, 255);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/**
|
||||||
|
* Sjekker om knappen ble sluppet mindre enn LASTPRESS_DIFF (500) millisekunder
|
||||||
|
* Hvis den ble det, sett lyset til max lysnivå (255).
|
||||||
|
*/
|
||||||
|
if ((currentTime - INC_LASTPRESS) < LASTPRESS_DIFF) {
|
||||||
|
LIGHT_LEVEL = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Knappen er ikke trykt lenger.
|
||||||
|
*/
|
||||||
|
INC_LASTSTATE = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dette sjekker om knappen for decrement er trykket.
|
||||||
|
*
|
||||||
|
* Dette vil også overstyre hvis både increment og decrement knappene er trykket.
|
||||||
|
* Som vil si at det blir ingen endring i lysstyrke.
|
||||||
|
*/
|
||||||
|
if (shouldDec == LOW) {
|
||||||
|
/**
|
||||||
|
* Sjekk LASTSTATE om at knappen allerede har blitt trykt ned.
|
||||||
|
* Hvis den IKKE var trykt ned, sett LASTPRESS til currentTime for å tracke
|
||||||
|
* millisekunder.
|
||||||
|
*/
|
||||||
|
if (DEC_LASTSTATE == LOW) {
|
||||||
|
DEC_LASTPRESS = currentTime;
|
||||||
|
DEC_LASTSTATE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ta gamle LIGHT_LEVEL verdi og trekk fra INCDEC_VALUE for å få LED til å lyse svakere.
|
||||||
|
NEW_LIGHT_LEVEL = LIGHT_LEVEL - INCDEC_VALUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lignende med metoden min() vil dette sette LIGHT_LEVEL til det høyeste av de spesifiserte verdiene.
|
||||||
|
* Om NEW_LIGHT_LEVEL er mindre enn 0 (altså negativt tall), vil det settes til 0 (av).
|
||||||
|
*/
|
||||||
|
LIGHT_LEVEL = max(NEW_LIGHT_LEVEL, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/**
|
||||||
|
* Sjekker om knappen ble sluppet mindre enn LASTPRESS_DIFF (500) millisekunder
|
||||||
|
* Hvis den ble det, sett lyset til minst lysnivå (0).
|
||||||
|
*/
|
||||||
|
if ((currentTime - DEC_LASTPRESS) < LASTPRESS_DIFF)
|
||||||
|
{
|
||||||
|
LIGHT_LEVEL = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Knappen er ikke trykt lenger.
|
||||||
|
*/
|
||||||
|
DEC_LASTSTATE = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sett LED til ny lysverdi (0-255).
|
||||||
|
analogWrite(LED_PIN, LIGHT_LEVEL);
|
||||||
|
// Legg inn delay for at verdien ikke skal endres for fort.
|
||||||
|
delay(100);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user