井字游戏名片
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
| ||||
| ||||
| ||||
|
应用和在线服务
|
关于这个项目
你好
在本教程中,我将向您展示如何制作名片/名片。不仅仅是一张名片。这是一个PCB 但就像普通的名片一样。您可以看到爱迪生科学角的名称、徽标、社交媒体图标和二维码。二维码会将您引导至我的 YouTube 频道。但在另一边,你可以看到一个电路。这是一个井字游戏 游戏电路。井字游戏是一个两人游戏。也称为 X O 游戏 .两名玩家轮流用 X 或 O 在一个三乘三的网格中标记空间。成功将三个标记放置在水平、垂直或对角线上的玩家是赢家。大部分时间游戏都会平局。这里我用颜色替换了X和O,也把传统的3*3换成了4*4。所以一共16个led,16个开关,每个开关代表对应的led。玩家 1 为绿色,玩家 2 为红色。就是这样,我想你明白了。
现在让我们看看如何制作这个。
第 1 步:PCB 的设计和印刷
这是我使用 easyeda 设计的游戏电路 .我在这里使用 atmega328 作为这个项目的核心。然后我将电路转换成PCB。我设计的PCB尺寸为89mm*50mm,因为这是名片的标准尺寸。我使用easyeda的插入图像工具进行设计。这只是关于您可以用您的想法创作的艺术。设计好 PCB 后,我下载了 Gerber 文件。然后我去了jlcpcb.com。我选择 JLCPCB 是因为他们只提供 5 块 PCB 的 2 美元。要订购 PCB 只需单击“立即订购”并选择您的 Gerber 文件。上传后,我选择了黑色 0.8mm 厚度并下订单。 2 周后我收到了 PCB。 PCB 的厚度只有 0.8 毫米,但质量如我所料。
第 2 步:所需组件
ATMEGA328P-AU* 1
0805电容22pf*2
0805电容100nF*2
贴片WS2812B-B*16
0805 LED贴片* 2
0805电阻1K*3
0805电阻10K 1
16MHZ*1
微型USB母头*1
从这里下载 BOM
第 3 步:焊接
抓住所有组件后,我开始焊接
我从微型 USB 端口开始。然后我焊接了所有其他组件。焊接控制电路后,我开始焊接新像素 LED,完成后焊接相应的开关。 1 小时后,我完成了所有焊接,现在我们的 PCB 看起来像这样。
第 4 步:编程
完成焊接后,我连接了 USB 电缆并进行了测试。现在是上传代码的时候了。我将 spi 引脚连接到 isp Arduino 并上传了草图
从这里下载代码
第 5 步:玩耍和享受
这就是我用 4*4 tic tac toe 游戏 PCB 制作名片的方法。您可以从链接下载电路、代码、gerbers。希望您喜欢并从我的教程中学到了一些东西。
代码
- 代码
代码C/C++
//爱迪生科学角#include#include #define LED_PIN 5#define NUM_LEDS 16#define LED_TYPE WS2812B#define COLOR_ORDER GBR#define BRIGHTNESS 30CRGB leds[NUM_LEDS];int player=1;int n,i,e=0,j=0;char a[16]={'1','2','3','4','5','6','7', '8','9','10','11','12','13','14','15','16'};char key;int w=0;const byte ROWS =4; //四行常量字节 COLS =4; //四列//定义键盘按钮上的镲字char hexaKeys[ROWS][COLS] ={ {'1','2','3','A'}, {'4','5' ,'6','B'}, {'7','8','9','C'}, {'*','0','#','D'}};byte rowPins[行] ={A0,A1,A2,A3}; //连接到keypadbyte的行引脚 colPins[COLS] ={A4,A5,2,3}; //连接到keypadKeypad的列管脚customKeypad =Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); LEDS.addLeds (leds, NUM_LEDS); FastLED.setBrightness(BRIGHTNESS); for(int m=0;m<3;m++) { leds[0].setRGB(0, 255, 0); leds[1].setRGB(0, 255, 0); leds[2].setRGB(0, 255, 0); leds[3].setRGB(0, 255, 0); leds[4].setRGB(0, 255, 0); leds[5].setRGB(0, 255, 0); leds[6].setRGB(0, 255,0); leds[7].setRGB(0, 255, 0); leds[8].setRGB(0, 255, 0); leds[9].setRGB(0, 255, 0); leds[10].setRGB(0, 255, 0); leds[11].setRGB(0, 255, 0); leds[12].setRGB(0, 255, 0); leds[13].setRGB(0, 255, 0); leds[14].setRGB(0, 255, 0); leds[15].setRGB(0, 255, 0); FastLED.show();延迟(500); leds[0].setRGB(0, 0, 225); leds[1].setRGB(0, 0, 225); leds[2].setRGB(0, 0, 225); leds[3].setRGB(0, 0, 225); leds[4].setRGB(0, 0, 225); leds[5].setRGB(0, 0, 225); leds[6].setRGB(0, 0, 225); leds[7].setRGB(0, 0, 225); leds[8].setRGB(0, 0, 225); leds[9].setRGB(0, 0, 225); leds[10].setRGB(0, 0, 225); leds[11].setRGB(0, 0, 225); leds[12].setRGB(0, 0, 225); leds[13].setRGB(0, 0, 225); leds[14].setRGB(0, 0, 225); leds[15].setRGB(0, 0, 225); FastLED.show();延迟(500); FastLED.clear(); FastLED.show();} void loop(){ key =customKeypad.getKey(); if (key &&player==1) { Serial.println("\nP1"); Serial.println(key); n=数字(键); Serial.println(n); leds[n].setRGB(0, 255, 0); FastLED.show(); a[n]='X'; Serial.println(a[n]); w=check(a,n); if(w==1) { Serial.println("玩家 1 获胜!"); while(1) { leds[0].setRGB(0, 255, 0); leds[1].setRGB(0, 255, 0); leds[2].setRGB(0, 255, 0); leds[3].setRGB(0, 255, 0); leds[4].setRGB(0, 255, 0); leds[5].setRGB(0, 255, 0); leds[6].setRGB(0, 255,0); leds[7].setRGB(0, 255, 0); leds[8].setRGB(0, 255, 0); leds[9].setRGB(0, 255, 0); leds[10].setRGB(0, 255, 0); leds[11].setRGB(0, 255, 0); leds[12].setRGB(0, 255, 0); leds[13].setRGB(0, 255, 0); leds[14].setRGB(0, 255, 0); leds[15].setRGB(0, 255, 0); FastLED.show();延迟(500); FastLED.clear(); FastLED.show();延迟(500);播放器++;延迟(1000); } 延迟(20); key =customKeypad.getKey(); if (key &&player==2) { Serial.println("\nP2"); Serial.println(key); n=数字(键); Serial.println(n); leds[n].setRGB(0, 0, 225); FastLED.show(); [n]='0'; Serial.println(a[n]); w=check(a,n); if(w==2) { Serial.println("玩家 2 获胜!"); while(1) { leds[0].setRGB(0, 0, 225); leds[1].setRGB(0, 0, 225); leds[2].setRGB(0, 0, 225); leds[3].setRGB(0, 0, 225); leds[4].setRGB(0, 0, 225); leds[5].setRGB(0, 0, 225); leds[6].setRGB(0, 0, 225); leds[7].setRGB(0, 0, 225); leds[8].setRGB(0, 0, 225); leds[9].setRGB(0, 0, 225); leds[10].setRGB(0, 0, 225); leds[11].setRGB(0, 0, 225); leds[12].setRGB(0, 0, 225); leds[13].setRGB(0, 0, 225); leds[14].setRGB(0, 0, 225); leds[15].setRGB(0, 0, 225); FastLED.show();延迟(500); FastLED.clear(); FastLED.show();延迟(500); } } e++;球员--;延迟(1000); } if(e==8) { Serial.println("游戏抽奖"); while(1) { leds[0].setRGB(255, 0, 0); leds[1].setRGB(255, 0, 0); leds[2].setRGB(255, 0, 0); leds[3].setRGB(255, 0, 0); leds[4].setRGB(255, 0, 0); leds[5].setRGB(255, 0, 0); leds[6].setRGB(255, 0, 0); leds[7].setRGB(255, 0, 0); leds[8].setRGB(255, 0, 0); leds[9].setRGB(255, 0, 0); leds[10].setRGB(255, 0, 0); leds[11].setRGB(255, 0, 0); leds[12].setRGB(255, 0, 0); leds[13].setRGB(255, 0, 0); leds[14].setRGB(255, 0, 0); leds[15].setRGB(255, 0, 0); FastLED.show();延迟(1000); FastLED.clear(); FastLED.show();延迟(500); } } delay(20);}int number(char keyn){ if(keyn =='1') return 0; if(keyn =='2') 返回 1; if(keyn =='3') 返回 2; if(key =='A') 返回 3; if(keyn =='4') 返回 4; if(keyn =='5') 返回 5; if(keyn =='6') 返回 6; if(keyn =='B') 返回 7; if(keyn =='7') 返回 8; if(keyn =='8') 返回 9; if(keyn =='9') 返回 10; if(keyn =='C') 返回 11; if(key =='*') 返回 12; if(keyn =='0') 返回 13; if(keyn =='#') 返回 14; if(keyn =='D') return 15;}int check(char a[16],int n){ if(a[0]=='X' &&a[1]=='X' &&a[ 2]=='X' &&a[3]=='X') 返回 1; if(a[0]=='0' &&a[1]=='0' &&a[2]=='0' &&a[3]=='0') return 2; if(a[0]=='X' &&a[4]=='X' &&a[8]=='X' &&a[12]=='X') return 1; if(a[0]=='0' &&a[4]=='0' &&a[8]=='0' &&a[12]=='0') return 2; if(a[0]=='X' &&a[5]=='X' &&a[10]=='X' &&a[15]=='X') return 1; if(a[0]=='0' &&a[5]=='0' &&a[10]=='0' &&a[15]=='0') return 2; if(a[1]=='X' &&a[5]=='X' &&a[9]=='X' &&a[13]=='X') return 1; if(a[1]=='0' &&a[5]=='0' &&a[9]=='0' &&a[13]=='0') return 2; if(a[2]=='X' &&a[6]=='X' &&a[10]=='X' &&a[14]=='X') return 1; if(a[2]=='0' &&a[6]=='0' &&a[10]=='0' &&a[14]=='0') return 2; if(a[3]=='X' &&a[7]=='X' &&a[11]=='X' &&a[15]=='X') return 1; if(a[3]=='0' &&a[7]=='0' &&a[11]=='0' &&a[15]=='0') return 2; if(a[3]=='X' &&a[6]=='X' &&a[9]=='X' &&a[12]=='X') return 1; if(a[3]=='0' &&a[6]=='0' &&a[9]=='0' &&a[12]=='0') return 2; if(a[4]=='X' &&a[5]=='X' &&a[6]=='X' &&a[7]=='X') return 1; if(a[4]=='0' &&a[5]=='0' &&a[6]=='0' &&a[7]=='0') return 2; if(a[8]=='X' &&a[9]=='X' &&a[10]=='X' &&a[11]=='X') return 1; if(a[8]=='0' &&a[9]=='0' &&a[10]=='0' &&a[11]=='0') return 2; if(a[12]=='X' &&a[13]=='X' &&a[14]=='X' &&a[15]=='X') return 1; if(a[12]=='0' &&a[13]=='0' &&a[14]=='0' &&a[15]=='0') return 2;}
示意图
制造工艺