Устройство описываемое в этой статье является модификацией ранее представленного. Почитать про первую версию можно на 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 // ////////////////////////
При подаче питания загорается светодиод. Нажатие на любую кнопку гасит светодиод. При этом происходит инициализация генератора псевдослучайных чисел. Теперь, как только светодиод вспыхнет, нужно быстро нажимать кнопки.
Результаты можно посмотреть в мониторе порта ардуино.
В программе частично реализована борьба с читерством. Если нажать и не отпускать кнопку, то в мониторе порта появится соответствующая надпись.
Если все решат читерить, то придется перезапустить ардуино ресетом. При наличии большого желания такое развитие событий тоже можно предусмотреть в коде.
Если нажать и отпустить кнопку пока светодиод не горит, то такое событие программа не заметит. Если бороться с читерством, то оценку таких действий также следует предусмотреть в программе.
Комментариев нет:
Отправить комментарий