在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何構(gòu)建Arduino供電的迷你復(fù)古游戲機(jī)

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-29 09:01 ? 次閱讀

曾經(jīng)想知道編寫自己的復(fù)古游戲需要多少工作? Pong為Arduino編寫代碼有多容易?和我一起,向我展示如何構(gòu)建Arduino供電的迷你復(fù)古游戲機(jī),以及如何從頭開始編寫Pong。最終結(jié)果如下:

構(gòu)建計(jì)劃

這是一個(gè)相當(dāng)簡單的電路。 電位器(電位器)將控制游戲,而Arduino將會驅(qū)動OLED顯示屏。這將在面包板上生產(chǎn),但是您可能希望將其制成永久性電路并將其安裝在箱子中。之前我們已經(jīng)寫過有關(guān)重新創(chuàng)建Pong的文章,但是今天我將向您展示如何從頭開始編寫代碼,并分解每個(gè)部分。

您需要的內(nèi)容

這是您需要的:

1 x Arduino(任何型號)

1 x 10k電位器

1 x 0.96英寸I2C OLED顯示屏

1 x面包板

各種公頭》公連接線

任何Arduino都應(yīng)該工作,請查看我們的購買指南如果您不確定要購買哪種型號。

這些OLED顯示器非常酷。通常可以購買白色,藍(lán)色,黃色或這三種的混合物。它們確實(shí)是全彩色的,但是它們又增加了該項(xiàng)目的復(fù)雜性和成本。

電路

這是一個(gè)非常簡單的電路。如果您對Arduino沒有太多的經(jīng)驗(yàn),請先查看這些初學(xué)者項(xiàng)目。

在這里是:

在鍋的前面,將左引腳連接到 + 5V ,將右引腳連接到接地。將中間引腳連接到模擬引腳0 (A0)。

使用I2C協(xié)議連接OLED顯示器。將 VCC 和 GND 連接到Arduino + 5V 和接地。將 SCL 連接到模擬五( A5 )。將 SDA 連接到模擬4 ( A4 )。它連接到模擬引腳的原因很簡單。這些引腳包含I2C協(xié)議所需的電路。確保它們正確連接,并且沒有交叉。確切的引腳會因型號而異,但是Nano和Uno會使用A4和A5。如果您未使用Arduino或Nano,請查看模型的Wire庫文檔。

電位器測試

上傳此測試代碼(請確保從中選擇正確的電路板和端口工具》 面板和工具》 端口菜單):

void setup() {

// put your setup code here, to run once:

Serial.begin(9600); // setup serial

}

void loop() {

// put your main code here, to run repeatedly:

Serial.println(analogRead(A0)); // print the value from the pot

delay(500);

}

現(xiàn)在打開串行監(jiān)視器(右上》 串行監(jiān)視器)并轉(zhuǎn)動鍋。您應(yīng)該看到在串行監(jiān)視器上顯示的值。完全逆時(shí)針應(yīng)為零,完全逆時(shí)針應(yīng)為 1023 :

您稍后會對此進(jìn)行調(diào)整,但現(xiàn)在就可以了。如果什么也沒有發(fā)生,或者您不做任何事情就改變了值,請斷開并仔細(xì)檢查電路。

OLED測試

OLED顯示的配置稍微復(fù)雜一些。您需要安裝兩個(gè)庫才能首先驅(qū)動顯示。從Github下載Adafruit_SSD1306和Adafruit-GFX庫。將文件復(fù)制到您的庫文件夾中。這取決于您的操作系統(tǒng)

Mac OS:/用戶/用戶名/Documents/Arduino/libraries

Linux:/home/Username/Sketchbook

Windows:/Users/Arduino/libraries

現(xiàn)在上傳測試草圖。轉(zhuǎn)到文件》 示例》 Adafruit SSD1306 》 ssd1306_128x64_i2c 。這應(yīng)該給您一個(gè)包含大量圖形的大草圖:

如果上傳后沒有任何反應(yīng),請斷開連接并再次檢查您的連接。如果示例不在菜單中,則可能需要重新啟動Arduino IDE。

