Lampe multimode Arduino avec commutateur soft touch (6 / 6 étapes)

Étape 6: Le dernier croquis.

/*

  • Matrice & touch test de tri-LED (piranha)
  • (C) Copyright 2009 qs
  • Modules (sélectionnés par progMode)
  • 0 - séquence
  • 1 - lumière blanche. DIMS lors d’un « hold ».
  • 2 - morphing de couleurs. Random s’allume lentement le mélange.
  • 3 - firelight. Flammes vacillantes (difficiles à faire quand il n’y a aucun véritable jaune!)
  • 4 - lucioles. Émuler le rituel courtiser des espèces.

*

  • 20mA intégré couleur LED - COMMON anode!!
  • D02 - rouge (bas pour mettre en marche!)
  • D03 - vert
  • D04 - bleu
  • D05 - LED plus à droite (en haut pour allumer)
  • D06 - Centre LED
  • D07 - LED gauche

*/

int matrice [5] = {}
0660,0626,0466,0,0}
; Affichage de l’arc-en-ciel
int matrix02 [5] [2] = {/ / Morphing de routine et firelight
{
511,7}
,{
511,56}
,{
511 504}
,{
511,0}
,{
511 504}
};
unsigned int Luciole [4] = {}
0xdd42, 0xff00, 0x8a00, 0x2200} ;
/ * Lucioles :

  • MSB - (7:5) intensité (0-7)
  • Retard (4:2) en unités de 1 / 2sec
  • (1:0) type de bogue (1 = femelle, 2, 3 = mâle)

*/

Pour ajuster les séquences de pas à pas
bigDelay long = 300, Yas ;
int fsuitors = 0, i, j, val, LED, c0, c1, r0, g0, b0, r1, g1, b1, blanc = 7 ;

int progMode = 0 ; Le commutateur... affaire sélecteur (99 est TEST)
int controlPin = 12, sw02 = 0 ; État de commutation sur A02
unsigned long dttimer02 = 0, timer02 = 0, ffTimer = 0 ; minuteries de chien de garde
seuil d’int = 100 ; millisecondes pour un « touch », triple pour « hold »

void setup() {}
pour (int i = 2; i < = 7; i ++) {}
pinMode(i,OUTPUT) ;
digitalWrite (j’ai, j’ai < 5) ;
}
randomSeed(analogRead(0)) ;
pinMode(12,OUTPUT) ; Notre commande de commutateur maître touch
digitalWrite(12,LOW) ;
analogReference(INTERNAL) ; Sensibilité de Boost (touch) ! Aref est offlimits !

pour (i = 1; i < 4; i ++) {/ / Set up de routine des lucioles
j = random(2,4) ; Type de mâle
j += ((j + i-3) << 2) ; Endurance (manque de) 0-7
Luciole [i] = (j << 8) | (j << 1) |
((i+3) << 13) ; Énergie (luminosité)
}
}

void loop() {}
bigD = bigDelay+millis() ; Calc timeout

Switch (progMode) {}
case 0 :
{}
pour (LED = 0 ; LED < = 2 ; LED++)
writeLED(LED,matrix[LED]) ;
}
tandis que (bigD > = millis()) ;

Si ((sw02&7) == 0) {/ / Hold est cale !
matrice [0] = matrice [0] ++ & 511 ; drôle mathématiques

J’ai = (matrice [1] + 8) ; Augmentation de vert
Si (j’ai > 511) j’ai = (i & 7) + 1 ;
matrice [1] = i ;

J’ai = (64 + matrice [2]) ; Augmentation bleu
Si (j’ai > 511) j’ai = (j’ai & 63) + 1 ;
matrice [2] = i ;
}
rupture ;

cas 1 :
{
R1 = (blanc << 6) | (blanc << 3) ces ;
tandis que (bigD > =millis())
pour (LED = 0 ; LED < = 2 ; LED++)
writeLED(LED,r1) ;
Si ((sw02&7)! = 0) {}
blanc--;
Si (blanc < = 0) blanc = 7 ;
}
rupture ;
}

