Slinger — Arduino Nano simulation

A little arduino nano game

An interactive Arduino Nano circuit simulation you can run free in your browser on Velxio, by mortonben00.

Components

Sketch code

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Arduino.h>
#include <Bounce2.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

//sets button pins
const int b1 = 5;
const int b2 = 6;
const int b3 = 7;
// assigns debouncers
Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();

Adafruit_SSD1306 display(
  SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET
);

const unsigned long FRAME_TIME = 25;
unsigned long lastFrame = 0;
unsigned long updateTime = 0;
unsigned long sendTime = 0;
unsigned long lastReport = 0;
unsigned long planetDrawTime = 0;

//---------Triangle---------------------
// Original triangle coordinates relative to its center
// the values set the shape of the triangle base on coordnates around its center
const int ax = 0;
const int ay = -5;
const int bx = 4;
const int by = 6;
const int cx = -4;
const int cy = 6;
// sets triangle position on screen
const int shipOriginX = 64;
const int shipOriginY = 32;
// angle value of the triangle
float theta = 1.57; // 360 degrees = 6.28
//final pos values of the triangle
int rax, ray, rbx, rby, rcx, rcy;

//--------------Planets------------------
//only 2 goals at a time, the one you leave and the one you go to
float planetX = 1000;
float planetY = 32;
int planetSize = 100;
float planet2X;
float planet2Y;
int planet2Size;
bool planetReached = false;
bool planetMade = false;
int currentDistanceToP = 1000;
int totalDistanceToP = 1000;
int tempPlanetX;
int tempPlanetY;
int tempSize;

//--------------Star---------------------
// Star 1 position
float posX = 100;
float posY = 50;
int size = 5;
// Star 2 position
float posX2 = 92;
float posY2 = 20;
int size2 = 4;
// Star 3 position
float posX3 = 40;
float posY3 = 15;
int size3 = 3;
// Star 4 position
float posX4 = 15;
float posY4 = 60;
int size4 = 1;
// Star 5 position
float posX5 = 32;
float posY5 = 60;
// Star 6 position
float posX6 = 41;
float posY6 = 17;

//-----------Movement------------
//overall velocity variables, affects rects, planet pos, acceleration, decel
float velocityX = 0;
float velocityY = 0;
const float thrustPower = 0.02;
const float friction = 0.9995;
float shipCos;
float shipSin;

//----------Orbit--------------
float orbitDistance = planetSize + 25;
float orbitRadius = planetSize + 25;
float orbitAngle = 0;
float orbitSpeed = 0.02;
float orbitAccel = 0.0001;
bool orbiting = false;
float orbitExitSpeed = 0.0315; // the speed required before you can "release" from orbit

void setup() {
  Serial.begin(115200);
  randomSeed(analogRead(A0));
  // this sets the correct voltage for the display?? I think?
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;) {}}
  Wire.setClock(400000);
  // sets digital pins for the buttons and pulls them high
  pinMode(b1, INPUT_PULLUP);
  pinMode(b2, INPUT_PULLUP);
  pinMode(b3,INPUT_PULLUP);
  //attaches the button to the debouncer function to us

More projects by mortonben00