Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Игра Arduino Pong на матрице 24x16 с MAX7219

Компоненты и расходные материалы

Arduino Nano R3
× 1
Светодиодный модуль martrix 8x8 с MAX7219
× 6
Поворотный потенциометр (общий)
× 2
Зуммер
× 1

Необходимые инструменты и машины

Паяльник (общий)

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Я построил эту маленькую консоль для понга на массиве из 6 штук. Светодиодные матрицы 8x8 согласно инструкциям и коду:https://www.instructables.com/id/Pong/

Вместо заказных матричных плат купил дешевые готовые модули 8х8 с MAX7219 на Алиэкспресс.

Контакты «часы» и «нагрузка» на каждой плате соединяются вместе. Вывод «Din» от первой матрицы идет к Arduino, а «Dout» к «Din» следующей матрицы и т. Д. Управляющие лопасти - это два потенциометра 10k, подключенные к аналоговым выводам A0 и A1 Arduino, а зуммер подключается к выводу D9. P>

В итоге я поместил устройство в пластиковый ящик, а контроллеры в ящики для электромонтажа.

Вы можете скачать библиотеку LedControl здесь:

https://github.com/wayoda/LedControl

Код

  • код
код Arduino
 // Мы всегда должны включать библиотеку #include "LedControl.h" byte rightscore; байт leftscore; int toneloop =1000; byte pongdisplay [] ={// Используется при запуске для отображения «Pong» B11111111, B00000000, B00001001, B00000000, B00001001, B00000000, B00000110, B00000000, B00000000, B00000000, B00000000, B00000000, B01110000, B00000000, B10001000, B000010000, B00001000 , B00000000, B01110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00001000, B00000000, B00001000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11001111, B000010000, B1000000000 , B11111111, B00000000, B00000000, B00000000, B00000000, B00000000,}; byte zero [] ={// Используется для отображения «0» при отображении счета B00000000, B00000000, B00111100, B01000010, B01000010, B01000010, B00111100, B00000000}; byte one [] ={// Используется для отображения «1» при отображении счета B00000000, B00000000, B10001000, B10000100, B11111110, B10000000, B10000000, B00000000}; byte two [] ={// Используется для отображения '2' при отображении оценки B00000000, B01100010, B01010001, B01010001, B01001001, B01000110, B00000000, B00000000}; byte three [] ={// Используется для отображения ' 3 'для отображения оценки B00000000, B00100110, B01000001, B01001001, B00110110, B00000000, B00000000, B00000000}; четвертый байт [] ={// Используется для отображения «4» при отображении оценки B00000000, B00000000, B00001111, B00001000, B00001000, B11111111, B00000000, B00000000}; пятый байт [] ={// Используется для отображения '5' при отображении счета B00000000, B00000000, B10011110, B10010010, B10010010, B11110010, B00000000, B00000000}; отображение байтов =0; byte displayrow =0; byte displayindex =0; byte displayodds =1; unsigned long time; unsigned long currenttime; / * Теперь нам нужен LedControl для работы. контакт 12 подключен к DataIn контакт 11 подключен к CLK контакт 10 подключен к LOAD У нас 6 MAX72XX. * / байтовый режим; отклонение байта; перенос байта; строка int; LedControl lc =LedControl (12,11,10,6); long randnumber; byte dir; int startpos; byte row; byte column; long randNumber; byte start; byte diry; int pass; byte limit; #define leftpaddle 0 // левая ручка pong подключена к аналоговому входу 0 # define rightpaddle 1 // правая ручка pong подключена к аналоговому входу 1int directionpong; int rightpongval; int leftpongval; byte blinkx; byte pong [] ={// Сохраняет положение мяча и ракеток B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000 , B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000 , B00000000, B00000000, B00000000, B00000000, B00000000}; void setup () {pinMode (leftpaddle, ВВОД); // ракетка - это вход. pinMode (правый манипулятор, ВХОД); // ракетка - это вход. Serial.begin (9600); // последовательная связь для отладки. Установить на 9600 бод // Эти состояния, приведенные ниже, проходят и настраивают матрицы на заданные параметры lc.shutdown (0, false); lc.setIntensity (0,1); lc.clearDisplay (0); lc.shutdown (1, ложь); lc.setIntensity (1,1); lc.clearDisplay (1); lc.shutdown (2, ложь); lc.setIntensity (2,1); lc.clearDisplay (2); lc.shutdown (3, ложь); lc.setIntensity (3,1); lc.clearDisplay (3); lc.shutdown (4, ложь); lc.setIntensity (4,1); lc.clearDisplay (4); lc.shutdown (5, ложь); lc.setIntensity (5,1); lc.clearDisplay (5); while (displayevens <5) {while (displayrow <=7) {lc.setRow (displayevens, displayrow, pongdisplay [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; displayevens + =2; } displayrow =0; displayindex =1; randomSeed (analogRead (4)); start =1; время =миллис (); текущее время =миллис (); в то время как (текущее время <3000) {leftpongval =analogRead (leftpaddle); leftpongval =карта (leftpongval, 1023,20,2,0); если (leftpongval ==0) {lc.setLed (3,2,7, истина); lc.setLed (3,3,7, ложь); lc.setLed (3,4,7, ложь); mode =1; limit =2; } если (leftpongval ==1) {lc.setLed (3,2,7, истина); lc.setLed (3,3,7, правда); lc.setLed (3,4,7, ложь); mode =2; limit =1; } если (leftpongval ==2) {lc.setLed (3,2,7, истина); lc.setLed (3,3,7, правда); lc.setLed (3,4,7, правда); mode =3; limit =2; } задержка (50); lc.clearDisplay (3); текущее время =миллис (); }} void loop () {весла (); pongsim (); экран монитора(); } void paddles () {// считывает данные с ракеток и отображает их в массиве int searchbit; int carry =0; // Serial.print ("LeftPaddle:"); // Serial.println (analogRead (leftpaddle)); leftpongval =analogRead (leftpaddle); leftpongval =карта (leftpongval, 0,1010,0,13); rightpongval =analogRead (правый манипулятор); rightpongval =карта (rightpongval, 1023,20,0,13); // Serial.print ("RightPaddle:"); // Serial.println (rightpongval); // очищает предыдущую ракетку, чтобы отобразить следующий понг [0] =B00000000; понг [1] =B00000000; понг [46] =B00000000; понг [47] =B00000000; // ------------------------------- правая ракетка if (mode! =3) {if (rightpongval <=7) {rightpongval =карта (rightpongval, 0,7,7,0); bitSet (pong [46], rightpongval); если (rightpongval-1> =0) {bitSet (pong [46], rightpongval-1); } еще {bitSet (понг [47], 7); если (режим! =2) {bitSet (понг [47], 6); carry =1; }} если (режим! =2) {если (перенос ==0) {если (rightpongval-2> =0) {bitSet (понг [46], rightpongval-2); } еще {bitSet (понг [47], 7); carry =1; }}}} если (rightpongval> 7) {rightpongval =map (rightpongval, 8,13,7, предел); bitSet (pong [47], rightpongval); bitSet (pong [47], rightpongval-1); если (режим! =2) {bitSet (понг [47], rightpongval-2); }}} еще {понг [46] =B11111111; понг [47] =B11111111; lc.setRow (4,7, pong [46]); lc.setRow (5,7, pong [47]); } // ---------------------------------- перенос левого весла =0; если (leftpongval <=7) {leftpongval =map (leftpongval, 0,7,7,0); bitSet (pong [0], leftpongval); если (leftpongval-1> =0) {bitSet (pong [0], leftpongval-1); } еще {bitSet (понг [1], 7); если (режим! =2) {bitSet (понг [1], 6); carry =1; }} если (режим! =2) {если (переносить ==0) {если (leftpongval-2> =0) {bitSet (понг [0], leftpongval-2); } еще {bitSet (понг [1], 7); }}}} если (leftpongval> 7) {leftpongval =map (leftpongval, 8,13,7, предел); bitSet (pong [1], leftpongval); bitSet (pong [1], leftpongval-1); если (режим! =2) {bitSet (понг [1], leftpongval-2); }}} void pongsim () {if (((line ==2 || line ==3) &&diry ==0) || ((line ==44 || line ==45) &&diry ==1) ) {ball_meets_paddle (); } if (start ==1) {// Запуск новой игры randnumber =random (1,7); // Предлагаем случайный начальный бит dir =random (2); // Предлагаем случайное начало движения слева направо или справа налево diry =random (2); // Придумайте случайное начальное направление движения по y if (diry ==0) {// Если направление y равно 0. Движение снизу вверх line =random (30,34); // Предлагаем случайную начальную строку между 30-34 bitSet (pong [line], randnumber); // Устанавливаем бит в случайной строке и случайный бит равным 1 в массиве pong} if (diry ==1) {// Если направление y равно 1. Движение сверху вниз по строке =random (12,16); // Предлагаем случайную начальную строку между 12-16 bitSet (pong [line], randnumber); // Устанавливаем бит в случайной строке и случайный бит равным 1 в массиве pong} start =0; // Устанавливаем начальную переменную назад равной 0} if (diry ==0) {// Если мяч движется снизу вверх if (dir ==0) {// Если мяч движется справа налево if (deflect ==0 &&carry ==0) {// Если мяч не отклоняется и не переносится на другую матрицу line- =2; // Продвигайте мяч к другой стороне, вычитая 2 из строки pong [line] =pong [line + 2] <<1; // Сдвиньте мяч влево и установите его равным новой строке pong [line + 2] =B00000000; // Очистить старую строку мяча} if (carry ==1) {// Если мяч должен перейти в новую матрицу line- =3; // Продвигайте мяч к другой стороне, вычитая 3 из линии pong [line] =B00000001; // Устанавливаем новую строку pong [line + 3] =B00000000; // Очистить старую строку от шарика carry =0; // Устанавливаем переменную переноса обратно в 0 return; // На этом мы закончили} if (deflect ==1) {// Если мяч должен отклониться от стены line- =2; // Продвигайте мяч к другой стороне, вычитая 2 из линии pong [line] =B01000000; // Устанавливаем новую строку pong [line + 2] =B00000000; // Очистить старую линию мяча deflect =0; // Устанавливаем переменную отклонения обратно в 0 dir =1; // Переключение направления слева направо return; // На этом мы закончили} if (bitRead (pong [line], 7) ==1) {// Если мяч находится на 7-м бите строки if (line ==3 || line ==5 || line ==7 || line ==9 || line ==11 || line ==13 || line ==15 || // Если строка нечетная строка line ==17 || line ==19 | | line ==21 || line ==23 || line ==25 || line ==27 || line ==29 || line ==31 || line ==33 || line ==35 || line ==37 || строка ==39 || строка ==41 || строка ==43 || строка ==45) {перенос =1; // Мяч нужно перенести в другую матрицу return; // Здесь мы закончили} else {// Иначе мяч находится на четной линии if (line! =2) {// На линии не может быть 2, потому что мяч встречается с ракеткой в ​​точке 2 deflect =1; // Мяч должен отклониться от стены return; // На этом мы закончили}}}} // Комментарии выше должны объяснить все, что ниже. Какие-то вещи, разные параметры. if (dir ==1) {if (deflect ==0 &&carry ==0) {line- =2; понг [строка] =понг [строка + 2]>> 1; понг [строка + 2] =B00000000; } если (перенос ==1) {строка--; pong [строка] =B10000000; понг [строка + 1] =B00000000; перенос =0; возвращение; } если (отклонить ==1) {линия- =2; понг [строка] =B00000010; понг [строка + 2] =B0000000; отклонить =0; dir =0; возвращение; } if (bitRead (pong [line], 0) ==1) {if (line ==2 || line ==4 || line ==6 || line ==8 || line ==10 || line ==12 || строка ==14 || строка ==16 || строка ==18 || строка ==20 || строка ==22 || строка ==24 || строка ==26 || строка ==28 || строка ==30 || строка ==32 || строка ==34 || строка ==36 || строка ==38 || строка ==40 || строка ==42 || строка ==44) {перенос =1; возвращение; } else {если (строка! =3) {отклонить =1; возвращение; }}}}} // ------------------------------------------- -diry =1 ниже if (diry ==1) {if (dir ==0) {if (deflect ==0 &&carry ==0) {line + =2; понг [строка] =понг [строка-2] <<1; понг [строка-2] =B00000000; } если (перенос ==1) {строка + =1; понг [строка] =B00000001; понг [line-1] =B00000000; перенос =0; возвращение; } если (отклонить ==1) {линия + =2; понг [строка] =B01000000; понг [строка-2] =B00000000; отклонить =0; dir =1; возвращение; } if (bitRead (pong [строка], 7) ==1) {if (line ==5 || line ==7 || line ==9 || line ==11 || line ==13 || line ==15 || строка ==17 || строка ==19 || строка ==21 || строка ==23 || строка ==25 || строка ==27 || строка ==29 || строка ==31 || строка ==33 || строка ==35 || строка ==37 || строка ==39 || строка ==41 || строка ==43 || строка ==45) {перенос =1; возвращение; } else {если (строка! =44) {отклонить =1; возвращение; }}}} if (dir ==1) {if (deflect ==0 &&carry ==0) {line + =2; понг [строка] =понг [строка-2]>> 1; понг [строка-2] =B00000000; } если (перенос ==1) {строка + =3; pong [строка] =B10000000; понг [строка-3] =B00000000; перенос =0; возвращение; } если (отклонить ==1) {линия + =2; понг [строка] =B00000010; понг [line-2] =B0000000; отклонить =0; dir =0; возвращение; } if (bitRead (pong [line], 0) ==1) {if (line ==2 || line ==4 || line ==6 || line ==8 || line ==10 || line ==12 || строка ==14 || строка ==16 || строка ==18 || строка ==20 || строка ==22 || строка ==24 || строка ==26 || строка ==28 || строка ==30 || строка ==32 || строка ==34 || строка ==36 || строка ==38 || строка ==40 || строка ==42 || строка ==44) {перенос =1; возвращение; } else {если (строка! =45) {отклонить =1; возвращение; }}}}}} void DisplayScreen () {displayevens =0; displayrow =0; displayindex =0; displayodds =1; while (displayevens <5) {while (displayrow <=7) {lc.setRow (displayevens, displayrow, pong [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; displayevens + =2; } displayrow =0; displayindex =1; while (displayodds <6) {while (displayrow <8) {lc.setRow (displayodds, displayrow, pong [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; displayodds + =2; }} void clearscreen () {int clearing =0; while (клиринг <49) {pong [клиринг] =B00000000; клиринг ++; }} void ball_meets_paddle () {поиск байта1 =0; if (diry ==0) {// мяч движется вверх if (dir ==0) {// мяч движется справа налево while (search1 <8) {// находим бит, на котором находится мяч if (bitRead (pong [line], search1) ==1) {// нашел бит, на котором находится мяч if (line ==2) {if (search1! =6 &&search1! =7) {// если он в строке 2, делаем убедитесь, что его нет в этих специальных битах if (bitRead (pong [0], search1) ==1) {// проверяем, есть ли там ракетка diry =1; // переключаем направление Y, чтобы он был направлен к другому тона весла (9,500,100); } else if (bitRead (pong [0], search1 + 1) ==1) {diry =1; dir =1; тон (9,500,100); если (поиск1 ==0) {перенос =1; }} else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }} if (search1 ==6) {// специальный бит, необходимо отклонить тот же путь, по которому он приходит if (bitRead (pong [0], 7) ==1) {// там есть ракетка pong [2] =B01000000; dir =1; diry =1; тон (9,500,100); } else {// пропустил, нет весла. тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }} if (search1 ==7) {// специальный бит, сначала нужно отскочить от стены if (bitRead (pong [0], 6) ==1) {// найти ракетку [2] =B00100000; diry =1; dir =1; строка =2; тон (9,500,100); экран монитора(); } else {// пропустил, нет весла. тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }}} if (line ==3) {if (search1! =7) {// если он в строке 3, убедитесь, что его нет в этих специальных битах if (bitRead (pong [1], search1) ==1) {// проверяем, есть ли там весло diry =1; // переключаем направление Y, чтобы он был направлен к другому тона весла (9,500,100); } else if (bitRead (pong [1], search1 + 1) ==1) {diry =1; dir =1; тон (9,500,100); } else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }} if (search1 ==7) {// специальный бит, необходимо перенести в следующую матрицу if (bitRead (pong [1], 7) ==1) {// нашел ракетку там // pong [2] =B10000000; // очищаем строку, в которой она была dir =0; // направление то же diry =1; // направление y меняет тон (9,500,100); } иначе, если (bitRead (pong [0], 0) ==1) {dir =1; diry =1; тон (9,500,100); перенос =0; } else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }}}} search1 ++; }} if (dir ==1) {// мяч движется слева направо while (search1 <8) {// находим бит, на котором находится мяч if (bitRead (pong [line], search1) ==1) {// нашел бит, на котором находится мяч if (line ==3) {if (search1! =1 &&search1! =0) {// если он находится в строке 3, убедитесь, что он не в специальном бите if ( bitRead (pong [1], search1) ==1) {// проверяем, есть ли ракетка diry =1; // переключаем направление y, чтобы шар устремился к другому веслу (9,500,100); } else if (bitRead (pong [1], search1-1) ==1) {diry =1; dir =0; тон (9,500,100); если (поиск1 ==7) {перенос =1; }} else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }} if (search1 ==1) {if (bitRead (pong [1], 0) ==1) {pong [3] =B00000010; dir =0; diry =1; тон (9,500,100); } else {тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }} if (search1 ==0) {if (bitRead (pong [1], 0) ==1) {pong [3] =B00000100; diry =1; dir =0; строка =3; тон (9,500,100); экран монитора(); } else {тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }}} if (line ==2) {if (search1! =0) {if (bitRead (pong [0], search1) ==1) {// проверяем, есть ли ракетка diry =1; // переключаем направление y, чтобы шар устремился к другому веслу (9,500,100); } else if (bitRead (pong [0], search1-1) ==1) {diry =1; dir =0; тон (9,500,100); } else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }} if (search1 ==0) {if (bitRead (pong [0], 0) ==1) {// pong [2] =B00000001; строка =2; dir =1; diry =1; тон (9,500,100); возвращение; } иначе, если (bitRead (pong [1], 7) ==1) {diry =1; dir =0; тон (9,500,100); перенос =0; } else {тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreleft (); }}}} search1 ++; }}} // --------------------------------------------- ------------------------- if (diry ==1) {// мяч движется вверх if (dir ==0) {// мяч движется справа налево while (search1 <8) {// находим бит, на котором находится мяч if (bitRead (pong [line], search1) ==1) {// нашел бит, на котором находится мяч if (line ==44) {if (search1! =6 &&search1! =7) {// если он в строке 2, убедитесь, что его нет в этих специальных битах if (bitRead (pong [46], search1) ==1) {// проверьте, есть ли там весло diry =0; // переключаем направление Y, чтобы он был направлен к другому тона весла (9,500,100); } else if (bitRead (pong [46], search1 + 1) ==1) {diry =0; dir =1; тон (9,500,100); если (поиск1 ==0) {перенос =1; }} else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }} if (search1 ==6) {// специальный бит, необходимо отклонить тот же путь, по которому он приходит if (bitRead (pong [46], 7) ==1) {// там ракетка dir =1; diry =0; тон (9,500,100); } else {// пропустил, нет весла. тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }} if (search1 ==7) {// специальный бит, сначала нужно отскочить от стены if (bitRead (pong [46], 6) ==1) {// найти ракетку [44] =B00100000; diry =0; dir =1; тон (9,500,100); экран монитора(); line =44; возвращение; }}} if (line ==45) {if (search1! =7) {// если он в строке 3, убедитесь, что его нет в этих специальных битах if (bitRead (pong [47], search1) ==1) {// проверяем, есть ли там весло diry =0; // переключаем направление Y, чтобы он был направлен к другому тона весла (9,500,100); } else if (bitRead (pong [47], search1 + 1) ==1) {diry =0; dir =1; тон (9,500,100); } else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }} if (search1 ==7) {// специальный бит, который необходимо перенести в следующую матрицу if (bitRead (pong [47], 7) ==1) {// нашел там ракетку // pong [45] =B10000000; // очищаем строку, в которой она была line =45; dir =0; // направление то же diry =0; // направление y меняет тон (9,500,100); } иначе, если (bitRead (pong [46], 0) ==1) {dir =1; diry =0; тон (9,500,100); перенос =0; } else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }}}} search1 ++; }} if (dir ==1) {// мяч движется слева направо while (search1 <8) {// находим бит, на котором находится мяч if (bitRead (pong [line], search1) ==1) {// нашел бит, на котором находится мяч if (line ==45) {if (search1! =1 &&search1! =0) {// если он находится в строке 3, убедитесь, что он не в специальном бите if ( bitRead (pong [47], search1) ==1) {// проверяем, есть ли ракетка diry =0; // переключаем направление y, чтобы шар устремился к другому веслу (9,500,100); } else if (bitRead (pong [47], search1-1) ==1) {diry =0; dir =0; тон (9,500,100); если (поиск1 ==7) {перенос =1; }} else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }} if (search1 ==1) {if (bitRead (pong [47], 0) ==1) {pong [43] =B00000010; dir =0; diry =0; тон (9,500,100); } else {тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }} if (search1 ==0) {if (bitRead (pong [47], 1) ==1) {pong [45] =B00000100; diry =0; dir =0; line =45; тон (9,500,100); экран монитора(); } else {тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }}} if (line ==44) {if (search1! =0) {if (bitRead (pong [46], search1) ==1) {// проверяем, есть ли ракетка diry =0; // переключаем направление y, чтобы шар устремился к другому веслу (9,500,100); } else if (bitRead (pong [46], search1-1) ==1) {diry =0; dir =0; тон (9,500,100); } else {// нет весла, пропустил звук мяча (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }} if (search1 ==0) {if (bitRead (pong [46], 0) ==1) {pong [44] =B00000001; line =44; dir =1; diry =0; тон (9,500,100); } иначе, если (bitRead (pong [47], 7) ==1) {dir =0; diry =0; тон (9,500,100); перенос =0; } else {тон (9 500 300); очисти экран(); start =1; задержка (1000); Scoreright (); }}}} search1 ++; }}} проход =1; search1 =0;} void scoreleft () {clearscreen (); rightcore ++; setscore (); экран монитора(); если (rightcore ==5) {в то время как (blinkx ++ <4) {clearscreen (); экран монитора(); задержка (500); setscore (); экран монитора(); задержка (500); } blinkx =0; rightcore =0; leftscore =0; } else {задержка (2000); } clearscreen ();} недействительный счет () {clearscreen (); leftscore ++; setscore (); экран монитора(); если (leftscore ==5) {в то время как (blinkx ++ <4) {clearscreen (); экран монитора(); задержка (500); setscore (); экран монитора(); задержка (500); } blinkx =0; rightcore =0; leftscore =0; } else {задержка (2000); } clearscreen ();} недействительным setscore () {byte setScoreLoop =0; в то время как (setScoreLoop <=7) {если (leftscore ==0) {понг [setScoreLoop * 2] =ноль [setScoreLoop]; } если (leftscore ==1) {понг [setScoreLoop * 2] =один [setScoreLoop]; } если (leftscore ==2) {понг [setScoreLoop * 2] =два [setScoreLoop]; } если (leftscore ==3) {понг [setScoreLoop * 2] =три [setScoreLoop]; } если (leftscore ==4) {понг [setScoreLoop * 2] =четыре [setScoreLoop]; } если (leftscore ==5) {понг [setScoreLoop * 2] =пять [setScoreLoop]; } если (rightcore ==0) {понг [32+ (setScoreLoop * 2)] =ноль [setScoreLoop]; } если (rightcore ==1) {понг [32+ (setScoreLoop * 2)] =один [setScoreLoop]; } если (rightcore ==2) {понг [32+ (setScoreLoop * 2)] =два [setScoreLoop]; } если (rightcore ==3) {понг [32+ (setScoreLoop * 2)] =три [setScoreLoop]; } если (rightcore ==4) {понг [32+ (setScoreLoop * 2)] =четыре [setScoreLoop]; } если (rightcore ==5) {понг [32+ (setScoreLoop * 2)] =пять [setScoreLoop]; } setScoreLoop ++; } понг [20] =B00011000; понг [22] =B00011000; понг [24] =B00011000; } 

Схема


Производственный процесс

  1. Игра с гироскопом Arduino с MPU-6050
  2. Игра Arduino Pong - OLED-дисплей
  3. Игровой контроллер Arduino
  4. Управление монетоприемником с помощью Arduino
  5. Игра Arduino Pong на матрице 24x16 с MAX7219
  6. Игра Arduino Nano Tetris на самодельной матрице 16x8
  7. Arduino с Bluetooth для управления светодиодом!
  8. Игра Pixel Chaser
  9. Управление светодиодной матрицей с помощью Arduino Uno
  10. NeoMatrix Arduino Pong