cas 2 :
{
pour (LED = 0 ; LED < = 2 ; LED++) {}
Si ((sw02&7) == 0) {/ / Hold est cale !
C0 = matrix02 [LED] [0] ;
C1 = matrix02 [LED] [1] ;
Si (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 ;
}
d’autre
Matrix02 [LED] [0] = random(0,512) ; Nouveaux voyants de la cible
}
}
tandis que (bigD > =millis())
pour (LED = 0 ; LED < = 2 ; LED++)
writeLED(LED,matrix02[LED][1]) ;
rupture ;
}

case 3: / / Log feu
{
pour (LED = 0 ; LED < = 2 ; LED++) {}
Si ((sw02&7) == 0) {/ / Hold est cale !
C0 = matrix02 [LED] [0] ;
C1 = matrix02 [LED] [1] ;
Si (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 {}
Si (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 ; Nouvelle cible de lumières rouges * verts
}
}
}
bigD = millis () + 130 ;
{}
pour (LED = 0 ; LED < = 2 ; LED++)
writeLED(LED,matrix02[LED][1]) ;
}
tandis que (bigD > =millis()) ;
rupture ;
}

case 4: / / lucioles
{
Si (ffTimer < millis()) {/ / doit attendre que le temps écoulé
pour (i = 0; i < 4; i ++) {}
ff0 int = Luciole [i] ;
ff1 int = ff0 >> 8 ;
FF0 = ff0 & 127 ;
int ff = ff0 & 7 ;
Si (ff > 0) {/ / Flash sur
j = (ff1 >> 2) & 070 ; Précharge vert
Si ((ff1&3)! = 1) {//A mâle
writeLED(i-1,j) ;
writeLED(i-1,j) ;
Luciole [i]--;
fsuitors ++ ;
}
else / / A femelle !
Si (fsuitors == 0) {}
j += 3 ;
writeLED(0,j) ;
writeLED(1,j) ;
writeLED(2,j) ;
writeLED(0,j) ;
writeLED(1,j) ;
writeLED(2,j) ; Les femelles montrent une impulsion plus longue, plus jaune
Luciole [i]--;
J’ai = 99 ; Sortie précoce
}
}
else {/ / pas de flash
Si (j’ai == 1) fsuitors = 0 ;
j = (ff0 >> 3) & 15 ;
Si (j == 0) //Wait expiré
Luciole [i] = (Luciole [i] & 0xff00) | 0 x 40 | ((FF1&31) << 1) ;
d’autre
Luciole [i]-= 8 ;
}
}
ffTimer = millis () + 450 ;
}
rupture ;
}

99-affaire: / / mode Test...
{
J’ai = ((sw02>1) & 1) << 2 | cocher pour robinet
((SW02>2) & 1) << 6 ;
writeLED(2,i) ; tapez = rouge + tenir = bleu
rupture ;
}

par défaut :
progMode = 0 ;
rupture ;
}

/*

  • Cocher pour touche

*/
Si (readTouch(2)) {/ / nous voyons quelque chose sur la broche 2 !
Si ((sw02&1) == 0) {/ / première fois ' tour
digitalWrite(13,HIGH) ; donc nous montrer qch.
SW02 = 1 ; Drapeau au toucher
timer02 = millis() ; Premier contact horloge
}
else {/ / 1-bit set déjà : nous avons déjà connu ça.
unsigned long t = millis ()-timer02 ; mais depuis combien de temps ?
Si ((sw02&2) == 2) {/ / Regardez 'hold' seulement si « presse » est définie
Si (t > 750) {}
SW02 = sw02 | 4 ;
Si (t > 8000) progMode = 99 ;
}
}
ElseIf (t > = 200) sw02 = sw02 | 2 ; La valeur de « Presse », plus de différenciation
}
}
ElseIf (sw02 & & 1) {/ / Process clé hors
Si ((millis()-timer02)>100) / / autoriser certains ' give'before qualifiant se ferme
{
digitalWrite(13,LOW) ; Montrez-le
Si ((sw02&6) == 2) {//Process a 'tap'
unsigned long t = millis ()-dttimer02 ; //
dttimer02 = millis() ; Permet de garder « taper »
Si (t < 600) {/ / 2 pressions dans le temps limitent (600 ms)
SW02 = 0 x 10 ; Ouvrir le robinet double'
progMode ++ ; Le prochain programme
}
}
else {}
SW02 = sw02 & 0xff00 ;
timer02 = 0 ;
}
}
}
}

