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