Kapacitiv Touch Arduino lampa (4 / 7 steg)
Steg 4: Kod diskussion
i det här avsnittet beskrivs de olika variabler och konstanter som vi kommer att använda. Observera att jag har använt const byte istället för int. Anledningen är, är att micro-styrenheter har mycket begränsat lagringsutrymme. Int värden kan ta upp till 28 byte, där som en byte värde kan lagra ett tal mellan 1 och 255 och tar bara... 1 byte. Jag använde int etiketten för touchThreshold eftersom jag var får värden större än 255 återvände.CONST byte används, eftersom det talar om för kompilatorn att optimizer lagring användning.
CONST byte LEDPin = 11; PWM utgången pin för LED
CONST byte capSensePin = 2; Stift till tillmäter kapacitiv sensor
byte läge = 0; Bestämmer LED ljusstyrka. 0 är avstängd. Varierar mellan 0 och 255.
int touchThreshold = 100; Minsta kapacitiv touch värde för att utlösa nästa läge
byte targetBrightness = 0; Ställ in power på ljusstyrka
byte currentBrightness = 0;
Annullera installationsprogrammet körs en gång och tilldela pinModes etc. Jag börjar seriella monitorn här eftersom jag använde det till problem med att skjuta.
void setup() {
Serial.BEGIN(9600);
pinMode (LEDPin, OUTPUT); Ange LEDPin till utmatningsläge
}
void loop() {
Detta är huvudprogrammet ögla. Det håller på att upprepa och går igenom de olika raderna kod.
om (readCapacitivePin(capSensePin) > touchThreshold) {//If värdet av capSensePin överskrider touchThreshold sedan...
Delay(250);
Knappen Debounce. Hur skulle jag ta bort denna brytning med millis()??
läge ++; Om touch tröskelvärdet överskrids, öka värdet av läge av 1
Denna nästa avsnitt beskrivs olika LED ljusstyrkan. Två == i rad instruerar behandlaren att jämföra två värden.
om läget (läge > 3) = 0; Om värdet för läge är anger > 3 du värdet för mode till 0.
om (läge == 0) targetBrightness = 0;
om (läge == 1) targetBrightness = 255;
om (läge == 2) targetBrightness = 128;
om (läge == 3) targetBrightness = 64;
Serial.Print ("det nuvarande läget är..."); Seriella monitor till bebug läge ökar
Serial.println(mode); skriva ut värdet av läge till seial monitor
}
Fade portion
om (targetBrightness > currentBrightness) currentBrightness ++; Om målet ljusstyrkan är mindre än nuvarande ljusstyrka, då + 1 till //current ljusstyrka
om (targetBrightness < currentBrightness) currentBrightness--;
analogWrite (LEDPin, currentBrightness); PWM utgången till LEDPin. Detta ändrar ljusstyrkan i ljuset
Delay(3);
Serial.println(currentBrightness);
DENNA PUNKT FRAMÅT JAG INTE SKRIVA. Det var iincluded i exemplet från arduino.
Varje 500 ms, skriva ut värdet av kapacitiv sensor
om ((millis() % 500) == 0) {
Serial.Print ("kapacitiv Sensor på Pin 2 läser:");
Serial.println(readCapacitivePin(capSensePin));
}
}
readCapacitivePin
Ingång: Arduino pin-kod
Utgång: Flera, från 0 till 17 uttrycker
Hur mycket kapacitans är på stiftet
När du rör den PIN-kod, eller vad du har
fäst vid den, kommer att hur många få högre
För att detta ska fungera nu,
PIN-koden bör ha en 1 + Megaohm motstånd dra
det upp till + 5v.
uint8_t readCapacitivePin (int pinToMeasure) {
Detta är hur du deklarerar en variabel som
kommer att hålla de PORT, PIN och DDR register
på en AVR
flyktiga uint8_t * hamn.
flyktiga uint8_t * ddr;
flyktiga uint8_t * pin;
Här översätter vi ingångsstift numret från
Arduino pin-kod till AVR PORT, PIN, DDR,
och vilken bit av dessa register vi bryr oss om.
bitmask som byte;
om ((pinToMeasure > = 0) & & (pinToMeasure < = 7)) {
Port = & PORTD;
DDR = & DDRD;
bitmask = 1 << pinToMeasure;
PIN = & PIND;
}
om ((pinToMeasure > 7) & & (pinToMeasure < = 13)) {
Port = & PORTB;
DDR = & DDRB;
bitmask = 1 << (pinToMeasure - 8);
PIN = & PINB;
}
om ((pinToMeasure > 13) & & (pinToMeasure < = 19)) {
Port = & PORTC;
DDR = & DDRC;
bitmask = 1 << (pinToMeasure - 13);
PIN = & PINC;
}
Ansvarsfrihet stiftet först genom att ange det låga och utdata
* port & = ~ (bitmask);
* ddr | = bitmask;
Delay(1);
Gör stiftet indata utan inre pull-up på
* ddr & = ~ (bitmask);
Nu se hur länge den PIN-kod till få drog upp
int cykler = 16000;
för (int jag = 0; jag < cykler; i ++) {
om (* pin & bitmask) {
cykler = i.
bryta;
}
}
Ansvarsfrihet PIN-koden igen genom att ange det låga och utdata
Det är viktigt att lämna stiften låg om du vill
att kunna röra mer än 1 sensor på en gång - om
sensorn är kvar drog hög, när du rör
två sensorer, din kropp kommer att överföra laddningen mellan
sensorer.
* port & = ~ (bitmask);
* ddr | = bitmask;
returnera cykler;
}