# define lowThreshold 180 / / Low est 180mV
# define highThreshold 450 / / 450mV [600] - résistance de la peau est 8Meg

Boolean readTouch (int NIP) {}
int i=analogRead(pin) ;
i=analogRead(pin) ; Ignorer la 1ère lecture
Si (j’ai < lowThreshold) i=analogRead(pin) ; Réjection du bruit
Si (j’ai < lowThreshold) {}
digitalWrite(controlPin,HIGH) ;
Si (progMode == 99) writeLED(0,02) ; Test : rouge octal
i=analogRead(pin) ;
digitalWrite(controlPin,LOW) ;
Si (j’ai > highThreshold) {}
Si (progMode == 99) writeLED(0,020) ; Test : jaune octal
retour (analogRead(pin) < lowThreshold) ;
retourne la valeur true ;
}
sinon renvoyer faux ;
} / / Essai passé - touche enfoncée
sinon renvoyer faux ;
}

#define waitFactor 6 / / facteur de luminosité
void writeLED (int LED, int valeur) {/ / LED == 0(D7), 1(D6), 2(D5)
valeur est 3bits pour r [lsb], g, b
digitalWrite(7-LED,HIGH) ; Apporter l’anode haute
int r = valeur & 7 ;
int g = (valeur >> 3) & 7 ;
int b = (valeur >> 6) & 7 ;

Si (r > 0) {}
digitalWrite(2,LOW) ;
delayMicroseconds (waitFactor << r) ;
}
digitalWrite(2,HIGH) ;
delayMicroseconds (waitFactor < <(7-r)) ;

Si (g > 0) {}
digitalWrite(3,LOW) ;
delayMicroseconds (waitFactor << g) ;
}
digitalWrite(3,HIGH) ;
delayMicroseconds (waitFactor < <(7-g)) ;

Si (b > 0) {}
digitalWrite(4,LOW) ;
delayMicroseconds (waitFactor << b) ;
}
digitalWrite(4,HIGH) ;
delayMicroseconds (waitFactor < <(7-b)) ;

digitalWrite(7-LED,LOW) ;
}

Articles Liés

Hack-A-lampe ou comment contrôler l’Arduino avec votre smartphone

Hack-A-lampe ou comment contrôler l’Arduino avec votre smartphone

J'ai eu une lampe ikea dans mon condo, il fonctionne bien, s'allume, s'éteint... qu'elle ne. C'est ennuyeux kindy, n'est-il pas ? Je pensais, que se passe-t-il si j'ai le hack ? LED RGB viennent alors à ma tête et les idées ont commencé à s'écouler.A
Lampe tube vintage avec touche contrôle variateur

Lampe tube vintage avec touche contrôle variateur

Bienvenue chez Instructable une autre j'espère vous plaira et lui donnez un essai.Je voulais m'acheter une lampe de chevet et chassés de haute et de basse, mais parce que je suis si incroyablement pointilleux je ne pouvais pas en trouver un que j'ai
Lampe d’ambiance avec Arduino

Lampe d’ambiance avec Arduino

Salut ! Dans ce tutoriel, vous apprendrez à faire une lampe d'ambiance avec arduino.Je sais que vous avez pu voir beaucoup de projets de lampe d'ambiance avec arduino, mais je n'étais pas très satisfait avec eux parce qu'ils sont tous changent la cou
Arduino Bluetooth contrôlée lampe de bureau - avec relais coffre-fort

Arduino Bluetooth contrôlée lampe de bureau - avec relais coffre-fort

Aujourd'hui, je vais vous montrer comment construire votre propre lampe de bureau contrôlé de Bluetooth avec arduino uno.Pour ce projet, vous devrez construire le coffre-fort de ralay que vous pouvez le trouver ici :(Note : si vous ne voulez pas cons
Arduino universel Bluetooth Connect - contrôle votre Arduino avec votre appareil Android

