Устройство описываемое в этой статье является модификацией ранее представленного. Почитать про первую версию можно на http://justforduino.blogspot.ru/2016/02/blog-post.html
Устройство не новое. Поэтому начну сразу со схемы.
Всё просто. Ардуино нано. Индикаторный светодиод. Токоограничительный резистор на 220 ом. Две кнопочки.
Кнопок может быть от одной до шести. Подключаются к аналоговым пинам ардуино.
Скетч для плат ардуино с контроллером ATmega328 / ATmega168.
При подаче питания загорается светодиод. Нажатие на любую кнопку гасит светодиод. При этом происходит инициализация генератора псевдослучайных чисел. Теперь, как только светодиод вспыхнет, нужно быстро нажимать кнопки.
Результаты можно посмотреть в мониторе порта ардуино.
В программе частично реализована борьба с читерством. Если нажать и не отпускать кнопку, то в мониторе порта появится соответствующая надпись.
Если все решат читерить, то придется перезапустить ардуино ресетом. При наличии большого желания такое развитие событий тоже можно предусмотреть в коде.
Если нажать и отпустить кнопку пока светодиод не горит, то такое событие программа не заметит. Если бороться с читерством, то оценку таких действий также следует предусмотреть в программе.
Устройство не новое. Поэтому начну сразу со схемы.
Всё просто. Ардуино нано. Индикаторный светодиод. Токоограничительный резистор на 220 ом. Две кнопочки.
Кнопок может быть от одной до шести. Подключаются к аналоговым пинам ардуино.
Скетч для плат ардуино с контроллером ATmega328 / ATmega168.
////////////////////////
//
// Arduino
//
////////////////////////
//
// Sketch:
//
// LED --- Digital Pin 8
// BUTTON 1 --- Analog Pin 0
// BUTTON 2 --- Analog Pin 1
// BUTTON 3 --- Analog Pin 2
// BUTTON 4 --- Analog Pin 3
// BUTTON 5 --- Analog Pin 4
// BUTTON 6 --- Analog Pin 5
unsigned char cheater = 0;
unsigned char button = 0;
unsigned long int time1 = 0;
unsigned long int time2 = 0;
void setup()
{
// Led initialization
DDRB = 0b00000001;
PORTB = 0b00000001;
// Buttons initialization
DDRC = 0b00000000;
PORTC = 0b00111111;
// UART initialization
Serial.begin(9600);
// Pseudo-random number generator initialization
cheater = ~PINC;
PORTB = 0b00000000; // LED ON
do { button = (PINC | cheater) & 0b00111111; }
while ( button == 0b00111111 );
randomSeed(micros());
PORTB = 0b00000001; // LED OFF
}
void loop()
{
Serial.println("round");
PORTB = 0b00000001; // LED OFF
delay(random(2000, 5000)); // wait
cheater = ~PINC;
PORTB = 0b00000000; // LED ON
time1 = micros();
do { button = (PINC | cheater) & 0b00111111; }
while ( button == 0b00111111 );
time2 = micros();
if ( (cheater & 0b00000001) != 0 )
Serial.println("1 cheater");
if ( (cheater & 0b00000010) != 0 )
Serial.println("2 cheater");
if ( (cheater & 0b00000100) != 0 )
Serial.println("3 cheater");
if ( (cheater & 0b00001000) != 0 )
Serial.println("4 cheater");
if ( (cheater & 0b00010000) != 0 )
Serial.println("5 cheater");
if ( (cheater & 0b00100000) != 0 )
Serial.println("6 cheater");
if ( (cheater & 0b00000001) == 0 && (button & 0b00000001) == 0 )
Serial.print("1 ");
if ( (cheater & 0b00000010) == 0 && (button & 0b00000010) == 0 )
Serial.print("2 ");
if ( (cheater & 0b00000100) == 0 && (button & 0b00000100) == 0 )
Serial.print("3 ");
if ( (cheater & 0b00001000) == 0 && (button & 0b00001000) == 0 )
Serial.print("4 ");
if ( (cheater & 0b00010000) == 0 && (button & 0b00010000) == 0 )
Serial.print("5 ");
if ( (cheater & 0b00100000) == 0 && (button & 0b00100000) == 0 )
Serial.print("6 ");
Serial.println(((time2-time1)/1000000.0), 6);
}
//
// End
//
////////////////////////
При подаче питания загорается светодиод. Нажатие на любую кнопку гасит светодиод. При этом происходит инициализация генератора псевдослучайных чисел. Теперь, как только светодиод вспыхнет, нужно быстро нажимать кнопки.
Результаты можно посмотреть в мониторе порта ардуино.
В программе частично реализована борьба с читерством. Если нажать и не отпускать кнопку, то в мониторе порта появится соответствующая надпись.
Если все решат читерить, то придется перезапустить ардуино ресетом. При наличии большого желания такое развитие событий тоже можно предусмотреть в коде.
Если нажать и отпустить кнопку пока светодиод не горит, то такое событие программа не заметит. Если бороться с читерством, то оценку таких действий также следует предусмотреть в программе.

Комментариев нет:
Отправить комментарий