Lær hvad true/false betyder i elektronik og kode, forbind en trykknap korrekt, og læs brugerens tryk på en input-pin. Vi starter med ekstern pull-down og viser derefter intern pull-up (uden ekstra modstand).
true / false (bool).digitalRead(pin) returnerer HIGH eller LOW.// Sand/falsk i kode
bool t = true;
bool f = false;
if (t && !f) { /* begge udtryk er sande her */ }
Pin D2 læser knappen. Vi bruger en 10 kΩ pull-down til GND, så D2 er stabilt LOW når knappen ikke trykkes.
● = knudepunktet, hvor både D2 og modstanden er forbundet.
const int LED_PIN = 8; // D8: ekstern LED (valgfrit)
const int BUTTON_PIN = 2; // D2: læser knappen (ekstern pull-down)
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT); // vi bruger ekstern 10k pull-down
digitalWrite(LED_PIN, LOW);
Serial.begin(9600);
}
void loop() {
int knap = digitalRead(BUTTON_PIN); // HIGH når trykket, LOW når ikke
digitalWrite(LED_PIN, knap == HIGH ? HIGH : LOW);
Serial.println(knap == HIGH ? "TRYK = TRUE (HIGH)" : "TRYK = FALSE (LOW)");
delay(10); // lille ro på seriel monitor
}
Arduino kan aktivere en intern pull-up. Så trækker vi knappen fra D2 til GND. Logikken vendes: ikke trykket = HIGH; trykket = LOW.
const int LED_PIN = 8;
const int BUTTON_PIN = 2;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // aktiver intern pull-up
digitalWrite(LED_PIN, LOW);
}
void loop() {
int knap = digitalRead(BUTTON_PIN); // LOW når trykket, HIGH når ikke
bool trykket = (knap == LOW); // vend logik til "true når trykket"
digitalWrite(LED_PIN, trykket ? HIGH : LOW);
}
Mekaniske kontakter hopper elektrisk i få millisekunder. Her er en enkel tidsbaseret software-debounce med millis().
const int LED_PIN = 8;
const int BUTTON_PIN = 2;
const unsigned long DEBOUNCE_MS = 30;
bool stableState = HIGH; // antag pull-up-kode (skift til LOW ved pull-down)
bool lastRead = HIGH;
unsigned long lastChangeMs = 0;
void setup(){
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // skift til INPUT + ekstern pull-down hvis du bruger Del A
}
void loop(){
int raw = digitalRead(BUTTON_PIN);
if (raw != lastRead) {
lastChangeMs = millis();
lastRead = raw;
}
if (millis() - lastChangeMs > DEBOUNCE_MS) {
if (stableState != raw) {
stableState = raw; // ændring godkendt efter debounce
bool trykket = (stableState == LOW); // for pull-up: LOW = tryk
digitalWrite(LED_PIN, trykket ? HIGH : LOW);
}
}
}
pinMode(BUTTON_PIN, INPUT) og tolk trykket = (stableState == HIGH).LED skifter tilstand kun når du går fra “ikke trykket” → “trykket”. Virker sammen med debounce-idéen.
const int LED_PIN = 8;
const int BUTTON_PIN = 2;
const unsigned long DEBOUNCE_MS = 30;
bool ledOn = false;
int lastStable = HIGH; // antag pull-up
int lastRead = HIGH;
unsigned long lastChangeMs = 0;
void setup(){
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
digitalWrite(LED_PIN, LOW);
}
void loop(){
int raw = digitalRead(BUTTON_PIN);
if (raw != lastRead) { lastChangeMs = millis(); lastRead = raw; }
if (millis() - lastChangeMs > DEBOUNCE_MS) {
if (raw != lastStable) {
lastStable = raw;
// faldende flanke: HIGH -> LOW (tryk)
if (lastStable == LOW) {
ledOn = !ledOn;
digitalWrite(LED_PIN, ledOn ? HIGH : LOW);
}
}
}
}
if(lastStable == HIGH).INPUT_PULLUP (Del B).LOW som trykket i koden.