Начало.
Итак, запустил.
Оптический датчик зацеплен ровно по схеме с сайта производителя.
Код (пока кривой, но работает):
#include <Wire.h>
#include <DS1307.h>
int BTN = 4;
int OPTIC = 3;
int RELAY = 2;
/* when to go on */
int INHOUR = 6;
int INDAY = SAT;
DS1307 clock;
void setup(){
clock.begin();
//clock.fillByYMD(2016,2,8);
//clock.fillByHMS(21,47,00);
//clock.fillDayOfWeek(MON);
//clock.setTime();//write time to the RTC chip
pinMode(BTN, INPUT);
pinMode(OPTIC, INPUT);
pinMode(RELAY, OUTPUT);
}
void loop()
{
int buttonState = digitalRead(BTN);
if(buttonState == 1 ) //start
regen();
clock.getTime();
Serial.println(clock.dayOfMonth, DEC);
Serial.println(clock.hour, DEC);
Serial.println(clock.minute, DEC);
if (clock.hour == INHOUR && clock.dayOfMonth == INDAY && clock.minute == 10)
{
regen();
}
delay(1000); // 1 sec
} //loop()
void regen()
{
cycle(5,0); //1
cycle(5,0); //2
cycle(0,1); //3 - long
cycle(5,0); //4
cycle(1,0); //5 - KMnO4 inject
cycle(3,0); //6 - wide
cycle(5,0); //7
cycle(5,0); //8
digitalWrite(RELAY,1);
delay(6500); //roll to zero position
digitalWrite(RELAY,0);
} //regen
void cycle ( int duration, boolean zazor )
{
int opticState;
boolean donetime = 0;
digitalWrite(RELAY,1);
waitlabel();
waitsolid(zazor);
digitalWrite(RELAY,0);
if ( zazor == 0)
delay(duration*60000);
} //cycle
void waitlabel ()
{
int opticState = digitalRead(OPTIC);
while (opticState == 1) //wait for label
{
opticState = digitalRead(OPTIC);
delay(100);
}
}
void waitsolid ( boolean parm )
{
int opticState = digitalRead(OPTIC);
while (opticState == 0) //until label is visible
{
opticState = digitalRead(OPTIC);
if (parm == 1)
{
digitalWrite(RELAY,0);
delay(30000);
digitalWrite(RELAY,1);
delay(1000);
}
else
delay(100);
}
}
Итак, запустил.
Оптический датчик зацеплен ровно по схеме с сайта производителя.
Код (пока кривой, но работает):
#include <Wire.h>
#include <DS1307.h>
int BTN = 4;
int OPTIC = 3;
int RELAY = 2;
/* when to go on */
int INHOUR = 6;
int INDAY = SAT;
DS1307 clock;
void setup(){
clock.begin();
//clock.fillByYMD(2016,2,8);
//clock.fillByHMS(21,47,00);
//clock.fillDayOfWeek(MON);
//clock.setTime();//write time to the RTC chip
pinMode(BTN, INPUT);
pinMode(OPTIC, INPUT);
pinMode(RELAY, OUTPUT);
}
void loop()
{
int buttonState = digitalRead(BTN);
if(buttonState == 1 ) //start
regen();
clock.getTime();
Serial.println(clock.dayOfMonth, DEC);
Serial.println(clock.hour, DEC);
Serial.println(clock.minute, DEC);
if (clock.hour == INHOUR && clock.dayOfMonth == INDAY && clock.minute == 10)
{
regen();
}
delay(1000); // 1 sec
} //loop()
void regen()
{
cycle(5,0); //1
cycle(5,0); //2
cycle(0,1); //3 - long
cycle(5,0); //4
cycle(1,0); //5 - KMnO4 inject
cycle(3,0); //6 - wide
cycle(5,0); //7
cycle(5,0); //8
digitalWrite(RELAY,1);
delay(6500); //roll to zero position
digitalWrite(RELAY,0);
} //regen
void cycle ( int duration, boolean zazor )
{
int opticState;
boolean donetime = 0;
digitalWrite(RELAY,1);
waitlabel();
waitsolid(zazor);
digitalWrite(RELAY,0);
if ( zazor == 0)
delay(duration*60000);
} //cycle
void waitlabel ()
{
int opticState = digitalRead(OPTIC);
while (opticState == 1) //wait for label
{
opticState = digitalRead(OPTIC);
delay(100);
}
}
void waitsolid ( boolean parm )
{
int opticState = digitalRead(OPTIC);
while (opticState == 0) //until label is visible
{
opticState = digitalRead(OPTIC);
if (parm == 1)
{
digitalWrite(RELAY,0);
delay(30000);
digitalWrite(RELAY,1);
delay(1000);
}
else
delay(100);
}
}
Комментариев нет:
Отправить комментарий