Stap 6: De nieuwste schets.
- TRI-LED (piranha) matrix & touch test
- (C) Copyright 2009 qs
- Modules (geselecteerd door progMode)
- 0 - reeks
- 1 - wit licht. DiMS terwijl op 'hold'.
- 2 - morphing kleuren. Random licht langzaam mengen.
- 3 - firelight. Flakkerende vlammen (moeilijk om te doen wanneer er geen echte geel!)
- 4 - vuurvliegjes. Emuleren het Hof ritueel van de soort.
*
- 20mA geïntegreerd kleur LEDs - gemeenschappelijk anode!!
- D02 - rood (laag inschakelen!)
- D03 - groen
- D04 - blauw
- D05 - meest rechtse LED (hoog inschakelen)
- D06 - center LED
- D07 - meest linkse LED
*/
int matrix [5] = {}
0660,0626,0466,0,0}
; Regenboog weergeven
int matrix02 [5] [2] = {/ / Morphing routine & firelight
{
511,7}
,{
511,56}
,{
511,504}
,{
511,0}
,{
511,504}
};
unsigned int firefly [4] = {}
0xdd42, 0xff00, 0x8a00, 0x2200};
/ * Vuurvliegjes:
- MSB - (7:5) intensiteit (0-7)
- (4:2) vertraging in eenheden van 1 / 2sec
- (1:0) type van bug (1 = vrouwelijk, 2,3 = mannetjes)
*/
Voor het aanpassen van stepping sequenties
lange bigDelay = 300, bigD;
int fsuitors = 0, i, j, val, LED c0, c1, r0, g0, b0, r1, g1, b1, wit = 7;
int progMode = 0; De switch... case selector (99 is TEST)
int controlPin = 12, sw02 = 0; De status van de schakelaar op A02
unsigned long dttimer02 = 0, timer02 = 0, ffTimer = 0; watchdog timers
int drempel = 100; milliseconden voor een 'touch', triple voor 'hold'
VOID Setup {}
for (int i = 2; ik < = 7; i ++) {}
pinMode(i,OUTPUT);
digitalWrite (ik, ik < 5);
}
randomSeed(analogRead(0));
pinMode(12,OUTPUT); Onze master touch schakelaar bediening
digitalWrite(12,LOW);
analogReference(INTERNAL); Impuls (Aanraking) gevoeligheid! Aref is offlimits!
voor (ik = 1; ik < 4; i ++) {/ / vuurvliegjes routine instellen
j = random(2,4); Soort man
j += ((j + i-3) << 2); Uithoudingsvermogen (gebrek aan) 0-7
Firefly [i] = (j << 8) | (j << 1) |
((i+3) << 13); Energie (helderheid)
}
}
void loop {}
bigD = bigDelay+millis(); Calc timeout
schakelaar (progMode) {}
Case 0:
{}
voor (LED = 0; LED < = 2; LED++)
writeLED(LED,matrix[LED]);
}
terwijl (bigD > = millis());
Als ((sw02&7) == 0) {/ / Hold is houd!
matrix [0] matrix [0] = ++ & 511; grappige math
Ik = (matrix [1] + 8); Verhogen van groen
Als (ik > 511) ik = (ik & 7) + 1;
matrix [1] = i;
Ik = (matrix [2] + 64); Verhoging blauw
Als (ik > 511) ik = (ik & 63) + 1;
matrix [2] = i;
}
breken;
Case 1:
{
R1 = (witte << 6) | (witte << 3) |white;
terwijl (bigD > =millis())
voor (LED = 0; LED < = 2; LED++)
writeLED(LED,r1);
Als ((sw02&7)! = 0) {}
wit--;
Als (witte < = 0) witte = 7;
}
breken;
}
Case 2:
{
voor (LED = 0; LED < = 2; LED++) {}
Als ((sw02&7) == 0) {/ / Hold is houd!
C0 = matrix02 [LED] [0];
C1 = matrix02 [LED] [1];
Als (c0! = c1) {}
R0 = c0 & 7;
G0 = (c0 >> 3) & 7;
B0 = (c0 >> 6) & 7;
R1 = c1 & 7;
G1 = (c1 >> 3) & 7;
B1 = (c1 >> 6) & 7;
R1-= constrain(r1-r0,-1,1);
G1-= constrain(g1-g0,-1,1);
B1-= constrain(b1-b0,-1,1);
matrix02 [LED] [1] = (b1 << 6) | (g1 << 3) | R1;
}
anders
matrix02 [LED] [0] = random(0,512); Nieuwe doelstelling lichten
}
}
terwijl (bigD > =millis())
voor (LED = 0; LED < = 2; LED++)
writeLED(LED,matrix02[LED][1]);
breken;
}
Case 3: / / Log brand
{
voor (LED = 0; LED < = 2; LED++) {}
Als ((sw02&7) == 0) {/ / Hold is houd!
C0 = matrix02 [LED] [0];
C1 = matrix02 [LED] [1];
Als (c0! = c1) {}
R0 = c0 & 7;
G0 = (c0 >> 3) & 7;
B0 = (c0 >> 6) & 7;
R1 = c1 & 7;
G1 = (c1 >> 3) & 7;
B1 = (c1 >> 6) & 7;
R1-= constrain(r1-r0,-1,1);
G1-= constrain(g1-g0,-1,1);
B1-= constrain(b1-b0,-1,1);
matrix02 [LED] [1] = (b1 << 6) | (g1 << 3) | R1;
}
else {}
Als (LED == 1) {}
R1=Random(4,8);
G1 = r1-2;
B1 = 0;
}
else {}
R1 = random(2,7);
G1 = r1-2;
B1 = 0;
}
matrix02 [LED] [0] = (b1 << 6) | (g1 << 3) | R1; Nieuwe doelstelling lichten rood * Groenen
}
}
}
bigD = millis () + 130;
{}
voor (LED = 0; LED < = 2; LED++)
writeLED(LED,matrix02[LED][1]);
}
terwijl (bigD > =millis());
breken;
}
geval 4: / / vuurvliegjes
{
Als (ffTimer < millis()) {/ / verstreken tijd moet wachten
voor (ik = 0; ik < 4; i ++) {}
int ff0 = firefly [i];
int ff1 = ff0 >> 8;
ff0 = ff0 & 127;
int ff = ff0 & 7;
Als (ff > 0) {/ / Flash op de
j = (ff1 >> 2) & 070; Vooraf laden groen
Als ((ff1&3)! = 1) {//A mannelijke
writeLED(i-1,j);
writeLED(i-1,j);
Firefly [i]--;
fsuitors ++;
}
anders / / een vrouw!
Als (fsuitors == 0) {}
j += 3;
writeLED(0,j);
writeLED(1,j);
writeLED(2,j);
writeLED(0,j);
writeLED(1,j);
writeLED(2,j); Vrouwen tonen een langere, carotheengehalte puls
Firefly [i]--;
Ik = 99; Vervroegde uittreding
}
}
else {/ / geen flash
Als (ik == 1) fsuitors = 0;
j = (ff0 >> 3) & 15;
Als (j == 0) //Wait-verlopen
Firefly [i] = (firefly [i] & 0xff00) | 0x40 | ((FF1&31) << 1);
anders
Firefly [i]-= 8;
}
}
ffTimer = millis () + 450;
}
breken;
}
kast 99: / / Test modus...
{
Ik = ((sw02>1) & 1) << 2 | selectievakje voor kraan
((sw02>2) & 1) << 6;
writeLED(2,i); Tik = rood + houden = blauw
breken;
}
standaard:
progMode = 0;
breken;
}
/*
- Selectievakje voor toets ingedrukt
*/
Als (readTouch(2)) {/ / We iets zien op pin 2!
Als ((sw02&1) == 0) {/ / eerste keer ' ronde
digitalWrite(13,HIGH); Dus laten we zien smth.
sw02 = 1; Vlag van de aanraking
timer02 = millis(); De eerste aanraking klok
}
anders {/ / 1-bit al gezet: we hebben hier eerder geweest.
niet-ondertekende lange t = millis ()-timer02; maar hoe lang geleden?
Als ((sw02&2) == 2) {/ / kijken 'hold' alleen als 'druk' is ingesteld
Als (t > 750) {}
sw02 = sw02 | 4;
Als (t > 8000) progMode = 99;
}
}
anders als (t > = 200) sw02 = sw02 | 2; Instellen van de 'Pers', meer differentiatie
}
}
anders als (sw02 & & 1) {/ / sleutel proces af
Als ((millis()-timer02)>100) / / sommige ' give'before noemde het afgesloten
{
digitalWrite(13,LOW); Toon het
Als ((sw02&6) == 2) {//Process een 'tik'
niet-ondertekende lange t = millis ()-dttimer02; //
dttimer02 = millis(); Laat ons toe om houden 'onttrekken'
Als (t < 600) {/ / 2 kranen termijn beperken (600ms)
sw02 = 0x10; Dubbele kraan inschakelen '
progMode ++; Volgende programma
}
}
else {}
sw02 = sw02 & 0xff00;
timer02 = 0;
}
}
}
}
# Definieer lowThreshold 180 / / Low is 180mV
# Definieer highThreshold 450 / / 450mV [600] - weerstand van de huid is 8Meg
Booleaanse readTouch (int pin) {}
int i=analogRead(pin);
i=analogRead(PIN); 1e lezing negeren
Als (ik < lowThreshold) i=analogRead(pin); Noise afwijzing
Als (ik < lowThreshold) {}
digitalWrite(controlPin,HIGH);
Als (progMode == 99) writeLED(0,02); Test: octaal rood
i=analogRead(PIN);
digitalWrite(controlPin,LOW);
Als (ik > highThreshold) {}
Als (progMode == 99) writeLED(0,020); Test: octaal geel
retourneren (analogRead(pin) < lowThreshold);
return true;
}
anders return false;
} / / Test doorgegeven - toets ingedrukt
anders return false;
}
#define waitFactor 6 / / helderheid factor
VOID writeLED (int LED, int waarde) {/ / LED == 0(D7), 1(D6), 2(D5)
waarde is 3bits voor [lsb] r, g, b
digitalWrite(7-LED,HIGH); Anode hoge brengen
int r = waarde & 7;
int g = (waarde >> 3) & 7;
int b = (waarde >> 6) & 7;
Als (r > 0) {}
digitalWrite(2,LOW);
delayMicroseconds (waitFactor << r);
}
digitalWrite(2,HIGH);
delayMicroseconds (waitFactor < <(7-r));
Als (g > 0) {}
digitalWrite(3,LOW);
delayMicroseconds (waitFactor << g);
}
digitalWrite(3,HIGH);
delayMicroseconds (waitFactor < <(7-g));
Als (b > 0) {}
digitalWrite(4,LOW);
delayMicroseconds (waitFactor << b);
}
digitalWrite(4,HIGH);
delayMicroseconds (waitFactor < <(7-b));
digitalWrite(7-LED,LOW);
}