Skocz do zawartości

Pomocna odpowiedź

Napisano

Dobra a więc tak robie swój pierwszy projekt czyli mój gameboy i żeby jakoś zasilić arduino kupiłem baterie lipo 1000mah 3,7v i moduł solar charger shield od seeed naładowałem baterie i podłączyłem moduł do arduino wgrałem kod na gameboya i włączyłem zasilanie a dioda na arduino sie zaswieciła na zielono lecz  arduino nie wykonuje kodu czy ktoś może mi coś poradzić?

  • Lubię! 1

@Ka1bon witam na forum 🙂 Ciężko pomóc, bo nie wiemy jaki kod wgrałeś i co dokładnie masz tam podłączone. Skąd wniosek, że kod zupełnie nie działa?

(edytowany)

Arduino nie wykonuje kodu, jeśli jest za mało prądu. Jeśli podłączyłeś baterie pod 5v to tam musi być stale utrzymywane napięcie, inaczej kod nie wykona się.

Jeśli podłączyłeś pod VIN to tam wymagane jest napięcie od 7 - 12V.

Edytowano przez Mikolajkie

@Treker
Podałem tutaj kod do gameboya a podłączone są mały wyświetlacz oled i 6 przycisków

#include <U8g2lib.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

#define WIDTH 128
#define HEIGHT 64
#define PLAYER_WIDTH 16
#define PLAYER_HEIGHT 8
#define OBJECT_WIDTH 8
#define OBJECT_HEIGHT 8

int playerX = 40;
int playerY = 55;
int objectX;
int objectY = 0;

bool gameRunning = false;

// Define button pins
#define LEFT_BUTTON 2
#define RIGHT_BUTTON 3
#define A_BUTTON 4
#define B_BUTTON 5
#define UP_BUTTON 6
#define DOWN_BUTTON 7

// Speed variables
int objectSpeed = 1;  // Initial falling speed
int maxSpeed = 5;     // Maximum falling speed
int playerSpeed = 2;  // Player movement speed

void setup() {
  // Set up U8g2 display
  u8g2.begin();

  // Set button pins as INPUT_PULLUP
  pinMode(LEFT_BUTTON, INPUT_PULLUP);
  pinMode(RIGHT_BUTTON, INPUT_PULLUP);
  pinMode(A_BUTTON, INPUT_PULLUP);
  pinMode(B_BUTTON, INPUT_PULLUP);
  pinMode(UP_BUTTON, INPUT_PULLUP);
  pinMode(DOWN_BUTTON, INPUT_PULLUP);
}

void updatePlayer() {
  if (digitalRead(LEFT_BUTTON) == LOW && playerX > 0 && gameRunning) {
    playerX -= playerSpeed;
  }

  if (digitalRead(RIGHT_BUTTON) == LOW && playerX < (WIDTH - PLAYER_WIDTH) && gameRunning) {
    playerX += playerSpeed;
  }
}

void updateObject() {
  // Move the object downward
  objectY += objectSpeed;

  // Increase falling speed over time
  if (objectSpeed < maxSpeed) {
    objectSpeed += 1;
  }

  // Check for collision with the player
  if (objectX < (playerX + PLAYER_WIDTH) && (objectX + OBJECT_WIDTH) > playerX &&
      objectY < (playerY + PLAYER_HEIGHT) && (objectY + OBJECT_HEIGHT) > playerY) {
    // Collision occurred, game over
    gameRunning = false;
  }

  // Check if the object reached the bottom of the screen
  if (objectY >= HEIGHT) {
    // Object reached the bottom, reset its position and speed
    objectY = 0;
    objectX = random(WIDTH - OBJECT_WIDTH);
    objectSpeed = 1;  // Reset falling speed
  }
}

void drawPlayer() {
  u8g2.drawBox(playerX, playerY, PLAYER_WIDTH, PLAYER_HEIGHT);
}

void drawObject() {
  u8g2.drawBox(objectX, objectY, OBJECT_WIDTH, OBJECT_HEIGHT);
}

void drawMenu() {
  u8g2.setFont(u8g2_font_profont15_mr);
  u8g2.drawStr(20, 20, "Menu");
  u8g2.setFont(u8g2_font_profont10_mr);
  u8g2.drawStr(10, 40, "1. Start Game");
}

void drawGameOver() {
  u8g2.setFont(u8g2_font_profont15_mr);
  u8g2.drawStr(20, 20, "Game Over");
  u8g2.setFont(u8g2_font_profont10_mr);
  u8g2.drawStr(10, 40, "Press A to restart");
  u8g2.drawStr(10, 55, "Press B to exit");
}

void loop() {
  // Main Menu
  if (!gameRunning) {
    u8g2.clearBuffer();
    drawMenu();
    u8g2.sendBuffer();

    if (digitalRead(A_BUTTON) == LOW) {
      // Start the game
      gameRunning = true;
      objectX = random(WIDTH - OBJECT_WIDTH);
    }

    delay(200);  // Debounce
    return;
  }

  // Update player input and movement
  updatePlayer();

  // Update falling object
  updateObject();

  // Draw player and falling object
  u8g2.clearBuffer();
  drawPlayer();
  drawObject();
  u8g2.sendBuffer();

  // Check for B_BUTTON press during the game
  if (digitalRead(B_BUTTON) == LOW) {
    gameRunning = false;
    delay(200);  // Debounce
    return;
  }

  if (!gameRunning) {
    // Game over screen
    u8g2.clearBuffer();
    drawGameOver();
    u8g2.sendBuffer();

    while (true) {
      if (digitalRead(A_BUTTON) == LOW) {
        // Restart the game
        playerX = 40;
        playerY = 55;
        objectY = 0;
        objectX = random(WIDTH - OBJECT_WIDTH);
        objectSpeed = 1;  // Reset falling speed
        gameRunning = true;
        break;
      }
      
      if (digitalRead(B_BUTTON) == LOW) {
        // Return to menu
        delay(200);  // Debounce
        break;
      }
    }
  }

  delay(20);  // Adjust delay for a smoother experience
}

 

image.jpg

image.jpg

(edytowany)

@Ka1bon sprawdź czy masz zasilanie na OLED i czy i2c jest napewno dobrze połączone (scl, sda) 

Może być problem ze zbyt niskim napięciem dla OLED (jest na 5v a bateria naładowana daje max 4,2v)

Edytowano przez farmaceuta

Jeśli chcesz, żeby wszystko działało jak najlepiej, to dokup drugą baterię, połącz szeregowo. Jeśli tam wchodzi napięcie 7 - 12V to wszystko jak najlepiej powinno działać.

Okej jak podłącze najpier do komputera włącze zasilanie na module i odłącze kabel od kompa do działa ale jak wyłącze i włącze no już nie działa

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...