Arduino universel Bluetooth Connect - contrôle votre Arduino avec votre appareil Android

J'ai toujours voulu contrôler plus facilement mon Arduino avec mon Smartphone, mais j'ai jamais trouvé la solution parfaite pour le faire. Je ne veux pas dire que c'est parfait, mais il fait ce que je veux qu'il do...well pas complètement, mais je su
Show Laser Arduino avec un contrôle complet XY

Show Laser Arduino avec un contrôle complet XY

mise à jour ! Voir étape 32 pour savoir comment utiliser ce projet avec un laser vert! Aussi - commander l' Instructable LaserTweet pour rendre ces données d'affichage projet de Twitter :Ce projet utilise un Arduino et certains haut-parleurs bon marc
Communication série USB Android Arduino avec câble OTG

Communication série USB Android Arduino avec câble OTG

J'ai fait une nuit Arduino base de lampe à l'aide de la résistance de la photo et le problème avec c'est le niveau de luminosité est différente d'un endroit à l'autre, quand je teste j'ai utilisé une valeur comme seuil pour allumer la lumière et aprè
Système de sécurité de mot de passe Arduino avec capteurs de porte magnétique

Système de sécurité de mot de passe Arduino avec capteurs de porte magnétique

Dans ce guide de Instructables, je vais vous montrer comment faire votre propre système de sécurité de mot de passe en utilisant la carte de Arduino uno et certains commutateurs de porte magnétique. J'ai fait mon propre circuit en utilisant le microc
Comment programmer un AVR (arduino) avec un autre arduino

Comment programmer un AVR (arduino) avec un autre arduino

cette instructables est utile si :* vous avez votre arduino avec atmega168 et vous avez acheté un atmega328 à vous magasin d'électronique. Il n'est pas un bootloader arduino* vous voulez faire un projet qui n'utilise pas arduino - juste une puce AVR
Programmer votre Arduino avec un périphérique Android !

Programmer votre Arduino avec un périphérique Android !

Salutdans ce Instructable que je veux vous montrer, comment vous pouvez programmer votre Arduino avec votre appareil Android. C'est très simple et pas cher. Il nous permet également de programmer notre Arduino, où que nous voulons, c'est utile pour l
ANT + et l’intégration de la Arduino avec Cateye Ergociser exercice vélo

ANT + et l’intégration de la Arduino avec Cateye Ergociser exercice vélo

Cette instructable explique comment intégrer ANT + émetteur/récepteur avec Arduino contrôleur dans un vélo d'exercice vintage 1987 pour permettre basé sur PC ou Garmin sport watch/vélo ordinateur enregistrement des données d'exercice comme 1) Cadence
Le robot aspirateur Floor - contrôlé par Arduino avec flasque arrière du moteur, avec imprimé moteur-roues

Le robot aspirateur Floor - contrôlé par Arduino avec flasque arrière du moteur, avec imprimé moteur-roues

robot aspirateur Floor. Version #17. Essayez de faire plus simple.Le robot est proposé par les petits moteurs à courant continu intégrés moteur-roues imprimés sur l'imprimante 3D :http://www.thingiverse.com/Thing:225576Composants :Arduino avec pare-m
Commande de porte de Garage Bluetooth Arduino avec capteurs et personnalisable Android App

Commande de porte de Garage Bluetooth Arduino avec capteurs et personnalisable Android App

Utilisez un arduino pour activer le relais pour l'ouverture des portes de garage et serrures électriques.Une application Android personnalisable, se connecte à l'arduino via mot de passe bluetooth appairage.Un module de hc-05 bluetooth reçoit des com
Bootload un Arduino avec un support ZIF

Bootload un Arduino avec un support ZIF

Bootloading un Arduino avec un support ZIF vous permet de facilement le programme beaucoup de jetons à la fois sans se soucier de calandrage les broches. La raison en est que ZIF est synonyme de "zero insertion force", et comme son nom l'indique