제조공정
| × | 1 | ||||
| × | 6 | ||||
| × | 2 | ||||
| × | 1 |
|
|
나는 6개의 배열에 이 작은 탁구 콘솔을 만들었습니다. 지침 및 코드에 따른 8x8 LED 매트릭스:https://www.instructables.com/id/Pong/
맞춤형 매트릭스 보드 대신 알리익스프레스에서 MAX7219가 있는 저렴한 기성품 8x8 모듈을 구입했습니다.
각 보드의 "클럭" 및 "로드" 핀은 모두 함께 연결됩니다. 첫 번째 매트릭스의 "Din"핀은 Arduino로 이동하고 "Dout"은 다음 매트릭스의 "Din"으로 이동합니다. 제어 패들은 Arduino의 A0 및 A1 아날로그 핀에 연결된 두 개의 10k 전위차계이며 부저는 D9 핀에 연결됩니다.피>
결국 나는 플라스틱 상자에 장치를 넣고 전기 설치를 위해 상자에 컨트롤러를 넣습니다.
다음에서 LedControl 라이브러리를 다운로드할 수 있습니다.
https://github.com/wayoda/LedControl
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">//항상 라이브러리를 포함해야 합니다. #include "LedControl.h" byte rightcore; 바이트 왼쪽 점수; 정수 톤 루프 =1000; ={// 디스플레이를 시작할 때에 사용 바이트 pongdisplay [] "퐁"B11111111, B00000000, B00001001, B00000000, B00001001, B00000000, B00000110, B00000000, B00000000, B00000000, B00000000, B00000000, B01110000, B00000000, B10001000, B00000000, B10001000 , B00000000, B01110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00001000, B00000000, B00001000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11001111, B00000000, B10001001, B00000000, B10001001, B00000000 , B11111111, B00000000, B00000000, B00000000, B00000000, B00000000, }; byte zero[]={ // 점수 표시 시 '0' 표시 B00000000, B00000000, B00111100, B01000010, B01000010, B01000010, B00111100, B00000;0 byte one[]={ // 점수 표시 시 '1'로 표시 B00000000, B00000000, B10001000, B10000100, B11111110, B10000000, B10000000, B0000}0 byte two[]={ // 점수 표시 시 '2'로 표시 B00000000, B01100010, B01010001, B01010001, B01001001, B01000110, B00000000, B00000 사용 to' 3' 표시용 B00000000, B00100110, B01000001, B01001001, B00110110, B00000000, B000000000, B00000000, B00000000, B0 B0 B0 0 B0 a0 when10 a0 a0 바이트 4'[]={ B00001000, B00001000, B11111111, B00000000, B00000000} 바이트 displayevens; 바이트 다섯 [] ={//는 '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 line;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 //왼쪽 퐁 노브가 아날로그 입력에 연결됨 0#define rightpaddle 1 // 오른쪽 퐁 노브가 아날로그 입력에 연결됨 1int directionpong;int rightpongval;int leftpongval;byte 깜박임;byte 퐁 [] ={// 저장 공과 패들 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, B000000 00}; 무효 설정(){ pinMode(왼쪽 패들, INPUT); // 패들은 입력입니다. 핀모드(오른쪽 패들, 입력); // 패들은 입력입니다. Serial.begin(9600); // 디버깅을 위한 직렬 통신. 9600 baud로 설정 // 아래의 이러한 상태는 주어진 설정으로 행렬을 설정하고 설정합니다. 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[디스플레이인덱스]); 디스플레이 행 ++; 디스플레이 인덱스+=2; } 디스플레이 행=0; displayevens+=2; } 디스플레이 행=0; 디스플레이 인덱스=1; randomSeed(analogRead(4)); 시작=1; 시간=밀리(); 현재 시간=밀리(); while(현재시간-시간<3000){ leftpongval=analogRead(왼쪽 패들); leftpongval=map(leftpongval,1023,20,2,0); if(leftpongval==0){ lc.setLed(3,2,7,true); lc.setLed(3,3,7,거짓); lc.setLed(3,4,7,거짓); 모드=1; 한계=2; } if(leftpongval==1){ lc.setLed(3,2,7,true); lc.setLed(3,3,7,true); lc.setLed(3,4,7,거짓); 모드=2; 제한=1; } if(leftpongval==2){ lc.setLed(3,2,7,true); lc.setLed(3,3,7,true); lc.setLed(3,4,7,true); 모드=3; 한계=2; } 지연(50); lc.clearDisplay(3); 현재 시간=밀리(); } } 무효 루프(){ 패들(); 퐁심(); 표시 화면(); } void paddles(){ // 패들에서 데이터를 읽고 배열에 표시합니다. int searchbit; 정수 캐리 =0; // Serial.print("왼쪽 패들:"); // Serial.println(analogRead(leftpaddle)); leftpongval=analogRead(왼쪽 패들); leftpongval=map(leftpongval,0,1010,0,13); rightpongval=analogRead(오른쪽 패들); rightpongval=map(rightpongval,1023,20,0,13); // Serial.print("오른쪽 패들:"); // Serial.println(rightpongval); //다음 패들을 표시하기 위해 이전 패들을 삭제합니다. pong[0]=B00000000; 퐁[1]=B00000000; 퐁[46]=B00000000; 퐁[47]=B00000000; //-------------------------------오른쪽 패들 if(mode!=3){ if(rightpongval<=7) { rightpongval=map(rightpongval,0,7,7,0); bitSet(pong[46], rightpongval); if(rightpongval-1>=0){ bitSet(pong[46],rightpongval-1); } else{ bitSet(퐁[47], 7); if(모드!=2){ bitSet(pong[47],6); 캐리=1; } } if(모드!=2){ if(carry==0){ if(rightpongval-2>=0){ bitSet(pong[46], rightpongval-2); } else{ bitSet(퐁[47], 7); 캐리=1; } } } } if(rightpongval>7){ rightpongval=map(rightpongval,8,13,7,limit); bitSet(pong[47], rightpongval); bitSet(pong[47], rightpongval-1); if(모드!=2){ bitSet(pong[47],rightpongval-2); } } } else{ 퐁[46]=B11111111; 퐁[47]=B11111111; lc.setRow(4,7,퐁[46]); lc.setRow(5,7,퐁[47]); } //----------------------------------왼쪽 패들 carry=0; if(leftpongval<=7){ leftpongval=map(leftpongval,0,7,7,0); bitSet(pong[0], leftpongval); if(leftpongval-1>=0){ bitSet(pong[0],leftpongval-1); } else{ bitSet(퐁[1], 7); if(모드!=2){ bitSet(pong[1],6); 캐리=1; } } if(모드!=2){ if(carry==0){ if(leftpongval-2>=0){ bitSet(pong[0], leftpongval-2); } else{ bitSet(퐁[1], 7); } } } } if(leftpongval>7){ leftpongval=map(leftpongval,8,13,7,limit); bitSet(pong[1],leftpongval); bitSet(pong[1],leftpongval-1); if(모드!=2){ bitSet(pong[1],leftpongval-2); } } }pongsim(){ if( ((줄==2 || 줄==3) &&diry ==0) || ((줄==44 || 줄==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); // 임의의 라인에 비트를 설정하고 pong 배열에서 임의의 비트를 1로 설정 } if(diry==1){ // y 방향이 1인 경우. 위에서 아래로 이동=random(12,16); // 12-16 사이의 임의의 시작 라인을 생각해냅니다. bitSet(pong[line],randnumber); // 임의의 라인에 비트를 설정하고 pong 배열에서 임의의 비트를 1로 설정 } 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; // 볼의 이전 라인을 지웁니다. Deflection=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 | | 줄==21 || 줄==23 || 줄==25 || 줄==27 || 줄==29 || 줄==31 || 줄==33 || 줄==35 || 줄 ==37 || 줄==39 || 줄==41 ||줄==43 || 줄==45){ 캐리=1; // 공은 다른 행렬로 넘어갈 필요가 있습니다. return; // 여기서 끝났습니다 } else{ // 그렇지 않으면 공이 짝수 선에 있습니다 if(line!=2){ // 공이 2번 방향에서 패들과 만나기 때문에 선은 2가 될 수 없습니다. // 공은 벽 리턴에서 방향을 바꿔야 합니다. // 여기까지 완료 } } } } // 위의 주석은 아래의 모든 내용을 설명해야 합니다. 일부 항목, 다른 매개변수. if(dir==1){ if(deflect==0 &&carry==0){ line-=2; 퐁[라인]=퐁[라인+2]>> 1; 퐁[line+2]=B00000000; } if(carry==1){ 줄 --; 퐁[line]=B10000000; 퐁[line+1]=B00000000; 캐리=0; 반품; } if(편향==1){ 줄-=2; 퐁[줄]=B00000010; 퐁[line+2]=B0000000; 편향=0; 디렉토리=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{ if(line!=3){ 편향=1; 반품; } } } } }//---------------------------------------------------------- -diry =1 아래 if(diry==1){ if(dir==0){ if(deflect==0 &&carry==0){ line+=2; 퐁[라인]=퐁[라인-2] <<1; 퐁[line-2]=B00000000; } if(carry==1){ line+=1; 퐁[줄]=B00000001; 퐁[line-1]=B00000000; 캐리=0; 반품; } if(편향==1){ 줄+=2; 퐁[줄]=B01000000; 퐁[line-2]=B00000000; 편향=0; 디렉토리=1; 반품; } if(bitRead(pong[line],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{ if(line!=44){ 편향=1; 반품; } } } } if(dir==1){ if(deflect==0 &&carry==0){ line+=2; 퐁[라인]=퐁[라인-2]>> 1; 퐁[line-2]=B00000000; } if(carry==1){ line+=3; 퐁[line]=B10000000; 퐁[line-3]=B00000000; 캐리=0; 반품; } if(편향==1){ 줄+=2; 퐁[줄]=B00000010; 퐁[line-2]=B0000000; 편향=0; 디렉토리=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{ if(line!=45){ 편향=1; 반품; } } } }} 무효 displayscreen(){ displayevens=0; 디스플레이 행=0; 디스플레이 인덱스=0; displayodds=1; while(displayevens<5){ while(displayrow<=7){ lc.setRow(displayevens,displayrow,pong[디스플레이인덱스]); 디스플레이 행 ++; 디스플레이 인덱스+=2; } 디스플레이 행=0; displayevens+=2; } 디스플레이 행=0; 디스플레이 인덱스=1; while(displayodds<6){ while(displayrow<8){ lc.setRow(displayodds,displayrow,pong[디스플레이인덱스]); 디스플레이 행 ++; 디스플레이 인덱스+=2; } 디스플레이 행=0; displayodds+=2; }} 무효 clearscreen(){ int clearing=0; while(clearing<49){ 퐁[clearing]=B00000000; 지우기++; }}무효 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; 디렉토리=1; 톤(9,500,100); if(검색1==0){ 캐리=1; } } else { // 패들 없음, 볼 톤(9,500,300)을 놓쳤습니다. 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } if(search1==6){ //특수 비트, 동일한 경로를 편향해야 함 if(bitRead(pong[0],7)==1){ // 거기에 패들이 있음 pong[2] =B01000000; 디렉토리=1; 건조한 =1; 톤(9,500,100); } else{//그것을 놓쳤습니다. 노가 없습니다. 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } if(search1==7){//특수 비트, 먼저 벽에서 튀어 나와야 함 if(bitRead(pong[0],6)==1){// 패들 pong[2]=B00100000을 찾았습니다. 건조한 =1; 디렉토리=1; 라인=2; 톤(9,500,100); 표시 화면(); } else{//그것을 놓쳤습니다. 노가 없습니다. 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } } 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; 디렉토리=1; 톤(9,500,100); } else { // 노가 없음, 볼 톤을 놓쳤습니다(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } if(search1==7){//특수 비트, 다음 행렬로 이월해야 함 if(bitRead(pong[1],7)==1){ //패들을 찾았습니다 //pong[2] =B10000000; // dir=0에 있던 행을 지웁니다. //방향이 동일함 diry=1; // y 방향은 tone(9,500,100)을 바꿉니다. } else if(bitRead(pong[0],0)==1){ 디렉토리=1; 건조한 =1; 톤(9,500,100); 캐리=0; } else{// 패들 없음, 볼 톤(9,500,300)을 놓쳤습니다. 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } } } 검색1++; } } 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 방향을 전환합니다. tone(9,500,100); } else if(bitRead(pong[1], search1-1)==1){ diry=1; 디렉토리=0; 톤(9,500,100); if(검색1==7){ 캐리=1; } } else{ // 노가 없음, 볼 톤을 놓쳤습니다(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } if(search1==1){ if(bitRead(pong[1],0)==1){ pong[3]=B00000010; 디렉토리=0; 건조한 =1; 톤(9,500,100); } else{ 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } if(검색1==0){ if(bitRead(퐁[1],0)==1){ 퐁[3]=B00000100; 건조한 =1; 디렉토리=0; 라인=3; 톤(9,500,100); 표시 화면(); } else{ 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } } if(line==2){ if( search1!=0){ if(bitRead(pong[0], search1)==1){ //패들이 있는지 확인 diry=1; // 공이 다른 패들 쪽으로 향하도록 y 방향을 전환합니다. tone(9,500,100); } else if(bitRead(pong[0], search1-1)==1){ diry=1; 디렉토리=0; 톤(9,500,100); } else{ // 노가 없음, 볼 톤을 놓쳤습니다(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } if(search1==0){ if(bitRead(pong[0],0)==1){ // pong[2]=B00000001; 라인=2; 디렉토리=1; 건조한 =1; 톤(9,500,100); 반품; } else if(bitRead(pong[1],7)==1){ diry=1; 디렉토리=0; 톤(9,500,100); 캐리=0; } else{ 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 점수 왼쪽(); } } } } 검색1++; } } }//--------------------------------------------- ---------------------- 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; 디렉토리=1; 톤(9,500,100); if(검색1==0){ 캐리=1; } } else { // 패들 없음, 볼 톤(9,500,300)을 놓쳤습니다. 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } if(search1==6){ //특수 비트, 동일한 경로를 우회해야 함 if(bitRead(pong[46],7)==1){ // 거기에 패들이 있습니다 dir=1; 건조한 =0; 톤(9,500,100); } else{//그것을 놓쳤습니다. 노가 없습니다. 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } if(search1==7){//특수 비트, 먼저 벽에서 튀어나와야 함 if(bitRead(pong[46],6)==1){// 패들 pong[44]=B00100000을 찾았습니다. 건조한 =0; 디렉토리=1; 톤(9,500,100); 표시 화면(); 라인=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; 디렉토리=1; 톤(9,500,100); } else { // 노가 없음, 볼 톤을 놓쳤습니다(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } if(search1==7){//특수 비트, 다음 행렬로 이월해야 함 if(bitRead(pong[47],7)==1){ // 패들을 찾았습니다 // pong[45] =B10000000; //줄에 있던 행 지우기=45; 디렉토리=0; //방향이 동일함 diry=0; // y 방향은 tone(9,500,100)을 바꿉니다. } else if(bitRead(pong[46],0)==1){ 디렉토리=1; 건조한 =0; 톤(9,500,100); 캐리=0; } else{// 패들 없음, 볼 톤(9,500,300)을 놓쳤습니다. 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } } } 검색1++; } } 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 방향을 전환합니다. tone(9,500,100); } else if(bitRead(pong[47], search1-1)==1){ diry=0; 디렉토리=0; 톤(9,500,100); if(검색1==7){ 캐리=1; } } else{ // 노가 없음, 볼 톤을 놓쳤습니다(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } if(search1==1){ if(bitRead(pong[47],0)==1){ pong[43]=B00000010; 디렉토리=0; 건조한 =0; 톤(9,500,100); } else{ 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } if(search1==0){ if(bitRead(pong[47],1)==1){ pong[45]=B00000100; 건조한 =0; 디렉토리=0; 라인=45; 톤(9,500,100); 표시 화면(); } else{ 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } } if(line==44){ if( search1!=0){ if(bitRead(pong[46], search1)==1){ //패들이 있는지 확인 diry=0; // 공이 다른 패들 쪽으로 향하도록 y 방향을 전환합니다. tone(9,500,100); } else if(bitRead(pong[46], search1-1)==1){ diry=0; 디렉토리=0; 톤(9,500,100); } else{ // 노가 없음, 볼 톤을 놓쳤습니다(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } if(검색1==0){ if(bitRead(퐁[46],0)==1){ 퐁[44]=B00000001; 라인=44; 디렉토리=1; 건조한 =0; 톤(9,500,100); } else if(bitRead(pong[47],7)==1){ 디렉토리=0; 건조한 =0; 톤(9,500,100); 캐리=0; } else{ 톤(9,500,300); 클리어스크린(); 시작=1; 지연(1000); 득점권(); } } } } 검색1++; } } } 패스=1; search1=0;}void scoreleft(){ clearscreen(); 권리점수++; 세트스코어(); 표시 화면(); if(rightscore==5){ while(blinkx++<4){ clearscreen(); 표시 화면(); 지연(500); 세트스코어(); 표시 화면(); 지연(500); } 깜박임x=0; 권리 점수=0; 왼쪽 점수 =0; } else{ 지연(2000); } clearscreen();} 무효 scoreright(){ clearscreen(); 좌점수++; 세트스코어(); 표시 화면(); if(leftscore==5){ while(blinkx++<4){ clearscreen(); 표시 화면(); 지연(500); 세트스코어(); 표시 화면(); 지연(500); } 깜박임x=0; 권리 점수=0; 왼쪽 점수 =0; } else{ 지연(2000); } clearscreen();}무효 setscore(){ 바이트 setScoreLoop=0; while(setScoreLoop<=7){ if(leftscore==0){ pong[setScoreLoop*2]=zero[setScoreLoop]; } if(leftscore==1){ pong[setScoreLoop*2]=one[setScoreLoop]; } if(leftscore==2){ pong[setScoreLoop*2]=two[setScoreLoop]; } if(leftscore==3){ pong[setScoreLoop*2]=three[setScoreLoop]; } if(leftscore==4){ 퐁[setScoreLoop*2]=four[setScoreLoop]; } if(leftscore==5){ pong[setScoreLoop*2]=five[setScoreLoop]; } if(rightscore==0){ 퐁[32+(setScoreLoop*2)]=zero[setScoreLoop]; } if(rightscore==1){ 퐁[32+(setScoreLoop*2)]=one[setScoreLoop]; } if(rightscore==2){ 퐁[32+(setScoreLoop*2)]=two[setScoreLoop]; } if(rightscore==3){ 퐁[32+(setScoreLoop*2)]=three[setScoreLoop]; } if(rightscore==4){ 퐁[32+(setScoreLoop*2)]=four[setScoreLoop]; } if(rightscore==5){ 퐁[32+(setScoreLoop*2)]=five[setScoreLoop]; } 세트스코어루프++; } 퐁[20]=B00011000; 퐁[22]=B00011000; 퐁[24]=B00011000; }섹션>
제조공정
구성품 및 소모품 Espressif ESP8266 ESP-01 × 1 Arduino UNO × 1 점퍼 와이어(일반) × 7 Android 기기 × 1 Arduino UNO × 1 앱 및 온라인 서비스 텔레그램 봇 API Arduino IDE 이 프로젝트 정보 안녕하세요 코더 여러분, 텔레그램 봇 API와 ESP8266으로 Hackster 경력을 시작하게 된 것은 놀라
구성품 및 소모품 Arduino Nano R3 × 1 LED 매트릭스 × 1 포토 저항기 × 1 브레드보드(일반) × 1 DS3231 × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 몇 미터 떨어진 방의 시계 디스플레이를 읽으려면 이러한 LED 매트릭스 디스플레이가 필요합니다. 좋은 가격에 4셀 디스플레이를 구입한 후 Hackster에서 사용 가능한 프로젝트를