91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

454398 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-29 09:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

您需要的內(nèi)容

這是您需要的:

1 x Arduino(任何型號(hào))

1 x 10k電位器

1 x 0.96英寸I2C OLED顯示屏

1 x面包板

各種公頭》公連接線

任何Arduino都應(yīng)該工作,請(qǐng)查看我們的購(gòu)買(mǎi)指南如果您不確定要購(gòu)買(mǎi)哪種型號(hào)。

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

電路

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

在這里是:

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

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

電位器測(cè)試

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

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)在打開(kāi)串行監(jiān)視器(右上》 串行監(jiān)視器)并轉(zhuǎn)動(dòng)鍋。您應(yīng)該看到在串行監(jiān)視器上顯示的值。完全逆時(shí)針應(yīng)為零,完全逆時(shí)針應(yīng)為 1023 :

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

OLED測(cè)試

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

Mac OS:/用戶(hù)/用戶(hù)名/Documents/Arduino/libraries

Linux:/home/Username/Sketchbook

Windows:/Users/Arduino/libraries

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

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

代碼

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

首先包括必要的庫(kù):

#include

#include

#include

#include

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

下一步,配置顯示:

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;

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

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

resolution[1];

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

ball[1] = 15;

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

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.display();

}

第一行告訴Adafruit庫(kù),您的顯示器正在使用什么尺寸和通訊協(xié)議(在這種情況下,為 128 x 64 和 I2C )。第二行( display.display())告訴屏幕顯示緩沖區(qū)中存儲(chǔ)的內(nèi)容(無(wú)內(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)并使用顯示庫(kù)中的 drawCircle 方法將其繪制在屏幕上。這使用了前面定義的常量 BALL_SIZE 。嘗試更改此設(shè)置,看看會(huì)發(fā)生什么。此drawCircle方法接受像素顏色-黑色或白色。因?yàn)檫@是單色顯示(一種顏色),所以白色表示像素處于打開(kāi)狀態(tài),黑色表示像素處于關(guān)閉狀態(tài)。

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

void moveAi() {

eraseAiPaddle(aiPos);

if (ball[1] 》 aiPos) {

++aiPos;

}

else if (ball[1] 《 aiPos) {

--aiPos;

}

drawAiPaddle(aiPos);

}

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

aiPos += 2;

并且:

aiPos -= 2;

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

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 變量來(lái)設(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)不必使用庫(kù) drawPixel 方法繪制每個(gè)像素,而是根據(jù)給定的尺寸繪制一組像素。

