#include <OneWire.h>#include <Stepper.h>#include <Wire.h>#define light0 0x44 // A0 = L (I2C light0)#define light1 0x45 // A0 = H (I2C light1)#define LAMP1 13 // Callibration Lamp 1#define LAMP2 6 // Callibration Lamp 2#define FW1 7 // FilterWheel 1#define FW2 8 // FilterWheel 2#define FW3 3 // FilterWheel 3const int steps = 3500; //3200; // change this to fit the number of stepsconst int sspeed = 15; // stepper motor speed// initialize the stepper library on pins#define M1 9#define M2 10#define M3 11#define M4 12Stepper myStepper(steps, M1,M2,M3,M4);// DS18S20 Temperature chipOneWire ds(5); // 1-Wire pinbyte addr[8]; // 1-Wire Addressboolean sense; // Sense of revolutionvoid setup(){sense=true;pinMode(LAMP1, OUTPUT);pinMode(LAMP2, OUTPUT);pinMode(FW1, OUTPUT);pinMode(FW2, OUTPUT);pinMode(FW3, OUTPUT);pinMode(6, OUTPUT);analogWrite(6, 128);// initialize the serial port:Serial.begin(9600);Wire.begin(); // join i2c bus}void loop(){while(TRUE);byte i,n; // for forsbyte present = 0; // for 1-Wirebyte data[12]; // data from temperaturebyte inByte; // RS232 dataint dd=0; // data from lightdigitalWrite(LAMP1, HIGH); // All outputs OFFdigitalWrite(LAMP2, HIGH);digitalWrite(FW1, HIGH);digitalWrite(FW2, HIGH);digitalWrite(FW3, HIGH);delay(300);digitalWrite(LAMP1, LOW); // blik//--------------------------------------------------------- Serial Input// if we get a valid byteif (Serial.available() > 0){// get incoming byte:inByte = Serial.read();Serial.print("Incoming char: ");Serial.print( inByte, HEX);Serial.println();}//--------------------------------------------------------- Motorif (sense){// one revolution in one directionSerial.println("clockwise");myStepper.setSpeed(sspeed);myStepper.step(steps);delay(50);digitalWrite(M1, LOW);digitalWrite(M2, LOW);digitalWrite(M3, LOW);digitalWrite(M4, LOW);}else{// one revolution in the other direction:Serial.println("counterclockwise");myStepper.setSpeed(sspeed/2);myStepper.step(-30);myStepper.setSpeed(sspeed);myStepper.step(-(steps-50));myStepper.setSpeed(sspeed/2);myStepper.step(-20);delay(50);digitalWrite(M1, LOW);digitalWrite(M2, LOW);digitalWrite(M3, LOW);digitalWrite(M4, LOW);}sense=!sense;digitalWrite(LAMP2, LOW); // blik//--------------------------------------------------------- 1-Wire busds.reset_search();for(n=0;n<2;n++){if ( !ds.search(addr)) // search for next thermometer{continue;}Serial.print("R=");for( i = 0; i < 8; i++){Serial.print(addr[i], HEX);Serial.print(" ");}if ( OneWire::crc8( addr, 7) != addr[7]){Serial.print("CRC is not valid!\n");}ds.reset();ds.select(addr);ds.write(0x44,1); // start conversion, with parasite power on at the enddelay(800); // maybe 750ms is enough, maybe notdigitalWrite(FW1, LOW); // blikpresent = ds.reset();ds.select(addr);ds.write(0xBE); // Read ScratchpadSerial.print("P=");Serial.print(present,HEX);Serial.print(" ");for ( i = 0; i < 9; i++) { // we need 9 bytesdata[i] = ds.read();Serial.print(data[i], HEX);Serial.print(" ");}Serial.print(" CRC=");Serial.print( OneWire::crc8( data, 8), HEX);Serial.println();}//------------------------------------------------------- Light 0Serial.print("Light0: COMMAND=");// Setup deviceWire.beginTransmission(light0);Wire.send(0x00); // command registerWire.send(0b11000000); // setup (eye light sensing; measurement range 1 [1000 lx])Wire.endTransmission(); // stop transmitting// Delay for measurement, maybe 100ms is enough, maybe notdelay(110);digitalWrite(FW2, LOW); // blik// Connect to device and set register light0Wire.beginTransmission(light0);Wire.send(0x00); // sends light0Wire.endTransmission(); // stop transmitting// Connect to device and request one byteWire.beginTransmission(light0);Wire.requestFrom(light0, 1);dd = Wire.receive();Wire.endTransmission(); // stop transmittingSerial.print(dd, HEX);Serial.print(" LSB=");// Connect to device and set register light0Wire.beginTransmission(light0);Wire.send(0x01); // sends light0Wire.endTransmission(); // stop transmitting// Connect to device and request one byteWire.beginTransmission(light0);Wire.requestFrom(light0, 1);dd = Wire.receive();Wire.endTransmission(); // stop transmittingSerial.print(dd, HEX);Serial.print(" MSB=");// Connect to device and set register light0Wire.beginTransmission(light0);Wire.send(0x02); // sends light0Wire.endTransmission(); // stop transmitting// Connect to device and request one byteWire.beginTransmission(light0);Wire.requestFrom(light0, 1);dd = Wire.receive();Wire.endTransmission(); // stop transmittingSerial.println(dd, HEX);//------------------------------------------------------- Light 1Serial.print("Light1: COMMAND=");// Setup deviceWire.beginTransmission(light1);Wire.send(0x00); // command registerWire.send(0b11000001); // setup (eye light sensing; measurement range 2 [4000 lx])Wire.endTransmission(); // stop transmitting// Delay for measurement, maybe 100ms is enough, maybe notdelay(110);digitalWrite(FW3, LOW); // blik// Connect to device and set register light0Wire.beginTransmission(light1);Wire.send(0x00); // sends light0Wire.endTransmission(); // stop transmitting// Connect to device and request one byteWire.beginTransmission(light1);Wire.requestFrom(light1, 1);dd = Wire.receive();Wire.endTransmission(); // stop transmittingSerial.print(dd, HEX);Serial.print(" LSB=");// Connect to device and set register light0Wire.beginTransmission(light1);Wire.send(0x01); // sends light0Wire.endTransmission(); // stop transmitting// Connect to device and request one byteWire.beginTransmission(light1);Wire.requestFrom(light1, 1);dd = Wire.receive();Wire.endTransmission(); // stop transmittingSerial.print(dd, HEX);Serial.print(" MSB=");// Connect to device and set register light0Wire.beginTransmission(light1);Wire.send(0x02); // sends light0Wire.endTransmission(); // stop transmitting// Connect to device and request one byteWire.beginTransmission(light1);Wire.requestFrom(light1, 1);dd = Wire.receive();Wire.endTransmission(); // stop transmittingSerial.println(dd, HEX);//-------------------------------------------------- AccelerometerSerial.print("X=");Serial.print(analogRead(A0)-512, DEC);Serial.print(" Y=");Serial.print(analogRead(A1)-512, DEC);Serial.print(" Z=");Serial.println(analogRead(A2)-512, DEC);}