Skocz do zawartości

Problem z zasilaniem arduino przez baterie


Ka1bon

Pomocna odpowiedź

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
Link do komentarza
Share on other sites

@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?

Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

@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

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(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
Link do komentarza
Share on other sites

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ć.

Link do komentarza
Share on other sites

5 minut temu, Ka1bon napisał:

@farmaceuta

i2c jest dobrze w jakim sensie cY mam zasilanie na oled?

Najlepiej miernikiem sprawdzić na pinach oled'a czy jest zasilanie...płytki stykowe czasem nie stykają 😉

Link do komentarza
Share on other sites

1 minutę temu, Ka1bon napisał:

Na zdjęciu pokazałem brz podłączenia normalnie mam podłączone i teraz sprawdzam miernikiem 

Pokaż zdjęcie 

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.