В чем тут может быть ошибка?
- Войдите на сайт для отправки комментариев
В чем тут может быть ошибка? Делал прогу на игру зимняя охота(ссылка прилагается), но с у четом того что мишени подлючаются к счетчику к 561 ие8, и переключаение мишеней осуществяется за сет него. И также при попадании или непопадании звучит мелодия(пока что поставил просто вибрацию). Также при попадании мишень выключается и идет заново выбор мишени. Входы пистолета приходят на пины 2(сигнал с курка) и 3(сигнал с засвечивания мишени). Динамическая индикация также осуществяется за счет ардуино(сегменты подключены к аналовым входам). Особенность в том что каждые 10 мс срабатывает прерывание по таймеру и происходит переключение чисел с единицы на десятки и т.д. а после P-ое количества таких прерываений происходит переключение мишени путем подачи счетного сигнала на тактирующий вход микросхемы к561ие8.
Ардуино нано v3. ссылка на игру: http://zimnjaja-ohota.15kop.ru/game/
А теперь к делу. Уход в подпрограмму происходит нормально, НО сигнал на включение лисы(пин 13) загорается и не выключается. Также и на 1 пине(он не выключается, даже если сигнал с курка(пин 3) закорачиваешь на массу. Зато музыка прекращается.
Прилагаю код программы. Срочно нужно
byte A=0;//единицы попаданий
byte B=0;//десятки попаданий
byte TimeGame = 3606;//время игры
byte vibor = 0; //выбор мишени
byte mishen = 0;//счет мишени
byte N=0;//количество прерываний(установка уровня)
byte C=0;//выбор разрядности
byte P=50;//выбор уровня
byte L1=0;//биты выбра уровня
byte L2=0;
byte ON=0;//бит включения игры
byte N1=0;//бит задержки после выстрела
const int a = 14;//выводы цифровой индикации
const int b = 15;
const int c = 16;
const int d = 17;
const int e = 18;
const int f = 19;
const int g = 20;
const int x=1;
byte flag=0;
void setup() {
pinMode(a, OUTPUT);//сегменты индикатора
pinMode(b, OUTPUT);//
pinMode(c, OUTPUT);//
pinMode(d, OUTPUT);//
pinMode(e, OUTPUT);//
pinMode(f, OUTPUT);//
pinMode(g, OUTPUT);//
pinMode(10, OUTPUT);//заяц
pinMode(11, OUTPUT);//волк
pinMode(12, OUTPUT);//куропатка
pinMode(13, OUTPUT);//лиса
pinMode(5, OUTPUT);//сброс счетчика
pinMode(4, OUTPUT);//такт счетчика
pinMode(21, INPUT);//сигнал от монетоприемника
pinMode(6, OUTPUT);//выход на реле(выход единиц разряда, А)
pinMode(7, INPUT);//выбор уровня L1
pinMode(8, INPUT);//выбор уровня L2
pinMode(2, INPUT);//курок
pinMode(3, INPUT);//засвечивание мишени
pinMode(9, OUTPUT);//выход разряда десятков, В
TCCR1A=0;
TCCR1B=0;
TCCR1B=(1<<WGM12);
TCCR1B|=(1<<CS10) | (1<<CS12);
OCR1A=160;
TIMSK1=(1<<OCIE1A);
sei();
}
void loop() {
L1=digitalRead(7);//выбор уровня
L2=digitalRead(8);
if(L2==0){if(L1==0){
P=50; }
else { P=40;}}
else {if(L1==0){
P=30;}
else {P=20;}}
N=P;//установка уровня
STOP:
while(TimeGame=0){if(digitalRead(21)==1){TimeGame=3606;}}
ON=1;
while(digitalRead(2)==0){};//тут можно вывести на одельный светодиод и поставить его под кнопку запуска игры
Vibor_Misheni:
vibor=0;
if(TimeGame=0){goto STOP;}
vibor=random(10,16);
if(vibor<13){
digitalWrite(vibor, HIGH);
mishen=0;}
else{
for(int i=0; i<(vibor-12);i++){
digitalWrite(4, HIGH);
digitalWrite(4, LOW);}
mishen=0;}//
if(vibor>12){
digitalWrite(13, HIGH);
while(mishen<1){
if(digitalRead(2)==1){
if(digitalRead(3)==1){
A=A+1;
if(A==10){A=0;
B=B=1;}
goto Melodia2;
goto Popal1;}
N1=N;
goto Melodia1;
goto Najato1;}}}
Next:
while(mishen<=10){
if(digitalRead(2)==1){
if(digitalRead(3)==1){
A=A+1;
if(A==10){A=0;
B=B=1;}
goto Melodia2;
goto Popal1;}
N1=N;
goto Melodia1;}
goto Najato2;}
Popal2:
digitalWrite(5, HIGH);
digitalWrite(5, LOW);
digitalWrite(vibor, LOW);
goto Vibor_Misheni;
Melodia1:
digitalWrite(x, HIGH);//мелодия
digitalWrite(x,LOW);
tone(x, 1050, 200);
digitalWrite(x,LOW);
return;
Melodia2:
digitalWrite(x, HIGH);//мелодия
tone(x, 350, 200);
digitalWrite(x, LOW);
return;
Najato1:
while(N<P){
if(N1<=N){goto Popal1;}}
Popal1:
digitalWrite(5, HIGH);
digitalWrite(5, LOW);
digitalWrite(13, LOW);
digitalWrite(13, LOW);
mishen=0;
goto Vibor_Misheni;
Najato2:
while(N<P){
if(N1<=N){goto Next;}}
return;
}
ISR(TIMER1_COMPA_vect){
if(ON==1){
N=N-1;
TimeGame=TimeGame-1;
}
digitalWrite(a, LOW);//обнуление
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
if(flag==0){C = A;//установка разряда числа
digitalWrite(6, HIGH);
digitalWrite(9, LOW);
flag=flag+1;}
else {C=B;
digitalWrite(9, HIGH);
digitalWrite(6, LOW);
flag=flag-1;}
switch(C){//засвечивание числа
case 0:
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
break;
case 1:
digitalWrite(b,1);
digitalWrite(c,1);
break;
case 2:
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(g,1);
digitalWrite(e,1);
digitalWrite(d,1);
break;
case 3:
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(g,1);
digitalWrite(c,1);
digitalWrite(d,1);
break;
case 4:
digitalWrite(f,1);
digitalWrite(b,1);
digitalWrite(g,1);
digitalWrite(c,1);
break;
case 5:
digitalWrite(a,1);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(c,1);
digitalWrite(d,1);
break;
case 6:
digitalWrite(a,1);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(e,1);
digitalWrite(d,1);
digitalWrite(c,1);
break;
case 7:
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
break;
case 8:
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
break;
case 9:
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(f,1);
digitalWrite(g,1);
break;
}
if(N==0){//переключение мишени
mishen=mishen+1;
N=P;
digitalWrite(4, HIGH);
digitalWrite(4, LOW);
digitalWrite(x, HIGH);
digitalWrite(x, LOW);
}
UPD: перемещено в Программирование by Yarik.Yar
Александр,
а нельзя переименоать это раздел в "Готовые проекты"? Может, понятнее будет людям что сюда постить? А то заходишь посмотреть чего люди делают, а тут филиал детского сада.
И, кстати, раздел "Детский сад", тоже нормально бы смотрелся.
Для остромных дибилов как вы вполне сойдет.
а нельзя переименоать это раздел в "Готовые проекты"? Может, понятнее будет людям что сюда постить?
Я так понимаю, это было написано до перемещения темы.
Честно говоря, думаю, переименовывать именно так нецелесообразно: после того, как проект завершен, автору, по сути, уже нечего обсуждать, так что "Готовые проекты" потом придется переименовывать в "Готовые проекты, обсуждаемые без их авторов".