В чем тут может быть ошибка?
- Войдите на сайт для отправки комментариев
В чем тут может быть ошибка? Делал прогу на игру зимняя охота(ссылка прилагается), но с у четом того что мишени подлючаются к счетчику к 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
Александр,
а нельзя переименоать это раздел в "Готовые проекты"? Может, понятнее будет людям что сюда постить? А то заходишь посмотреть чего люди делают, а тут филиал детского сада.
И, кстати, раздел "Детский сад", тоже нормально бы смотрелся.
Для остромных дибилов как вы вполне сойдет.
а нельзя переименоать это раздел в "Готовые проекты"? Может, понятнее будет людям что сюда постить?
Я так понимаю, это было написано до перемещения темы.
Честно говоря, думаю, переименовывать именно так нецелесообразно: после того, как проект завершен, автору, по сути, уже нечего обсуждать, так что "Готовые проекты" потом придется переименовывать в "Готовые проекты, обсуждаемые без их авторов".