代碼

現(xiàn)在是時(shí)候編寫代碼了。我將解釋每個(gè)步驟,所以如果您只想使其運(yùn)行,請?zhí)阶詈蟆_@是相當(dāng)數(shù)量的代碼,因此,如果您不確定,請查看以下10個(gè)免費(fèi)資源以學(xué)習(xí)編碼。

首先包括必要的庫:

#include

#include

#include

#include

SPI 和 WIRE 是用于處理I2C通信的兩個(gè)Arduino庫。 Adafruit_GFX 和 Adafruit_SSD1306 是您先前安裝的庫。

下一步,配置顯示:

Adafruit_SSD1306 display(4);

然后設(shè)置運(yùn)行游戲所需的所有變量:

int resolution[2] = {128, 64}, ball[2] = {20, (resolution[1] / 2)};

const int PIXEL_SIZE = 8, WALL_WIDTH = 4, PADDLE_WIDTH = 4, BALL_SIZE = 4, SPEED = 3;

int playerScore = 0, aiScore = 0, playerPos = 0, aiPos = 0;

char ballDirectionHori = ‘R’, ballDirectionVerti = ‘S’;

boolean inProgress = true;

這些變量存儲運(yùn)行游戲所需的所有數(shù)據(jù)。其中一些存儲球的位置,屏幕的大小,球員的位置等。請注意其中的一些是 const 的意思,它們是恒定的,并且永遠(yuǎn)不會改變。

屏幕分辨率和焊球位置存儲在數(shù)組中。數(shù)組是相似事物的集合,對于球,存儲坐標(biāo)( X 和 Y )。訪問數(shù)組中的元素很容易(不要在文件中包含此代碼):

resolution[1];

由于數(shù)組從零開始,因此將返回分辨率數(shù)組中的第二個(gè)元素( 64 )。更新元素甚至更容易(同樣,不包含此代碼):

ball[1] = 15;

在 void setup()內(nèi),配置顯示:/p》 void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.display();

}

第一行告訴Adafruit庫,您的顯示器正在使用什么尺寸和通訊協(xié)議(在這種情況下,為 128 x 64 和 I2C )。第二行( display.display())告訴屏幕顯示緩沖區(qū)中存儲的內(nèi)容(無內(nèi)容)。

創(chuàng)建兩個(gè)名為 drawBall 和 eraseBall :

void drawBall(int x, int y) {

display.drawCircle(x, y, BALL_SIZE, WHITE);

}

void eraseBall(int x, int y) {

display.drawCircle(x, y, BALL_SIZE, BLACK);

}

這些采用 x 和 y 坐標(biāo)并使用顯示庫中的 drawCircle 方法將其繪制在屏幕上。這使用了前面定義的常量 BALL_SIZE 。嘗試更改此設(shè)置,看看會發(fā)生什么。此drawCircle方法接受像素顏色-黑色或白色。因?yàn)檫@是單色顯示(一種顏色),所以白色表示像素處于打開狀態(tài),黑色表示像素處于關(guān)閉狀態(tài)。

現(xiàn)在創(chuàng)建一種稱為 moveAi 的方法:

void moveAi() {

eraseAiPaddle(aiPos);

if (ball[1] 》 aiPos) {

++aiPos;

}

else if (ball[1] 《 aiPos) {

--aiPos;

}

drawAiPaddle(aiPos);

}

此方法處理移動人工智能或 AI 播放器。這是一個(gè)非常簡單的計(jì)算機(jī)對手-如果球在槳上方,請向上移動。它在槳下面,向下移動。很簡單,但是效果很好。增量和減量符號( ++ aiPos 和 –aiPos )用于從aiPosition中添加或減去一個(gè)。您可以添加或減去更大的數(shù)字以使AI更快地移動,因此更難以克服。這樣做的方法如下:

aiPos += 2;

并且:

aiPos -= 2;

加號等于和負(fù)號符號是aiPos當(dāng)前值加/減兩個(gè)的簡寫。這是另一種方法:

aiPos = aiPos + 2;

aiPos = aiPos - 1;