drawScore 方法使用庫(kù)的文本功能將播放器和AI得分寫(xiě)入屏幕。這些存儲(chǔ)在 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 對(duì)應(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 方法。這些方法會(huì)繪制并擦除適當(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é)果:

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

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

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

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

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

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

責(zé)任編輯:wv

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

    關(guān)注

    9

    文章

    306

    瀏覽量

    35510
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6526

    瀏覽量

    197079
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    開(kāi)源一款10x10cm迷你款Kharon-386 PC電腦

    癡迷復(fù)古 IBM PC 電腦,卻苦于真機(jī)難尋、體積龐大占空間?復(fù)刻版功能單一,缺 VGA 顯示、復(fù)古音效,體驗(yàn)大打折扣?想學(xué)習(xí) x86 架構(gòu)底層原理,卻沒(méi)有輕量化的實(shí)體硬件平臺(tái)?還想讓復(fù)古
    的頭像 發(fā)表于 03-11 11:19 ?349次閱讀
    開(kāi)源一款10x10cm<b class='flag-5'>迷你</b>款Kharon-386 PC電腦

    這類(lèi)開(kāi)發(fā)板通?;谌?H3 或瑞芯微 RK 系列芯片能做什么

    迷你游戲機(jī),運(yùn)行RetroPie等模擬器,搭配小型屏幕和手柄。 開(kāi)發(fā)便攜媒體播放器,通過(guò)CVBS視頻輸出連接老式顯示器或電視。 4. 工業(yè)與商業(yè)場(chǎng)景 作為工業(yè)數(shù)據(jù)采集終端,連接PLC、傳感器等設(shè)備
    發(fā)表于 02-01 12:41

    合粵鋁電解電容于游戲機(jī)主機(jī)電源管理電路的應(yīng)用

    在現(xiàn)代游戲機(jī)主機(jī)中,鋁電解電容的核心作用是 “高效儲(chǔ)能” 與 “極致濾波” ,為CPU、GPU等核心芯片提供瞬間的“爆發(fā)式”能量,并確保電源的純凈度,是保障游戲性能穩(wěn)定釋放、防止畫(huà)面卡頓或系統(tǒng)崩潰
    的頭像 發(fā)表于 10-30 15:50 ?470次閱讀
    合粵鋁電解電容于<b class='flag-5'>游戲機(jī)</b>主機(jī)電源管理電路的應(yīng)用

    迷你縮小體電容:微型設(shè)備供電核心組件

    迷你縮小體電容作為微型設(shè)備供電的核心組件,通過(guò)微型化設(shè)計(jì)、高性能材料及創(chuàng)新結(jié)構(gòu),實(shí)現(xiàn)了體積縮減、高能量密度、快速充放電和長(zhǎng)循環(huán)壽命,成為物聯(lián)網(wǎng)、可穿戴設(shè)備、微型醫(yī)療裝置等領(lǐng)域的理想電源解決方案
    的頭像 發(fā)表于 10-16 16:44 ?708次閱讀
    超<b class='flag-5'>迷你</b>縮小體電容:微型設(shè)備<b class='flag-5'>供電</b>核心組件

    我造了一臺(tái)‘迷你 Switch’,還能自己寫(xiě)游戲!

    打造一臺(tái)“掌上游戲機(jī)”?簡(jiǎn)單到你意想不到!提到掌上游戲機(jī),大家的第一反應(yīng)可能是——Switch:經(jīng)典耐玩,但價(jià)格不友好。SteamDeck:性能怪獸,但錢(qián)包會(huì)哭泣。這些設(shè)備一個(gè)共同點(diǎn):不便宜。那么
    的頭像 發(fā)表于 08-12 18:05 ?697次閱讀
    我造了一臺(tái)‘<b class='flag-5'>迷你</b> Switch’,還能自己寫(xiě)<b class='flag-5'>游戲</b>!

    【VisionFive 2單板計(jì)算機(jī)試用體驗(yàn)】VisionFive 2復(fù)古游戲機(jī)改造

    SD卡 ,同時(shí)保留Debian(日常使用)與Batocera(游戲專(zhuān)用) QEMU虛擬機(jī) :在Debian中安裝QEMU,虛擬化運(yùn)行Batocera(需4GB內(nèi)存版本) 總結(jié):RISC-V游戲主機(jī)
    發(fā)表于 07-22 20:58

    【VisionFive 2單板計(jì)算機(jī)試用體驗(yàn)】2、打造復(fù)古游戲機(jī)(Batocera鏡像+FBNeo虛擬機(jī), 多款游戲ROM分享)

    衷心感謝電子發(fā)燒友論壇! 1、基本知識(shí) 制作一個(gè)游戲機(jī)系統(tǒng),需要3個(gè)關(guān)鍵步驟: Linux游戲系統(tǒng)發(fā)行版 游戲模擬器 游戲ROM 下面分別介紹: 2、Linux
    發(fā)表于 07-17 21:58

    【項(xiàng)目分享】Xii-Boy-Ultra 無(wú)線便攜式 Wii 游戲機(jī)

    Xii-Boy Ultra 是一款小型便攜式 Wii 游戲機(jī),采用垂直布局設(shè)計(jì)。該系統(tǒng)允許用戶(hù)無(wú)需使用焊錫,僅用螺絲刀就能輕松組裝和拆卸。 Xii-Boy Ultra 是一款采用垂直布局、小巧
    發(fā)表于 07-14 17:27

    【VisionFive 2單板計(jì)算機(jī)試用體驗(yàn)】VisionFive 2一個(gè)霸氣的游戲機(jī)

    這次的測(cè)試活動(dòng),每人人手送一個(gè)游戲機(jī),非常的好?。。?! 很高興收到賽昉科技發(fā)放的VisionFive 2開(kāi)發(fā)板,VisionFive 2是全球首款集成了3D GPU的高性能量產(chǎn)RISC-V
    發(fā)表于 07-13 20:41

    樹(shù)莓派復(fù)古游戲,你會(huì)選哪一個(gè)?

    復(fù)古游戲與樹(shù)莓派單板計(jì)算機(jī)的組合十分常見(jiàn)。在樹(shù)莓派項(xiàng)目列表中,幾乎都會(huì)包含至少一個(gè)復(fù)古游戲項(xiàng)目。復(fù)古游戲
    的頭像 發(fā)表于 06-16 16:56 ?1163次閱讀
    樹(shù)莓派<b class='flag-5'>復(fù)古</b><b class='flag-5'>游戲</b>,你會(huì)選哪一個(gè)?

    無(wú)風(fēng)扇迷你工控機(jī)選購(gòu)指南

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

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

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

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

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

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

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

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

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