Kapacitiv Touch Arduino lampa (3 / 7 steg)
Steg 3: Programmera din fristående Chip
Anledningen du är tänkt att ta bort chippet från arduino styrelsen är att när den programmering TX/RX börjar, arduino chip återställs. Denna återställning desynchronizes fristående chip från programmering styrelsen som sedan orsakar ett fel på ladda upp. Arbetet är runt omkring enkel.
Programmera en fristående Chip
1) tråd upp fristående chip, enligt det sista steget.
2) bifoga en 20uF kondensator mellan RESET och GND stiftet på Arduino styrelsen. Se till att den positiva delen av kondensatorn är ansluten till Återställ PIN-koden och negativa benet är ansluten till en marken pin. Detta steg förhindrar arduino återställning under uppladdningen.
3) se till att LilyPad arduino w / atmega 168 är markerat under Verktyg > styrelse. Göra säker Arduino som ISP är markerad under Verktyg > programmerare.
4) kopiera och klistra in koden arduino i Arduino IDE
5) Klicka på Arkiv > Ladda upp med hjälp av programmerare.
6) håll tummarna och ber till bakbord gudarna att du inte har en lös tråd.
7) dans med jubel eftersom du nu har en fristående atmega chip programmerad att göra vad du vill göra.
Jag använde capsense exemplet i arduino biblioteken och modifierade den för att svara på flera inslag. Jag ingår blekna, eftersom jag inte gillar plötslig ljusstyrka ändringar (och det bara ser mycket häftigare)
THE CODE//Just kopiera och klistra in den.
byte LEDPin = 11; PWM utgången pin för LED
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.
byte 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; variabel att jämföra ljusstyrka
void setup() {
Serial.BEGIN(9600);
pinMode (LEDPin, OUTPUT); Ange LEDPin till utmatningsläge
}
void loop() {
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 ovanstående tröskelvärdet överskrids, sedan öka värdet på läge 1
Denna nästa avsnitt beskrivs olika LED ljusstyrkan. 255 är ända en. 128 är halv ljusstyrka.
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 kontroll
om (targetBrightness > currentBrightness) currentBrightness ++;
om (targetBrightness < currentBrightness) currentBrightness--;
analogWrite (LEDPin, currentBrightness);
Delay(3); avgör hur snabbt tona uppstår.
Serial.println(currentBrightness);
DENNA PUNKT FRAMÅT JAG INTE SKRIVA.
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;
}