Rev 2035 Rev 2036
1 #include <OneWire.h> 1 #include <OneWire.h>
2 #include <Stepper.h> 2 #include <Stepper.h>
3 #include <Wire.h> 3 #include <Wire.h>
4   4  
5 #define light0 0x44 // A0 = L (I2C light0) 5 #define light0 0x44 // A0 = L (I2C light0)
6 #define light1 0x45 // A0 = H (I2C light0) 6 #define light1 0x45 // A0 = H (I2C light0)
7   7  
8 #define LAMP1 13 // Callibration Lamp 1 8 #define LAMP1 13 // Callibration Lamp 1
9 #define LAMP2 6 // Callibration Lamp 2 9 #define LAMP2 6 // Callibration Lamp 2
10 #define FW1 7 // FilterWheel 1 10 #define FW1 7 // FilterWheel 1
11 #define FW2 8 // FilterWheel 1 11 #define FW2 8 // FilterWheel 1
12 #define FW3 3 // FilterWheel 1 12 #define FW3 3 // FilterWheel 1
13   13  
14 const int steps = 200; //3200; // change this to fit the number of steps 14 const int steps = 200; //3200; // change this to fit the number of steps
15 const int sspeed = 100; // stepper motor speed 15 const int sspeed = 100; // stepper motor speed
16   16  
17 // initialize the stepper library on pins 17 // initialize the stepper library on pins
18 #define M1 9 18 #define M1 9
19 #define M2 10 19 #define M2 10
20 #define M3 11 20 #define M3 11
21 #define M4 12 21 #define M4 12
22 Stepper myStepper(steps, M1,M2,M3,M4); 22 Stepper myStepper(steps, M1,M2,M3,M4);
23   23  
24 // DS18S20 Temperature chip 24 // DS18S20 Temperature chip
25 OneWire ds(5); // 1-Wire 25 OneWire ds(5); // 1-Wire
26 byte addr[8]; // Addres 26 byte addr[8]; // Addres
27 boolean sense; 27 boolean sense;
28   28  
29 void setup() 29 void setup()
30 { 30 {
31 sense=true; 31 sense=true;
32 32
33 pinMode(LAMP1, OUTPUT); 33 pinMode(LAMP1, OUTPUT);
34 pinMode(LAMP2, OUTPUT); 34 pinMode(LAMP2, OUTPUT);
35 pinMode(FW1, OUTPUT); 35 pinMode(FW1, OUTPUT);
36 pinMode(FW2, OUTPUT); 36 pinMode(FW2, OUTPUT);
37 pinMode(FW3, OUTPUT); 37 pinMode(FW3, OUTPUT);
38   38  
39 // initialize the serial port: 39 // initialize the serial port:
40 Serial.begin(9600); 40 Serial.begin(9600);
41 41
42 Wire.begin(); // join i2c bus (light0 optional for master) 42 Wire.begin(); // join i2c bus (light0 optional for master)
43   -  
44 // search for DS -  
45 if ( !ds.search(addr)) -  
46 { -  
47 ds.reset_search(); -  
48 delay(250); -  
49 return; -  
50 } -  
51   -  
52 if ( OneWire::crc8( addr, 7) != addr[7]) -  
53 { -  
54 Serial.print("CRC is not valid!\n"); -  
55 return; -  
56 } -  
57   -  
58 } 43 }
59   44  
60   45  
61 void loop() 46 void loop()
62 { 47 {
63 byte i; 48 byte i,n;
64 byte present = 0; 49 byte present = 0;
65 byte data[12]; 50 byte data[12];
66 byte inByte; 51 byte inByte;
67 int dd=0; 52 int dd=0;
68 53
69 digitalWrite(LAMP1, HIGH); // All outputs OFF 54 digitalWrite(LAMP1, HIGH); // All outputs OFF
70 digitalWrite(LAMP2, HIGH); 55 digitalWrite(LAMP2, HIGH);
71 digitalWrite(FW1, HIGH); 56 digitalWrite(FW1, HIGH);
72 digitalWrite(FW2, HIGH); 57 digitalWrite(FW2, HIGH);
73 digitalWrite(FW3, HIGH); 58 digitalWrite(FW3, HIGH);
74 delay(300); 59 delay(300);
75 digitalWrite(LAMP1, LOW); // blik 60 digitalWrite(LAMP1, LOW); // blik
76   61  
-   62 //--------------------------------------------------------- Serial Input
77 // if we get a valid byte 63 // if we get a valid byte
78 if (Serial.available() > 0) 64 if (Serial.available() > 0)
79 { 65 {
80 // get incoming byte: 66 // get incoming byte:
81 inByte = Serial.read(); 67 inByte = Serial.read();
82 Serial.print("Prijat znak: "); 68 Serial.print("Prijat znak: ");
83 Serial.print( inByte, HEX); 69 Serial.print( inByte, HEX);
84 Serial.println(); 70 Serial.println();
85 } 71 }
86 72
87 //--------------------------------------------------------- Motor 73 //--------------------------------------------------------- Motor
88 if (sense) 74 if (sense)
89 { 75 {
90 // step one revolution in one direction: 76 // step one revolution in one direction:
91 Serial.println("clockwise"); 77 Serial.println("clockwise");
92 myStepper.setSpeed(sspeed/2); 78 myStepper.setSpeed(sspeed/2);
93 myStepper.step(30); 79 myStepper.step(30);
94 myStepper.setSpeed(sspeed); 80 myStepper.setSpeed(sspeed);
95 myStepper.step(steps-50); 81 myStepper.step(steps-50);
96 myStepper.setSpeed(sspeed/2); 82 myStepper.setSpeed(sspeed/2);
97 myStepper.step(20); 83 myStepper.step(20);
98 delay(50); 84 delay(50);
99 digitalWrite(M1, LOW); 85 digitalWrite(M1, LOW);
100 digitalWrite(M2, LOW); 86 digitalWrite(M2, LOW);
101 digitalWrite(M3, LOW); 87 digitalWrite(M3, LOW);
102 digitalWrite(M4, LOW); 88 digitalWrite(M4, LOW);
103 } 89 }
104 else 90 else
105 { 91 {
106 // step one revolution in the other direction: 92 // step one revolution in the other direction:
107 Serial.println("counterclockwise"); 93 Serial.println("counterclockwise");
108 myStepper.setSpeed(sspeed/2); 94 myStepper.setSpeed(sspeed/2);
109 myStepper.step(-30); 95 myStepper.step(-30);
110 myStepper.setSpeed(sspeed); 96 myStepper.setSpeed(sspeed);
111 myStepper.step(-(steps-50)); 97 myStepper.step(-(steps-50));
112 myStepper.setSpeed(sspeed/2); 98 myStepper.setSpeed(sspeed/2);
113 myStepper.step(-20); 99 myStepper.step(-20);
114 delay(50); 100 delay(50);
115 digitalWrite(M1, LOW); 101 digitalWrite(M1, LOW);
116 digitalWrite(M2, LOW); 102 digitalWrite(M2, LOW);
117 digitalWrite(M3, LOW); 103 digitalWrite(M3, LOW);
118 digitalWrite(M4, LOW); 104 digitalWrite(M4, LOW);
119 } 105 }
120 sense=!sense; 106 sense=!sense;
121 digitalWrite(LAMP2, LOW); // blik 107 digitalWrite(LAMP2, LOW); // blik
122   108  
123 //--------------------------------------------------------- 1-Wire bus 109 //--------------------------------------------------------- 1-Wire bus
-   110 ds.reset_search();
-   111 for(n=0;n<2;n++)
-   112 {
-   113 if ( !ds.search(addr))
-   114 {
-   115 continue;
-   116 }
124 117  
-   118 Serial.print("R=");
-   119 for( i = 0; i < 8; i++)
-   120 {
-   121 Serial.print(addr[i], HEX);
-   122 Serial.print(" ");
-   123 }
-   124
-   125 if ( OneWire::crc8( addr, 7) != addr[7])
-   126 {
-   127 Serial.print("CRC is not valid!\n");
-   128 }
-   129
125 ds.reset(); 130 ds.reset();
126 ds.select(addr); 131 ds.select(addr);
127 ds.write(0x44,1); // start conversion 132 ds.write(0x44,1); // start conversion, with parasite power on at the end
128   133
129 // Delay for measurement, maybe 750ms is enough, maybe not 134 delay(800); // maybe 750ms is enough, maybe not
130 delay(800); -  
131 digitalWrite(FW1, LOW); // blik 135 digitalWrite(FW1, LOW); // blik
132   136
133 present = ds.reset(); 137 present = ds.reset();
134 ds.select(addr); 138 ds.select(addr);
135 ds.write(0xBE); // Read Scratchpad 139 ds.write(0xBE); // Read Scratchpad
136   140
137 Serial.print("P="); 141 Serial.print("P=");
138 Serial.print(present,HEX); 142 Serial.print(present,HEX);
139 Serial.print(" "); 143 Serial.print(" ");
140 for ( i = 0; i < 9; i++) // we need 9 bytes 144 for ( i = 0; i < 9; i++) { // we need 9 bytes
141 { -  
142 data[i] = ds.read(); 145 data[i] = ds.read();
143 Serial.print(data[i], HEX); 146 Serial.print(data[i], HEX);
144 Serial.print(" "); 147 Serial.print(" ");
-   148 }
-   149 Serial.print(" CRC=");
-   150 Serial.print( OneWire::crc8( data, 8), HEX);
-   151 Serial.println();
145 } 152 }
146 Serial.print(" CRC="); -  
147 Serial.print( OneWire::crc8( data, 8), HEX); -  
148 Serial.println(); -  
149   153  
-   154 //------------------------------------------------------- Light 0
150 Serial.print("Light0: COMMAND="); 155 Serial.print("Light0: COMMAND=");
151 // Setup device 156 // Setup device
152 Wire.beginTransmission(light0); 157 Wire.beginTransmission(light0);
153 Wire.send(0x00); // sends light0 158 Wire.send(0x00); // sends light0
154 Wire.send(0b11000001); // setup (eye light sensing; measurement range 2 [4000 lx]) 159 Wire.send(0b11000001); // setup (eye light sensing; measurement range 2 [4000 lx])
155 Wire.endTransmission(); // stop transmitting 160 Wire.endTransmission(); // stop transmitting
156   161  
157 // Delay for measurement, maybe 100ms is enough, maybe not 162 // Delay for measurement, maybe 100ms is enough, maybe not
158 delay(110); 163 delay(110);
159 digitalWrite(FW2, LOW); // blik 164 digitalWrite(FW2, LOW); // blik
160   165  
161 // Connect to device and set register light0 166 // Connect to device and set register light0
162 Wire.beginTransmission(light0); 167 Wire.beginTransmission(light0);
163 Wire.send(0x00); // sends light0 168 Wire.send(0x00); // sends light0
164 Wire.endTransmission(); // stop transmitting 169 Wire.endTransmission(); // stop transmitting
165 // Connect to device and request one byte 170 // Connect to device and request one byte
166 Wire.beginTransmission(light0); 171 Wire.beginTransmission(light0);
167 Wire.requestFrom(light0, 1); 172 Wire.requestFrom(light0, 1);
168 dd = Wire.receive(); 173 dd = Wire.receive();
169 Wire.endTransmission(); // stop transmitting 174 Wire.endTransmission(); // stop transmitting
170 Serial.print(dd, HEX); 175 Serial.print(dd, HEX);
171   176  
172 Serial.print(" LSB="); 177 Serial.print(" LSB=");
173 // Connect to device and set register light0 178 // Connect to device and set register light0
174 Wire.beginTransmission(light0); 179 Wire.beginTransmission(light0);
175 Wire.send(0x01); // sends light0 180 Wire.send(0x01); // sends light0
176 Wire.endTransmission(); // stop transmitting 181 Wire.endTransmission(); // stop transmitting
177 // Connect to device and request one byte 182 // Connect to device and request one byte
178 Wire.beginTransmission(light0); 183 Wire.beginTransmission(light0);
179 Wire.requestFrom(light0, 1); 184 Wire.requestFrom(light0, 1);
180 dd = Wire.receive(); 185 dd = Wire.receive();
181 Wire.endTransmission(); // stop transmitting 186 Wire.endTransmission(); // stop transmitting
182 Serial.print(dd, HEX); 187 Serial.print(dd, HEX);
183   188  
184 Serial.print(" MSB="); 189 Serial.print(" MSB=");
185 // Connect to device and set register light0 190 // Connect to device and set register light0
186 Wire.beginTransmission(light0); 191 Wire.beginTransmission(light0);
187 Wire.send(0x02); // sends light0 192 Wire.send(0x02); // sends light0
188 Wire.endTransmission(); // stop transmitting 193 Wire.endTransmission(); // stop transmitting
189 // Connect to device and request one byte 194 // Connect to device and request one byte
190 Wire.beginTransmission(light0); 195 Wire.beginTransmission(light0);
191 Wire.requestFrom(light0, 1); 196 Wire.requestFrom(light0, 1);
192 dd = Wire.receive(); 197 dd = Wire.receive();
193 Wire.endTransmission(); // stop transmitting 198 Wire.endTransmission(); // stop transmitting
194 Serial.println(dd, HEX); 199 Serial.println(dd, HEX);
195   200  
-   201 //------------------------------------------------------- Light 1
196 Serial.print("Light1: COMMAND="); 202 Serial.print("Light1: COMMAND=");
197 // Setup device 203 // Setup device
198 Wire.beginTransmission(light1); 204 Wire.beginTransmission(light1);
199 Wire.send(0x00); // sends light0 205 Wire.send(0x00); // sends light0
200 Wire.send(0b11000001); // setup (eye light sensing; measurement range 2 [4000 lx]) 206 Wire.send(0b11000001); // setup (eye light sensing; measurement range 2 [4000 lx])
201 Wire.endTransmission(); // stop transmitting 207 Wire.endTransmission(); // stop transmitting
202   208  
203 // Delay for measurement, maybe 100ms is enough, maybe not 209 // Delay for measurement, maybe 100ms is enough, maybe not
204 delay(110); 210 delay(110);
205 digitalWrite(FW3, LOW); // blik 211 digitalWrite(FW3, LOW); // blik
206   212  
207 // Connect to device and set register light0 213 // Connect to device and set register light0
208 Wire.beginTransmission(light1); 214 Wire.beginTransmission(light1);
209 Wire.send(0x00); // sends light0 215 Wire.send(0x00); // sends light0
210 Wire.endTransmission(); // stop transmitting 216 Wire.endTransmission(); // stop transmitting
211 // Connect to device and request one byte 217 // Connect to device and request one byte
212 Wire.beginTransmission(light1); 218 Wire.beginTransmission(light1);
213 Wire.requestFrom(light1, 1); 219 Wire.requestFrom(light1, 1);
214 dd = Wire.receive(); 220 dd = Wire.receive();
215 Wire.endTransmission(); // stop transmitting 221 Wire.endTransmission(); // stop transmitting
216 Serial.print(dd, HEX); 222 Serial.print(dd, HEX);
217   223  
218 Serial.print(" LSB="); 224 Serial.print(" LSB=");
219 // Connect to device and set register light0 225 // Connect to device and set register light0
220 Wire.beginTransmission(light1); 226 Wire.beginTransmission(light1);
221 Wire.send(0x01); // sends light0 227 Wire.send(0x01); // sends light0
222 Wire.endTransmission(); // stop transmitting 228 Wire.endTransmission(); // stop transmitting
223 // Connect to device and request one byte 229 // Connect to device and request one byte
224 Wire.beginTransmission(light1); 230 Wire.beginTransmission(light1);
225 Wire.requestFrom(light1, 1); 231 Wire.requestFrom(light1, 1);
226 dd = Wire.receive(); 232 dd = Wire.receive();
227 Wire.endTransmission(); // stop transmitting 233 Wire.endTransmission(); // stop transmitting
228 Serial.print(dd, HEX); 234 Serial.print(dd, HEX);
229   235  
230 Serial.print(" MSB="); 236 Serial.print(" MSB=");
231 // Connect to device and set register light0 237 // Connect to device and set register light0
232 Wire.beginTransmission(light1); 238 Wire.beginTransmission(light1);
233 Wire.send(0x02); // sends light0 239 Wire.send(0x02); // sends light0
234 Wire.endTransmission(); // stop transmitting 240 Wire.endTransmission(); // stop transmitting
235 // Connect to device and request one byte 241 // Connect to device and request one byte
236 Wire.beginTransmission(light1); 242 Wire.beginTransmission(light1);
237 Wire.requestFrom(light1, 1); 243 Wire.requestFrom(light1, 1);
238 dd = Wire.receive(); 244 dd = Wire.receive();
239 Wire.endTransmission(); // stop transmitting 245 Wire.endTransmission(); // stop transmitting
240 Serial.println(dd, HEX); 246 Serial.println(dd, HEX);
241   247  
242 // Accelerometer 248 //-------------------------------------------------- Accelerometer
243 Serial.print("X="); 249 Serial.print("X=");
244 Serial.print(analogRead(A0)-512, DEC); 250 Serial.print(analogRead(A0)-512, DEC);
245 Serial.print(" Y="); 251 Serial.print(" Y=");
246 Serial.print(analogRead(A1)-512, DEC); 252 Serial.print(analogRead(A1)-512, DEC);
247 Serial.print(" Z="); 253 Serial.print(" Z=");
248 Serial.println(analogRead(A2)-512, DEC); 254 Serial.println(analogRead(A2)-512, DEC);
249 } 255 }
250   256  
251   257  
252   258