annotate service/frontDoorArduino/frontDoor/frontDoor.pde @ 824:de21ca2f75c7

frontdoor arduino program Ignore-this: 4daee2dd3a56cc9fbbe7cac3d0aa57aa darcs-hash:20111204030636-312f9-0da0ff9bd36d494071600e39be13d8d887ea018a.gz
author drewp <drewp@bigasterisk.com>
date Sat, 03 Dec 2011 19:06:36 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
824
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 /*
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 note that the chip in this arduino has been replaced with a '328
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 */
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 #include "ST7565.h"
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 #include <OneWire.h>
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 #include <DallasTemperature.h>
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 #define BACKLIGHT_LED 10
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 ST7565 glcd(9, 8, 7, 6, 5);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 OneWire oneWire(3); // digital IO 3
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 DallasTemperature sensors(&oneWire);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 DeviceAddress tempSensorAddress;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 #define NUM_TEMPERATURE_RETRIES 5
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 char newtxt[21*8+1];
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 unsigned int written;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 unsigned char cmd;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 #define GETHEADER -2
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 #define GETCOMMAND -1
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 void setup() {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 Serial.begin(9600);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 Serial.flush();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 pinMode(11, INPUT); // low means door is closed
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 digitalWrite(11, HIGH);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 pinMode(12, OUTPUT);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 digitalWrite(12, LOW);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 pinMode(BACKLIGHT_LED, OUTPUT);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 analogWrite(BACKLIGHT_LED, 200);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 glcd.st7565_init();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38 glcd.st7565_command(CMD_DISPLAY_ON);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 glcd.st7565_command(CMD_SET_ALLPTS_NORMAL);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 glcd.st7565_set_brightness(0x18);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 glcd.display(); // show splashscreen
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 newtxt[21*8] = 0;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 written = GETHEADER; // GETHEADER --recv 0xff--> GETCOMMAND --recv 0x00--> 0
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 void initSensors() {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 sensors.begin();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 sensors.getAddress(tempSensorAddress, 0);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 sensors.setResolution(tempSensorAddress, 12);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 void loop() {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 /*
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56 send 0xff 0x00,
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57 then up to 21*8 bytes of text to replace the display, with a null terminator.
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 or 0xff 0x01, then get back '0\n' or '1\n' for the door sensor
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 or 0xff 0x02, then get back temperature followed by newline
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63 or 0xff 0x03 then a byte for the screen brightness
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 or 0xff 0x0f then 00 or 01 to set the front lights on pin 12
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 */
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 float newTemp;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 int i, printed;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69 int inb = Serial.read();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 if (inb == -1) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 if (written == GETHEADER) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75 if (inb == 0xff) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76 written = GETCOMMAND;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
77 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
78 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
79 else if(written == GETCOMMAND) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
80 cmd = inb;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
81
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
82 switch(cmd) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
83 case 0:
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
84 written = 0; // get chars below
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87 case 1:
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
88 Serial.print(digitalRead(11) ?
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 "{\"door\":\"open\"}\n" :
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 "{\"door\":\"closed\"}\n");
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91 written = GETHEADER;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
92 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
93
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
94 case 2:
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
95
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
96 for (i=0; i<NUM_TEMPERATURE_RETRIES; i++) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
97
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
98 sensors.requestTemperatures();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
99 newTemp = sensors.getTempF(tempSensorAddress);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
100 if (i < NUM_TEMPERATURE_RETRIES-1 &&
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
101 (newTemp < -100 || newTemp > 180)) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
102 // too many errors that were fixed by restarting arduino.
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
103 // trying repeating this much init
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104 initSensors();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
105 continue;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
106 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
107 Serial.print("{\"temp\":");
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
108 Serial.print(newTemp);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109 Serial.print(", \"retries\":");
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
110 Serial.print(i);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
111 Serial.print("}\n");
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
112 break;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
113 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
114 written = GETHEADER;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
115 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
116
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
117 case 3:
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
118 case 4:
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
119 written = 0; // these are handled below
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
120 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
121
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
122 // otherwise take chars
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
123 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
124 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
125 else {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
126 if (cmd == 3) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
127 analogWrite(BACKLIGHT_LED, 255 - inb);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
128 written = GETHEADER;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
129 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
130 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
131 if (cmd == 4) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
132 digitalWrite(12, inb);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
133 written = GETHEADER;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
134 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
135 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
136 newtxt[written] = inb;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
137 written++;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
138
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
139 if (inb == 0 || (written > 21 * 8)) {
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
140 glcd.clear();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
141 glcd.drawstring(0,0, newtxt);
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
142 glcd.display();
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
143
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
144 written = GETHEADER;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
145 return;
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
146 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
147 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
148 }
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
149
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
150
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
151
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
152
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
153
de21ca2f75c7 frontdoor arduino program
drewp <drewp@bigasterisk.com>
parents:
diff changeset
154