Przesyłam zmodyfikowany program z wyłączeniem po przypadkowym włączeniu, i żeby program nie działał w kółko jak się stoi na czujniku.
Kod:
// Projekt oświetlenia schodów
unsigned long czas;
int pin[12]={2,3,4,5,6,7,8,9,10,11,12,13};
int q = 0;
byte s = 0;
byte c = 0;
byte v = 0;
bool c_on = false;
bool c_off = false;
//LED delay
int tOn = 250; //czas wlaczania
int tOff = 100; //czas wylanczania
int offC = 200; //
void setup() {
Serial.begin(9600);
pinMode( 0 , INPUT);
pinMode( 1 , INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
// z dołu
if (digitalRead(1) == LOW and s == 0)
{
c_on=true;
OnDown();
}
if (digitalRead(1) == HIGH and c_on == true)
{
s= 1;
c_on=false;
czas = millis()+30000;
}
if (digitalRead(1) == LOW and s == 1)
{
c=1;
}
if (digitalRead(1) == HIGH and c == 1)
{
OffDown();
}
if (digitalRead(1) == HIGH and s == 1)
{
if (millis() > czas )
{
OffCzas();
}
}
// z góry
if (digitalRead(0) == LOW and s == 0)
{
c_off=true;
OnUp();
}
if (digitalRead(0) == HIGH and c_off == true)
{
s= 1;
c_off=false;
czas = millis()+30000;
}
if (digitalRead(0) == LOW and s == 1)
{
v=1;
}
if (digitalRead(0) == HIGH and v == 1 )
{
OffUp();
}
if (digitalRead(0) == HIGH and s == 1)
{
if (millis() > czas )
{
OffCzas();
}
}
}
void OnUp(){
for( q = 0; q < 12; q++ ){
digitalWrite( pin[q], HIGH );delay(tOn);}
}
void OffUp(){
for( q = 12; q >= 0; q-- ){
digitalWrite( pin[q], LOW );delay(tOff);}
s = 0;
v = 0;
c = 0;
q = 0;
}
void OnDown(){
for( q = 12; q >= 0; q-- ){
digitalWrite( pin[q], HIGH );delay(tOn);}
}
void OffDown(){
for( q = 0; q < 12; q++ ){
digitalWrite( pin[q], LOW );delay(tOff);}
s = 0;
v = 0;
c = 0;
q = 0;
}
void OffCzas(){
digitalWrite(2, LOW );
digitalWrite(13, LOW );
delay(offC);
digitalWrite(3, LOW );
digitalWrite(12, LOW );
delay(offC);
digitalWrite(4, LOW );
digitalWrite(11, LOW );
delay(offC);
digitalWrite(5, LOW );
digitalWrite(10, LOW );
delay(offC);
digitalWrite(6, LOW );
digitalWrite(9, LOW );
delay(offC);
digitalWrite(7, LOW );
digitalWrite(8, LOW );
delay(offC);
s = 0;
v = 0;
c = 0;
}