Stap 4: Code, verkleuren, en Capacitieve Aanraking
Ik gebruikte een niet-adresseerbare LED-strip voor mijn tabel.
Met de hulp van mijn leraar en TA kon ik combineren een paar verschillende bronnen om een code die speciaal voor de behoeften van mijn tabel werkte.
CODE
PIN voor de LED
int LEDPin = 13;
int trigger = 0;
int r, g, b;
PIN verbinding maken met de tekening
int capSensePin = 2;
Dit is hoe hoog de sensor moet lezen in volgorde
aan trigger een aanraking. U vindt dit nummer
door trial and error, of u kon het nemen van lezingen op
het begin van dit dynamisch te berekenen.
int touchedCutoff = 20;
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3
#define FADESPEED 5
VOID Setup {}
Serial.begin(9600);
Instellen van de LED
pinMode (LEDPin, uitvoer);
digitalWrite (LEDPin, laag);
pinMode (REDPIN, uitvoer);
pinMode (GREENPIN, uitvoer);
pinMode (BLUEPIN, uitvoer);
}
void loop {}
Als de capacitieve sensor boven een bepaalde drempel leest
inschakelen van de LED
Als (readCapacitivePin(capSensePin) > touchedCutoff) {}
digitalWrite (LEDPin, hoge);
}
else {}
digitalWrite (LEDPin, laag);
}
Elke 500 ms, afdrukken de waarde van de capacitieve sensor
Als ((millis() % 500) == 0) {}
Serial.Print ("capacitieve Sensor op Pin 2 leest:");
Serial.println(readCapacitivePin(capSensePin));
Serial.println(trigger);
}
Als (readCapacitivePin(capSensePin) > = 250) {//sensitivity
trigger ++;
Als (trigger > 5) {}
trigger = 0;
}
switch(trigger) {//these volgen de verlichting's
Case 0:
digitalWrite(REDPIN,255);
digitalWrite(GREENPIN,255);
digitalWrite(BLUEPIN,255);
breken;
Case 1:
digitalWrite(REDPIN,0);
digitalWrite(GREENPIN,255);
digitalWrite(BLUEPIN,0);
breken;
Case 2:
digitalWrite(REDPIN,0);
digitalWrite(GREENPIN,255);
digitalWrite(BLUEPIN,255);
breken;
Case 3:
digitalWrite(REDPIN,255);
digitalWrite(GREENPIN,0);
digitalWrite(BLUEPIN,255);
breken;
Case 4:
digitalWrite(REDPIN,0);
digitalWrite(GREENPIN,0);
digitalWrite(BLUEPIN,0);
breken;
}
}
}
readCapacitivePin
Ingang: Arduino pin-nummer
Uitgang: Een nummer, van 0 tot de uiting van de 17
hoeveel capaciteit is op de pin
Wanneer u contact met de pin, of wat je hebt
gekoppeld aan het, krijgt het nummer hogere
Om dit nu, aan het werk
De pincode moet een 1 + Megaohm weerstand trekken
het t/m + 5v.
uint8_t readCapacitivePin (int pinToMeasure) {}
Dit is hoe u een variabele declareren die
de poort, PIN en DDR registers zal houden
op een AVR
vluchtige uint8_t * haven;
vluchtige uint8_t * ddr;
vluchtige uint8_t * pin;
Hier vertalen wij de invoer pin-nummer van
Arduino pin nummer AVR poort, PIN, DDR,
en welke bits van deze registers die we schelen.
byte bitmasker;
Als ((pinToMeasure > = 0) & & (pinToMeasure < = 7)) {}
poort = & PORTD;
DDR = & DDRD;
bitmasker = 1 << pinToMeasure;
PIN = & PIND;
}
Als ((pinToMeasure > 7) & & (pinToMeasure < = 13)) {}
poort = & PORTB;
DDR = & DDRB;
bitmasker = 1 << (pinToMeasure - 8);
PIN = & PINB;
}
Als ((pinToMeasure > 13) & & (pinToMeasure < = 19)) {}
poort = & PORTC;
DDR = & DDRC;
bitmasker = 1 << (pinToMeasure - 13);
PIN = & PINC;
}
Kwijting van de pin eerst door het lage- en output
* poort & = ~ (bitmasker);
* ddr | = bitmasker;
delay(1);
Maak de pin een ingang zonder de interne pull-up op
* ddr & = ~ (bitmasker);
Nu zien hoe lang de pin te krijgen trok
int cycli = 16000;
for (int i = 0; ik < cycli; i ++) {}
Als (* pin & bitmasker) {}
cycli = i;
breken;
}
}
Kwijting van de pin opnieuw door het lage- en output
Het is belangrijk om te laten de pinnen laag als u wilt
mogelijk te raken meer dan 1 sensor tegelijk - als
de sensor wordt overgelaten getrokken hoog, wanneer je aanraken
twee sensoren, je lichaam zal de overdracht van de kosten tussen
sensoren.
* poort & = ~ (bitmasker);
* ddr | = bitmasker;
retourneren van cycli;
}