//стрвонення змінних стану першого і другого кодів
int cyclestep1 = 3, cyclestep2 = 128;
//змінні зміни напрямку зсуву
bool backward, forward;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//Налаштування конфігурації входів та виходів
pinMode(22,OUTPUT);
pinMode(25,OUTPUT);
pinMode(26,OUTPUT);
pinMode(29,OUTPUT);
pinMode(30,OUTPUT);
pinMode(33,OUTPUT);
pinMode(34,OUTPUT);
pinMode(37,OUTPUT);
pinMode(38,INPUT_PULLUP);
pinMode(41,INPUT_PULLUP);
pinMode(42,INPUT_PULLUP);
pinMode(45,INPUT_PULLUP);
pinMode(46,INPUT_PULLUP);
pinMode(49,INPUT_PULLUP);
pinMode(50,INPUT_PULLUP);
pinMode(53,INPUT_PULLUP);
}
//функція зсуву світлового коду по першій схемі
void BitShift1(){
if (cyclestep1==3&&backward==false){
backward=true;
}
if (cyclestep1==192&&backward==true){
backward=false;
}
if(backward){
cyclestep1 = cyclestep1<<1;
}
else{
cyclestep1 = cyclestep1>>1;
}
}
// функція зсуву світлового коду по другій схемі
void BitShift2(){
if (cyclestep2==128&&forward==false){
forward=true;
}
if (cyclestep2==1&&forward==true){
forward=false;
}
if(forward){
cyclestep2 = cyclestep2>>1;;
}
else{
cyclestep2 = cyclestep2<<1;
}
}
//розбиття світлового коду на 8 біт
void IntToDI(int State){
if (State&1){
digitalWrite(37, HIGH);
}
else{
digitalWrite(37, LOW);
}
if (State&2){
digitalWrite(34, HIGH);
}
else{
digitalWrite(34, LOW);
}
if (State&4){
digitalWrite(33, HIGH);
}
else{
digitalWrite(33, LOW);
}
if (State&8){
digitalWrite(30, HIGH);
}
else{
digitalWrite(30, LOW);
}
if (State&16){
digitalWrite(29, HIGH);
}
else{
digitalWrite(29, LOW);
}
if (State&32){
digitalWrite(26, HIGH);
}
else{
digitalWrite(26, LOW);
}
if (State&64){
digitalWrite(25, HIGH);
}
else{
digitalWrite(25, LOW);
}
if (State&128){
digitalWrite(22, HIGH);
}
else{
digitalWrite(22, LOW);
}
}
void loop() {
// put your main code here, to run repeatedly:
//считування стану входів
bool Di1,Di2,Di3,Di4,Di5,Di6,Di7,Di8,Do1;
Di1=digitalRead(38);
Di2=digitalRead(41);
Di3=digitalRead(42);
Di4=digitalRead(45);
Di5=digitalRead(46);
Di6=digitalRead(49);
Di7=digitalRead(50);
Di8=digitalRead(53);
//умова спрацювання першого світлового коду
if(Di3&&Di4&&Di7&&Di8&&(!Di1)&&(!Di2)&&(!Di5)&&(!Di6)){
IntToDI(cyclestep1);
delay(500);
BitShift1();
}
//умова спрацювання другого світлового коду
else if (Di1&&Di2&&Di5&&Di6&&(!Di3)&&(!Di4)&&(!Di7)&&(!Di8)){
IntToDI(cyclestep2);
delay(500);
BitShift2();
}
//присвоєння виходам значення входів при інших варіантах
else {
if (Di1){
digitalWrite(22, HIGH);
}
else{
digitalWrite(22, LOW);
}
if (Di2){
digitalWrite(25, HIGH);
}
else{
digitalWrite(25, LOW);
}
if (Di3){
digitalWrite(26, HIGH);
}
else{
digitalWrite(26, LOW);
}
if (Di4){
digitalWrite(29, HIGH);
}
else{
digitalWrite(29, LOW);
}
if (Di5){
digitalWrite(30, HIGH);
}
else{
digitalWrite(30, LOW);
}
if (Di6){
digitalWrite(33, HIGH);
}
else{
digitalWrite(33, LOW);
}
if (Di7){
digitalWrite(34, HIGH);
}
else{
digitalWrite(34, LOW);
}
if (Di8){
digitalWrite(37, HIGH);
}
else{
digitalWrite(37, LOW);
}
}
}