#include const char data = 11; const char clock = 12; const char latch = 8; const char startButton = 2; // przerwanie 0 const char stopButton = 3; // przerwanie 1 const char selectMode_1 = 4; const char selectMode_2 = 5; // zmienne do wyboru trybu swiecenia - max. 4 mozliwosci const unsigned int setDelay = 50; // opoznienie w ms char statusOfWork = 0; // 0 - stop; 1 - start void startWorking(); void stopWorking(); void mode_1(); void mode_2(); void mode_3(); void setup() { pinMode(data, OUTPUT); pinMode(clock, OUTPUT); pinMode(latch, OUTPUT); pinMode(startButton, INPUT_PULLUP); pinMode(stopButton, INPUT_PULLUP); pinMode(selectMode_1, INPUT); pinMode(selectMode_2, INPUT); // obsługa przerwania 0 - start - gdy na wejsciu startButton pojawi się zbocze opadające attachInterrupt(digitalPinToInterrupt(startButton), startWorking, FALLING); // obsługa przerwania 1 - stop - gdy na wejsciu stopButton pojawi się zbocze opadajace attachInterrupt(digitalPinToInterrupt(stopButton), stopWorking, FALLING); } // infinite loop void loop() { if (statusOfWork) { if (digitalRead(selectMode_1) == 0 && digitalRead(selectMode_2) == 0) { mode_1(); } else if (digitalRead(selectMode_1) == 0 && digitalRead(selectMode_2) == 1) { mode_2(); } else if (digitalRead(selectMode_1) == 1 && digitalRead(selectMode_2) == 0) { mode_3(); } } } void startWorking() // obsługa funkcji przerwania 0 { statusOfWork = 1; // status pracy } void stopWorking() // obsługa funkcji przerwania 1 { statusOfWork = 0; // status stopu } void mode_1() // tryb 1 { for(int i = 0; i < 9; i++) { digitalWrite(latch, LOW); int value = pow( 2, i ); if (value == 2) continue; shiftOut(data, clock, MSBFIRST, value); digitalWrite(latch, HIGH); if (i == 8) delay(setDelay*3); else delay(setDelay); } digitalWrite(latch, LOW); shiftOut(data, clock, MSBFIRST, 0); digitalWrite(latch, HIGH); delay(setDelay*10); } void mode_2() // tryb 2 { for(int i = -1; i < 9; i++) { digitalWrite(latch, LOW); int value = pow( 2, i ); if (value == 2) continue; if (i == -1) value = 0; shiftOut(data, clock, MSBFIRST, value); digitalWrite(latch, HIGH); delay(setDelay); } for(int i = 8; i >= -1; i--) { digitalWrite(latch, LOW); int value = pow( 2, i ); if (value == 2) continue; if (i == -1) value = 0; shiftOut(data, clock, MSBFIRST, value); digitalWrite(latch, HIGH); delay(setDelay); } delay(setDelay*5); } void mode_3() // tryb 3 { for(int i = -1; i < 9; i++) { digitalWrite(latch, LOW); int value = pow( 2, i ); if (value == 2) continue; shiftOut(data, clock, MSBFIRST, value); digitalWrite(latch, HIGH); delay(setDelay); } delay(setDelay*3); digitalWrite(latch, LOW); shiftOut(data, clock, MSBFIRST, 0); digitalWrite(latch, HIGH); }