Lasertag
- Войдите на сайт для отправки комментариев
Сб, 12/06/2021 - 23:01
Всем привет. В лазертаг использую в одних пушках NANO, в других LGT8F328P. Скетч один. Так вот на LGT скетч работает только с Serial.begin(9600); в void setup(). (строка 141)Для меня это удивительно, может подскажете почему так. Скетч не мной написан но кое как пытаюсь разобраться .
#include <IRremote.h> //биб-ка ИК #include <avr/pgmspace.h> //биб-ка для работы с массивом данных #include "sounddata.h" // массив данных unsigned long oldtime, // программный таймер timeFire, // скорострельность timemillis, // программный таймер timeResist; // время уезвимости byte RECV_PIN = 11; // выход ИК-приемника byte button = 2; //кнопка выстрела int i,i_end; // начало конец звук фрагмента unsigned long ct8khz; // выборка байта с частотой ~ 8000 Гц byte speakerPin = 10; //выход звука byte LedGameOver = 13; // светодиод повязки int life; // жизни int bullet; // патроны boolean flagGameOver; //состояние игры IRsend irsend (3); // выход ик вывод 3 IRrecv irrecv(RECV_PIN); //определяем вход decode_results results; //результат декодирования void Playsound () // подпрограмма вывода звука { if (i_end>0) // если байт конца фрагмента равен 0 то звука нет { if (ct8khz < micros()) // если таймер переполнился { analogWrite(speakerPin, pgm_read_byte(&data[i])); // помещаем байт из массива Шим генерато i++; // увеличить счетчик в массиве ct8khz = micros()+115; // выборка байта с частотой ~ 8000 Гц } if (i>i_end) // если конец фрагмента конец воспроизведения { i=0; i_end=0; } } } void Updategame() //обновление игры { timemillis = millis(); if (timeResist < timemillis) // Шок 2 сек { if (life > 0) digitalWrite(LedGameOver, LOW); // выкл светодиод } if (life < 1 && flagGameOver == LOW ) { flagGameOver = HIGH; i=9600; // звук game i_end=18299; // over digitalWrite(LedGameOver, HIGH); // вкл светодиод } } void UpdateIRin() // обработка принятых данных { if (irrecv.decode(&results)) { //Serial.println(results.value); //"показываем" принятый код if (results.value == 1976) // Пополнение life bullet { timeResist = timemillis+2000; life = 3; // + 3 жизни digitalWrite(LedGameOver, LOW); bullet = 100; // +100 патронов i=18300; // звук i_end=20299; // перезаряда flagGameOver = LOW; } if (life > 0) // если живой { if (results.value == 2024 && timeResist < timemillis) // если выстрел противника { timeResist = timemillis+2000; // уязвимость 2с life--; // -1 жизнь i=4800; // звук i_end=9599; // попадания digitalWrite(LedGameOver, HIGH); // вкл светодиод } if (results.value == 3772817503) // Game Over ( Кнопка пульта ) { life = 0; // 0 жизней } } irrecv.resume(); } } void UpdateIRout() // подпрограмма выстрела { if (life > 0 && timeResist < timemillis) // если живой и уязвимый { if (digitalRead(button) == LOW && timeFire < timemillis ) // если нажат курок { if (bullet > 0) // если есть патроны { irsend.sendRC5(2000, 10); //выстрел ( ик данные ) bullet--; // -1 патрон i=0; // звук i_end=4799; // выстрела irrecv.enableIRIn(); // запускаем прием } else // иначе если нет патронов {irsend.sendRC5(4000, 10); i=19000; // звук i_end=20000 ; // осечки } timeFire = timemillis + 110; //скорострельность } } } void setup() { Serial.begin(9600); irrecv.enableIRIn(); // "запускаем" прием pinMode(button, INPUT_PULLUP); // назначить выводу порт ввода digitalWrite(button, HIGH); // включить подтягивающий резистор pinMode(LedGameOver,OUTPUT); // назначить выводу порт ввода digitalWrite(LedGameOver,LOW); // выкл светодиод TCCR1A = TCCR1A & 0xe0 | 1; // ШИМ 8 разрядов TCCR1B = TCCR1B & 0xe0 | 0x09; // 62,5 кГц //pinMode(13, OUTPUT); // назначить выводу порт ввода } void loop() { Playsound(); UpdateIRin(); Updategame(); UpdateIRout(); }
Где-то про такое читал http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p
Здравствуйте. Хотел узнать излучатель на ик диоде? Если есть возможность, не поделитесь чертежами и ПО. Буду премного благодарен. И такой вопрос если использовать ИК лазерный модуль? Мой адрес cetvertakov71@mail.ru