Mercurial > code > home > repos > homeauto
view service/bedroomArduino/bed/bed.pde @ 1153:e4f49cd9dda3
add :pointsAtLeastEvery control
Ignore-this: 9d0236b56b2a7592211ca68b87b4a5d1
darcs-hash:76e4d358cb6b039351c9b6f8e3bb825aaaefcc57
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sun, 15 Apr 2018 04:41:00 -0700 |
parents | 1f69e77411ba |
children |
line wrap: on
line source
/* board is like a diecimila '168 shopping: volume knob 4x http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_776386_-1 pretty metal button 4x http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2131274_-1 music selector http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_317850_-1 alarm check green button 1x http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_315678_-1 similar red: http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_315660_-1 similar black: http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_315651_-1 illuminated red: http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_315820_-1 momentary on/on switch for lighting or audio selector 2x http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&sub_attr_name=Switch+Configuration&position=1&productId=317252&catalogId=10001&refineType=1&refineValue=%28ON%29-OFF-%28ON%29&storeId=10001&refine=1&history=22t4lgkv%7CsubCategoryName%7ESwitches%5Ecategory%7E3540%5EcategoryName%7Ecat_35%5EprodPage%7E50%5Epage%7ESEARCH%252BNAV%40f2zj2rdd%7Ccategory%7E354070%5EcategoryName%7Ecat_3540%5Eposition%7E1%5Erefine%7E1%5EsubCategoryName%7ESwitches%2B%252F%2BToggle%5EprodPage%7E50%5Epage%7ESEARCH%252BNAV&ddkey=http:StoreCatalogDrillDownView demultiplexer http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_894024_-1 http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_12909_-1 stereo out jack 4x http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2095437_-1 audio switch relay http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_139977_-1 need two channels of relay or ssr for audio PIR reset switch motion music volume knob, maybe two of them on each side of the bed alarm check drive the rgb leds switch the main speakers or just pillow speaker Control corner light and red ball light Alternate light switch at door and repeated at each side of the bed */ #define SWITCH_X 3 #define SWITCH_Y 4 #define SWITCH_SELECT_A 7 #define SWITCH_SELECT_B 9 #define SWITCH_SELECT_C 8 #define SPEAKER_CHOICE 13 #define SHIFTBRITE_L 5 #define SHIFTBRITE_D 11 #define SHIFTBRITE_C 12 unsigned long SB_CommandPacket; int SB_CommandMode; int SB_BlueCommand; int SB_RedCommand; int SB_GreenCommand; #define LEDCHANS 5 int vals[LEDCHANS * 3]; #define SHIFT(val) shiftOut(SHIFTBRITE_D, SHIFTBRITE_C, MSBFIRST, val) void SB_SendPacket() { SB_CommandPacket = SB_CommandMode & B11; SB_CommandPacket = (SB_CommandPacket << 10) | (SB_BlueCommand & 1023); SB_CommandPacket = (SB_CommandPacket << 10) | (SB_RedCommand & 1023); SB_CommandPacket = (SB_CommandPacket << 10) | (SB_GreenCommand & 1023); SHIFT(SB_CommandPacket >> 24); SHIFT(SB_CommandPacket >> 16); SHIFT(SB_CommandPacket >> 8); SHIFT(SB_CommandPacket); } void latch() { delayMicroseconds(100); digitalWrite(SHIFTBRITE_L, HIGH); // latch data into registers delayMicroseconds(100); digitalWrite(SHIFTBRITE_L, LOW); } void refresh() { /* send all pixels */ SB_CommandMode = B00; for (int pixel=0; pixel < LEDCHANS; pixel++) { SB_RedCommand = vals[pixel * 3 + 0]; SB_GreenCommand = vals[pixel * 3 + 1]; SB_BlueCommand = vals[pixel * 3 + 2]; SB_SendPacket(); } latch(); } void setCurrent(unsigned char r, unsigned char g, unsigned char b) { /* 127 = max */ SB_CommandMode = B01; // Write to current control registers SB_RedCommand = r; SB_GreenCommand = g; SB_BlueCommand = b; SB_SendPacket(); latch(); } void setup() { pinMode(2, INPUT); digitalWrite(2, LOW); // PIR sensor DC-SS015 from http://www.gadgettown.com/Pyroelectric-Infrared-PIR-Motion-Sensor-Detector-Module-E2013.html but that didn't work well, so I got one from dealextreme that does. It's on analog 4 right now, not D2. pinMode(SWITCH_X, INPUT); digitalWrite(SWITCH_X, LOW); pinMode(SWITCH_Y, INPUT); digitalWrite(SWITCH_Y, LOW); pinMode(SWITCH_SELECT_A, OUTPUT); pinMode(SWITCH_SELECT_B, OUTPUT); pinMode(SWITCH_SELECT_C, OUTPUT); pinMode(SPEAKER_CHOICE, OUTPUT); pinMode(SHIFTBRITE_L, OUTPUT); pinMode(SHIFTBRITE_D, OUTPUT); pinMode(SHIFTBRITE_C, OUTPUT); for (int i=0; i < LEDCHANS; i++) { setCurrent(127, 127, 127); } Serial.begin(115200); } #define setSelect(a,b,c) \ digitalWrite(SWITCH_SELECT_A, a); \ digitalWrite(SWITCH_SELECT_B, b); \ digitalWrite(SWITCH_SELECT_C, c); void loop() { unsigned char head, cmd, arg, i; if (Serial.available() >= 3) { head = Serial.read(); if (head != 0x60) { Serial.flush(); return; } cmd = Serial.read(); arg = Serial.read(); Serial.flush(); if (cmd == 0x00) { Serial.print("{\"ok\":true}\n"); } else if (cmd == 0x01) { // poll Serial.print("{\"motion\":"); Serial.print(analogRead(4)); #define printXy \ Serial.print(digitalRead(SWITCH_X)); \ Serial.print(","); \ Serial.print(digitalRead(SWITCH_Y)); \ Serial.print(", \"spkrL\":["); setSelect(0,0,0); delay(2); printXy Serial.print("], \"volR\":["); setSelect(1,0,0); delay(2); printXy Serial.print("], \"lightL\":["); setSelect(0,1,0); delay(2); printXy Serial.print("], \"lightR\":["); setSelect(1,1,0); delay(2); printXy Serial.print("], \"volL\":["); setSelect(0,0,1); delay(2); printXy Serial.print("], \"alarmCheck\":"); setSelect(1,1,1); Serial.print(digitalRead(SWITCH_X)); Serial.print(", \"door\":"); Serial.print(digitalRead(SWITCH_Y)); Serial.print(",\"led\":\"v2\"}\n"); } else if (cmd == 0x02) { // speaker digitalWrite(SPEAKER_CHOICE, arg); Serial.print("{\"speakerChoice\":"); Serial.print((int)arg); Serial.print("}\n"); } else if (cmd == 0x03) { // set leds. arg is the number of data bytes coming while (arg--) { while (Serial.available() < 1) NULL; SHIFT(Serial.read()); } latch(); Serial.print("{\"ok\":1}\n"); } } }