注意此方法如何首先擦除槳,并且然后再次繪制。必須這樣做。如果繪制了新的槳葉位置,則屏幕上將有兩個(gè)重疊的槳葉。

drawNet 方法使用兩個(gè)循環(huán)繪制球網(wǎng):

void drawNet() {

for (int i = 0; i 《 (resolution[1] / WALL_WIDTH); ++i) {

drawPixel(((resolution[0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);

}

}

這將使用 WALL_WIDTH 變量來設(shè)置其大小。

創(chuàng)建名為 drawPixels 和的方法擦除像素。就像球形方法一樣,兩者之間的唯一區(qū)別是像素的顏色:

void drawPixel(int posX, int posY, int dimensions) {

for (int x = 0; x 《 dimensions; ++x) {

for (int y = 0; y 《 dimensions; ++y) {

display.drawPixel((posX + x), (posY + y), WHITE);

}

}

}

void erasePixel(int posX, int posY, int dimensions) {

for (int x = 0; x 《 dimensions; ++x) {

for (int y = 0; y 《 dimensions; ++y) {

display.drawPixel((posX + x), (posY + y), BLACK);

}

}

}

再次,這兩種方法都使用兩個(gè) 》循環(huán)繪制一組像素。循環(huán)不必使用庫 drawPixel 方法繪制每個(gè)像素,而是根據(jù)給定的尺寸繪制一組像素。

drawScore 方法使用庫的文本功能將播放器和AI得分寫入屏幕。這些存儲在 playerScore 和 aiScore 中:

void drawScore() {

display.setTextSize(2);

display.setTextColor(WHITE);

display.setCursor(45, 0);

display.println(playerScore);

display.setCursor(75, 0);

display.println(aiScore);

}

此方法還具有 eraseScore 對應(yīng),將像素設(shè)置為黑色或關(guān)閉。

最后四種方法非常相似。他們繪制并擦除了玩家和AI球拍:

void erasePlayerPaddle(int row) {

erasePixel(0, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);

erasePixel(0, row - PADDLE_WIDTH, PADDLE_WIDTH);

erasePixel(0, row, PADDLE_WIDTH);

erasePixel(0, row + PADDLE_WIDTH, PADDLE_WIDTH);

erasePixel(0, row + (PADDLE_WIDTH + 2), PADDLE_WIDTH);

}

注意他們?nèi)绾握{(diào)用之前創(chuàng)建的 erasePixel 方法。這些方法會繪制并擦除適當(dāng)?shù)臉?/p>

主循環(huán)中還有更多邏輯。這是完整的代碼:

#include

#include

#include

#include

Adafruit_SSD1306 display(4);

int resolution[2] = {128, 64}, ball[2] = {20, (resolution[1] / 2)};

const int PIXEL_SIZE = 8, WALL_WIDTH = 4, PADDLE_WIDTH = 4, BALL_SIZE = 4, SPEED = 3;

int playerScore = 0, aiScore = 0, playerPos = 0, aiPos = 0;

char ballDirectionHori = ‘R’, ballDirectionVerti = ‘S’;

boolean inProgress = true;

void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.display();

}

void loop() {

if (aiScore 》 9 || playerScore 》 9) {

// check game state

inProgress = false;

}

if (inProgress) {

eraseScore();

eraseBall(ball[0], ball[1]);

if (ballDirectionVerti == ‘U’) {

// move ball up diagonally

ball[1] = ball[1] - SPEED;

}

if (ballDirectionVerti == ‘D’) {

// move ball down diagonally

ball[1] = ball[1] + SPEED;

}

if (ball[1] 《= 0) { // bounce the ball off the top ballDirectionVerti = ‘D’; } if (ball[1] 》= resolution[1]) {

// bounce the ball off the bottom

ballDirectionVerti = ‘U’;

}

if (ballDirectionHori == ‘R’) {

ball[0] = ball[0] + SPEED; // move ball

if (ball[0] 》= (resolution[0] - 6)) {

// ball is at the AI edge of the screen

if ((aiPos + 12) 》= ball[1] && (aiPos - 12) 《= ball[1]) { // ball hits AI paddle if (ball[1] 》 (aiPos + 4)) {

// deflect ball down

ballDirectionVerti = ‘D’;

}

else if (ball[1] 《 (aiPos - 4)) {

// deflect ball up

ballDirectionVerti = ‘U’;

}

else {

// deflect ball straight

ballDirectionVerti = ‘S’;

}

// change ball direction

ballDirectionHori = ‘L’;

}

else {

// GOAL!

ball[0] = 6; // move ball to other side of screen

ballDirectionVerti = ‘S’; // reset ball to straight travel

ball[1] = resolution[1] / 2; // move ball to middle of screen

++playerScore; // increase player score

}

}

}

if (ballDirectionHori == ‘L’) {

ball[0] = ball[0] - SPEED; // move ball

if (ball[0] 《= 6) { // ball is at the player edge of the screen if ((playerPos + 12) 》= ball[1] && (playerPos - 12) 《= ball[1]) { // ball hits player paddle if (ball[1] 》 (playerPos + 4)) {

// deflect ball down

ballDirectionVerti = ‘D’;

}

else if (ball[1] 《 (playerPos - 4)) { // deflect ball up ballDirectionVerti = ‘U’; } else { // deflect ball straight ballDirectionVerti = ‘S’; } // change ball direction ballDirectionHori = ‘R’; } else { ball[0] = resolution[0] - 6; // move ball to other side of screen ballDirectionVerti = ‘S’; // reset ball to straight travel ball[1] = resolution[1] / 2; // move ball to middle of screen ++aiScore; // increase AI score } } } drawBall(ball[0], ball[1]); erasePlayerPaddle(playerPos); playerPos = analogRead(A2); // read player potentiometer playerPos = map(playerPos, 0, 1023, 8, 54); // convert value from 0 - 1023 to 8 - 54 drawPlayerPaddle(playerPos); moveAi(); drawNet(); drawScore(); } else { // somebody has won display.clearDisplay(); display.setTextSize(4); display.setTextColor(WHITE); display.setCursor(0, 0); // figure out who if (aiScore 》 playerScore) {

display.println(“YOU LOSE!”);

}

else if (playerScore 》 aiScore) {

display.println(“YOU WIN!”);

}

}

display.display();

}

void moveAi() {

// move the AI paddle

eraseAiPaddle(aiPos);

if (ball[1] 》 aiPos) {

++aiPos;

}

else if (ball[1] 《 aiPos) {

--aiPos;

}

drawAiPaddle(aiPos);

}

void drawScore() {

// draw AI and player scores

display.setTextSize(2);

display.setTextColor(WHITE);

display.setCursor(45, 0);

display.println(playerScore);

display.setCursor(75, 0);

display.println(aiScore);

}

void eraseScore() {

// erase AI and player scores

display.setTextSize(2);

display.setTextColor(BLACK);

display.setCursor(45, 0);

display.println(playerScore);

display.setCursor(75, 0);

display.println(aiScore);

}

void drawNet() {

for (int i = 0; i 《 (resolution[1] / WALL_WIDTH); ++i) {

drawPixel(((resolution[0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);

}

}

void drawPixel(int posX, int posY, int dimensions) {

// draw group of pixels

for (int x = 0; x 《 dimensions; ++x) {

for (int y = 0; y 《 dimensions; ++y) {

display.drawPixel((posX + x), (posY + y), WHITE);

}

}

}

void erasePixel(int posX, int posY, int dimensions) {

// erase group of pixels

for (int x = 0; x 《 dimensions; ++x) {

for (int y = 0; y 《 dimensions; ++y) {

display.drawPixel((posX + x), (posY + y), BLACK);

}

}

}

void erasePlayerPaddle(int row) {

erasePixel(0, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);

erasePixel(0, row - PADDLE_WIDTH, PADDLE_WIDTH);

erasePixel(0, row, PADDLE_WIDTH);

erasePixel(0, row + PADDLE_WIDTH, PADDLE_WIDTH);

erasePixel(0, row + (PADDLE_WIDTH + 2), PADDLE_WIDTH);

}

void drawPlayerPaddle(int row) {

drawPixel(0, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);

drawPixel(0, row - PADDLE_WIDTH, PADDLE_WIDTH);

drawPixel(0, row, PADDLE_WIDTH);

drawPixel(0, row + PADDLE_WIDTH, PADDLE_WIDTH);

drawPixel(0, row + (PADDLE_WIDTH + 2), PADDLE_WIDTH);

}

void drawAiPaddle(int row) {

int column = resolution[0] - PADDLE_WIDTH;

drawPixel(column, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);

drawPixel(column, row - PADDLE_WIDTH, PADDLE_WIDTH);

drawPixel(column, row, PADDLE_WIDTH);

drawPixel(column, row + PADDLE_WIDTH, PADDLE_WIDTH);

drawPixel(column, row + (PADDLE_WIDTH * 2), PADDLE_WIDTH);

}

void eraseAiPaddle(int row) {

int column = resolution[0] - PADDLE_WIDTH;

erasePixel(column, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);

erasePixel(column, row - PADDLE_WIDTH, PADDLE_WIDTH);

erasePixel(column, row, PADDLE_WIDTH);

erasePixel(column, row + PADDLE_WIDTH, PADDLE_WIDTH);

erasePixel(column, row + (PADDLE_WIDTH * 2), PADDLE_WIDTH);

}

void drawBall(int x, int y) {

display.drawCircle(x, y, BALL_SIZE, WHITE);

}

void eraseBall(int x, int y) {

display.drawCircle(x, y, BALL_SIZE, BLACK);

}

這是您最終得到的結(jié)果:

對代碼很有信心,您可以進(jìn)行許多修改:

添加難度級別菜單(更改AI和球速)。

向其中添加一些隨機(jī)移動

為兩個(gè)玩家添加另一個(gè)底池。

添加一個(gè)暫停按鈕。

現(xiàn)在看看這些復(fù)古游戲Pi Zero項(xiàng)目。

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 游戲機(jī)
    +關(guān)注

    關(guān)注

    9

    文章

    302

    瀏覽量

    34346
  • Arduino
    +關(guān)注

    關(guān)注

    189

    文章

    6493

    瀏覽量

    190218
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    無風(fēng)扇迷你工控機(jī)選購指南

    無風(fēng)扇迷你工控機(jī)是許多工業(yè)應(yīng)用的重要工具,特別是隨著工業(yè)在自動化、人工智能和邊緣計(jì)算等領(lǐng)域朝著更集成、更堅(jiān)固的計(jì)算解決方案發(fā)展。無論您是在尋找用于邊緣人工智能處理的無風(fēng)扇迷你工控機(jī)、工
    的頭像 發(fā)表于 06-04 14:28 ?122次閱讀
    無風(fēng)扇<b class='flag-5'>迷你</b>工控<b class='flag-5'>機(jī)</b>選購指南

    用 Lakka 和 樹莓派 打造終客廳游戲機(jī)

    盡管現(xiàn)代樹莓派單板計(jì)算機(jī)(SBC)的規(guī)格有了大幅提升,但它們的性能仍不足以在4K分辨率下以60幀每秒(FPS)的速度運(yùn)行3A級PC游戲。不過,那些老派游戲——尤其是為老式游戲機(jī)設(shè)計(jì)的游戲
    的頭像 發(fā)表于 05-27 15:35 ?142次閱讀
    用 Lakka 和 樹莓派 打造終客廳<b class='flag-5'>游戲機(jī)</b>!

    樹莓派復(fù)古游戲機(jī):用科技重現(xiàn)經(jīng)典,讓童年永不落幕!

    復(fù)古游戲機(jī)是一種能讓你玩經(jīng)典游戲機(jī)上的視頻游戲的設(shè)備。有了復(fù)古游戲機(jī),你可以玩來自Atari的《
    的頭像 發(fā)表于 03-25 09:28 ?303次閱讀
    樹莓派<b class='flag-5'>復(fù)古</b><b class='flag-5'>游戲機(jī)</b>:用科技重現(xiàn)經(jīng)典,讓童年永不落幕!

    樹莓派復(fù)古游戲“雙雄會”,Batocera 和 RetroPie 誰更懂你?

    要點(diǎn)包括:1.歷史和主要特點(diǎn):Batocera于2016年作為Recalbox分支推出,是開源復(fù)古游戲發(fā)行版,可將計(jì)算機(jī)變游戲機(jī);RetroPie始于2012年,基
    的頭像 發(fā)表于 03-25 09:19 ?734次閱讀
    樹莓派<b class='flag-5'>復(fù)古</b><b class='flag-5'>游戲</b>“雙雄會”,Batocera 和 RetroPie 誰更懂你?

    N9300-S16 MP3解碼芯片IC在抓娃娃游戲機(jī)中的應(yīng)用方案

    隨著科技發(fā)展,抓娃娃游戲機(jī)融入音樂芯片成為創(chuàng)新趨勢。音樂增強(qiáng)玩家代入感,音頻模塊N9300-S16提供高品質(zhì)音效。該芯片功能豐富,支持多種控制模式,為抓娃娃游戲機(jī)帶來音頻體驗(yàn)升級,推動行業(yè)創(chuàng)新發(fā)展。
    的頭像 發(fā)表于 03-24 13:37 ?305次閱讀
    N9300-S16 MP3解碼芯片IC在抓娃娃<b class='flag-5'>游戲機(jī)</b>中的應(yīng)用方案

    游戲機(jī)與數(shù)碼相機(jī)的理想選擇:HT4088高性能充電芯片

    討論HT4088在高性能便攜式設(shè)備中的應(yīng)用,如游戲機(jī)和數(shù)碼相機(jī),提供快速充電解決方案。
    的頭像 發(fā)表于 03-13 17:24 ?387次閱讀
    <b class='flag-5'>游戲機(jī)</b>與數(shù)碼相機(jī)的理想選擇:HT4088高性能充電芯片

    蝸牛游戲游戲午夜機(jī)器人發(fā)行權(quán),進(jìn)一步擴(kuò)展產(chǎn)品組合

    已獲得游戲Robots at Midnight(午夜機(jī)器人)的全球發(fā)行權(quán)。這是一款復(fù)古未來風(fēng)格動作角色扮演游戲,旨在以其動態(tài)的游戲性和身臨其境的故事情節(jié)吸引玩家。這一戰(zhàn)略舉措彰顯了蝸牛
    的頭像 發(fā)表于 12-17 17:31 ?383次閱讀

    樹莓派與Arduino的區(qū)別是什么

    Pi): 樹莓派最初是作為教育工具設(shè)計(jì)的,旨在幫助學(xué)生學(xué)習(xí)計(jì)算機(jī)編程和電子工程。隨著時(shí)間的推移,它已經(jīng)發(fā)展成為一個(gè)多功能的微型計(jì)算機(jī),可以用于各種項(xiàng)目,包括但不限于: 家庭媒體中心 游戲機(jī) 網(wǎng)絡(luò)服務(wù)器 IoT(物聯(lián)網(wǎng))設(shè)備 教育和學(xué)習(xí)平臺 Arduino
    的頭像 發(fā)表于 11-11 11:14 ?2141次閱讀

    開源項(xiàng)目!基于Arduino做的“魷魚游戲”BOSS面具,支持動作檢測

    引腳分配: 舵機(jī)1:數(shù)字2 舵機(jī)2:數(shù)字3 舵機(jī)3:數(shù)字5 舵機(jī)4:數(shù)字6 舵機(jī)5:數(shù)字9 確保你的舵機(jī)有合適的外部電源供電,因?yàn)?b class='flag-5'>Arduino板載的5V供電不足以為多個(gè)舵機(jī)供電
    發(fā)表于 10-28 10:18

    索尼PS5 Pro游戲機(jī)震撼發(fā)布

    游戲界的萬眾矚目下,索尼于近日舉行的PS5技術(shù)展示會上,由首席架構(gòu)師Mark Cerny親自揭曉了萬眾期待的PS5 Pro游戲機(jī)。這款全新力作以699美元的定價(jià),定于11月7日盛大發(fā)售,無疑為游戲愛好者們帶來了前所未有的震撼與
    的頭像 發(fā)表于 09-11 16:59 ?960次閱讀

    2024華碩迷你主機(jī)選購指南:全系列覆蓋

    在選擇迷你主機(jī)時(shí),消費(fèi)者往往面臨多種選擇,而華碩作為知名的電腦硬件制造商,提供了多款性能各異的迷你主機(jī)以滿足不同用戶的需求。在面對華碩迷你主機(jī)的選擇時(shí),不同的需求和偏好將帶領(lǐng)我們走向不同的選擇。對于
    的頭像 發(fā)表于 08-04 00:45 ?563次閱讀
    2024華碩<b class='flag-5'>迷你</b>主機(jī)選購指南:全系列覆蓋

    基于 FPGA 的飛機(jī)大戰(zhàn)游戲系統(tǒng)設(shè)計(jì)

    喜歡老式電子游戲的買家。一些愛好者一直在收集復(fù)古游戲產(chǎn)品,一些普通玩家也開始收集舊式磁帶和CD,還有小時(shí)候玩過的游戲機(jī)。 雖然復(fù)古
    發(fā)表于 07-24 20:03

    藍(lán)牙模塊在無線游戲設(shè)備中的應(yīng)用

    了更多的樂趣和可能性。本文將探討藍(lán)牙模塊在無線游戲設(shè)備中的應(yīng)用,并分析其對游戲產(chǎn)業(yè)的影響。 藍(lán)牙模塊在無線游戲設(shè)備中的基礎(chǔ)應(yīng)用主要體現(xiàn)在設(shè)備間的無線連接和數(shù)據(jù)傳輸。通過藍(lán)牙模塊,游戲
    的頭像 發(fā)表于 07-19 14:00 ?522次閱讀

    使用ESP8266-01和Arduino SDK安裝AT固件失敗了怎么解決?

    ESP8266-01 運(yùn)行不規(guī)則 LED 瘋狂閃爍,游戲機(jī)被垃圾淹沒。 有誰能這么好,引導(dǎo)我走上正確的道路?我對 ESP8266-01 很陌生。
    發(fā)表于 07-19 06:08

    如何使用Arduino IDE構(gòu)建的ELF映像?

    我有一個(gè)要求,我需要使用使用 Arduino IDE 構(gòu)建的ELF映像,但 NonOS SDK 中提供了boot_v1.6.bin。我執(zhí)行了以下步驟 背景: 1. Arduino 構(gòu)建
    發(fā)表于 07-09 07:13
    主站蜘蛛池模板: 黄网站色 | dyav午夜片| 人与牲动交xxxbbb | 嫩草影院入口一二三免费 | 色接久久 | 红色一级毛片 | 视频免费在线 | 加勒比视频网站 | 国产性做久久久久久 | 日本精品三级 | 就去干综合 | 女人午夜啪啪性刺激免费看 | 亚洲色图25p| 扒开双腿爽爽爽视频www | 天天添天天干 | 久久久这里有精品999 | 韩国特黄特色a大片免费 | ts人妖系列在线专区 | 天天做天天添婷婷我也去 | 一级毛片在播放免费 | 视频在线观看网站 | 黄网地址| 四虎影视网址 | 手机看片神马午夜片 | 精品在线一区二区三区 | 天天看天天爽天天摸天天添 | 性欧美高清视频 | 亚洲日本在线观看 | 上课被同桌摸下面做羞羞 | 亚洲一区二区三区播放在线 | 色琪琪一本到影院 | 一区二区三区精品国产欧美 | 久碰香蕉精品视频在线观看 | 色盈盈| 天天曰夜夜曰 | 欧美一区二区三区四区视频 | 国产精品xxxav免费视频 | 国产在线观看www鲁啊鲁免费 | 香蕉蕉亚亚洲aav综合 | 天堂在线网站 | 国产成人91青青草原精品 |