Поэтому я решил начать интерактивный ответ, потому что комментирование просто не сокращает его здесь.
На первом шаге я просто исправлю все в вашем коде, что вызывает у меня сомнения.
Затем я приглашаю вас чтобы прокомментировать и объяснить, какие из моих изменений вам не ясны или есть какие-либо, которые вы активно отклоняете.
Избиратели, я знаю, что это еще не фактический ответ, я следую чему-то вроде описанного здесь компромисса:
Как мне задавать вопросы на домашнее задание и отвечать на них?
Т.е. до тех пор, пока ОП показывает усилия и общение, я готов их вести.
Если это не сработает, я удалю в любом случае, этот ответ разочарован.
Итак, если возможно, пожалуйста, уделите мне немного времени, пока я пытаюсь наладить здесь сотрудничество.
Ниже приведена отредактированная версия вашего кода, пожалуйста, дайте мне знать, какая из мои изменения вы не можете принять. Обратите внимание, что внесенные мною изменения фактически не учитывают ваш код, основываясь только на рефлексах, отточенных на опыте.
В случае, если я не случайно исправил вашу проблему (разве это не смешно?), Пожалуйста, опишите подробно эта проблема Тогда мы можем попытаться это исправить.
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
int current_step = 0; /* no prefix "_" */
int Pin5 = 9;
int Pin6 = 8;
int Pin7 = 7;
int Pin8 = 6;
/* int _stip= 5; I just do not belive in this... */
int sensor = 3;
int dir = 1; //0=clockwise, 1=counter clockwise
/* maybe boolean is type in your environment, maybe not;
and I do not trust HIGH/LOW to be boolean */
void setup()
{
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
pinMode(Pin5, OUTPUT);
pinMode(Pin6, OUTPUT);
pinMode(Pin7, OUTPUT);
pinMode(Pin8, OUTPUT);
pinMode(sensor, INPUT);
}
void loop ()
{
switch (current_step)
{
case 0:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW); /* 2, not 4 */
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
case 1:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, HIGH);
break;
case 2:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 3:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 4:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 5:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 6:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 7: /* 7 is one of the allowed values, do not count from 0 to "oops" */
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH); /* HLLH was missing to close the loop */
break;
default:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW); /* 2, not 4 */
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
}
if(dir)
{
current_step++;
} else
{
current_step--;
}
if(current_step>7)
{
current_step=0;
}
if(current_step<0)
{
current_step=7;
}
delay(1); /* I don't think this delay is really necessary... */
switch (current_step)
{
case 0:
digitalWrite(Pin5, LOW);
digitalWrite(Pin6, LOW);
digitalWrite(Pin7, LOW);
digitalWrite(Pin8, HIGH);
break;
case 1:
digitalWrite(Pin5, LOW);
digitalWrite(Pin6, LOW);
digitalWrite(Pin7, HIGH);
digitalWrite(Pin8, HIGH);
break;
case 2:
digitalWrite(Pin5, LOW);
digitalWrite(Pin6, LOW);
digitalWrite(Pin7, HIGH);
digitalWrite(Pin8, LOW);
break;
case 3:
digitalWrite(Pin5, LOW); /* 1,2,3,4 ? Seriously? */
digitalWrite(Pin6, HIGH);
digitalWrite(Pin7, HIGH);
digitalWrite(Pin8, LOW);
break;
case 4:
digitalWrite(Pin5, LOW);
digitalWrite(Pin6, HIGH);
digitalWrite(Pin7, LOW);
digitalWrite(Pin8, LOW);
break;
case 5:
digitalWrite(Pin5, HIGH);
digitalWrite(Pin6, HIGH);
digitalWrite(Pin7, LOW);
digitalWrite(Pin8, LOW);
break;
case 6:
digitalWrite(Pin5, HIGH);
digitalWrite(Pin6, LOW);
digitalWrite(Pin7, LOW);
digitalWrite(Pin8, LOW);
break;
case 7: /* poor 7, forgotten again */
digitalWrite(Pin5, HIGH);
digitalWrite(Pin6, LOW);
digitalWrite(Pin7, LOW);
digitalWrite(Pin8, HIGH); /* closing the loop with HLLH */
break;
default:
digitalWrite(Pin5, LOW);
digitalWrite(Pin6, LOW);
digitalWrite(Pin7, LOW);
digitalWrite(Pin8, LOW);
break;
}
delay(1);
if (digitalRead(sensor) == HIGH)
{
dir=1; /* dir is a variable, not a port */
} else
{
dir=0;
}
}