annotate service/frontDoorArduino/frontDoor/frontDoor.pde @ 19:5b3536174a9a

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