#include <Adafruit_NeoPixel.h>
#include <DFPlayerMini_Fast.h>
#include <Arduino.h>
#include <U8g2lib.h>
#if !defined(UBRR1H)
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 1); // RX, TX
#endif
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
//128x32 Ammo display on pins 9 & 10
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R3, /* clock=*/ 9, /* data=*/ 10, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED
//64x32 Scop display on pins 4 & 5 (native SDA SCL pins)
U8G2_SSD1306_64X32_1F_1_HW_I2C u8g3(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// End of constructor list
// pin definitions
int fire = 8;
int reload = 7;
int led =2;
// global variables
int count1 = 1;
int count2 = 1;
int lastButtonState1 = 1;
int lastButtonState2 = 1;
long unsigned int lastPress1;
long unsigned int lastPress2;
volatile int buttonFlag1;
volatile int buttonFlag2;
int debounceTime = 20;
int ammo = 99;
DFPlayerMini_Fast myMP3;
void setup() {
// setup pin modes
pinMode(reload, INPUT);
pinMode(fire, INPUT);
Serial.begin(9600); // dont forget to set your serial monitor speed to whatever is set here
Serial.println("Running");
u8g2.begin();
u8g3.begin();
//DFPlayer Setup
mySerial.begin(9600);
myMP3.begin(mySerial, true);
Serial.println("Setting volume to max");
myMP3.volume(30);
// Ammo Count Boxes
u8g2.setDrawColor(1);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_inb19_mn);
u8g2.setCursor (2, 2);
u8g2.print(ammo);
//Draw Five Ammo Count Boxes
u8g2.drawBox(2,110,30,17);
u8g2.drawBox(2,91,30,17);
u8g2.drawBox(2,72,30,17);
u8g2.drawBox(2,53,30,17);
u8g2.drawBox(2,34,30,17);
u8g2.sendBuffer();
//Play initial startup sound
myMP3.playFromMP3Folder(0003);
}
void loop() {
//Fire button check loop
u8g3.firstPage();
do {
int a = random(1, 12);
int b = random(1, 12);
int c = random(1, 12);
int d = random(1, 12);
int e = random(70, 90);
//Draw Scope
u8g3.drawCircle(32, 15, 15);//Outer Ring
u8g3.drawCircle(32, 15, 2);//Inner ring
u8g3.drawLine(20, 15, 15, 15);//left hash
u8g3.drawLine(44, 15, 49, 15);//right hash
u8g3.drawLine(32, 30, 32, 25);//bottom hash
u8g3.drawLine(32, 1, 32, 5);//top hash
u8g3.setFont(u8g2_font_tom_thumb_4x6_tf);
u8g3.setCursor (46, 6);
u8g3.print("TI-23");
u8g3.setCursor(52, 26);
u8g3.print("RNG");
u8g3.setCursor(52, 32);
u8g3.print(e);
u8g3.print("m");
//Top Left Bars
u8g3.drawLine(1, 1, a, 1);//bar 1
u8g3.drawLine(1, 3, b, 3);//bar 2
u8g3.drawLine(1, 5, c, 5);//bar 3
u8g3.drawLine(1, 7, d, 7);//bar 4
delay(50);
} while ( u8g3.nextPage() );
digitalWrite(led, LOW);
if(digitalRead(fire)==HIGH && ammo>0)
{
Serial.println("Fire:");
//Ammo Bar
//Five bars
if ((ammo <=100) && (ammo >= 80))
{
digitalWrite(led,HIGH);
myMP3.playFromMP3Folder(0001);
ammo = ammo - 1;
//Five ammo count boxes already drawn
Serial.println("50-40");
u8g2.setCursor (2, 2);
u8g2.print(ammo);
u8g2.sendBuffer();
digitalWrite(led,LOW);
delay(100);
}
//four bars
if ((ammo <= 79) && (ammo >= 60))
{
digitalWrite(led,HIGH);
myMP3.playFromMP3Folder(0001);
ammo = ammo - 1;
//Draw Four Ammo Count Boxes
Serial.println("39-30");
u8g2.clearBuffer();
u8g2.drawBox(2,110,30,17);
u8g2.drawBox(2,91,30,17);
u8g2.drawBox(2,72,30,17);
u8g2.drawBox(2,53,30,17);
Serial.println(ammo);
u8g2.setCursor (2, 2);
u8g2.print(ammo);
u8g2.sendBuffer();
digitalWrite(led, LOW);
delay(100);
}
//Three bars
if ((ammo <= 59) && (ammo >= 40)) {
digitalWrite(led,HIGH);
myMP3.playFromMP3Folder(0001);
ammo = ammo - 1;
//Draw Four Ammo Count Boxes
Serial.println("29-20");
u8g2.clearBuffer();
u8g2.drawBox(2,110,30,17);
u8g2.drawBox(2,91,30,17);
u8g2.drawBox(2,72,30,17);
Serial.println(ammo);
u8g2.setCursor (2, 2);
u8g2.print(ammo);
u8g2.sendBuffer();
digitalWrite(led, LOW);
delay(100);
}
//Two bars
if ((ammo <= 39) && (ammo >= 20)) {
digitalWrite(led,HIGH);
myMP3.playFromMP3Folder(0001);
delay(100);
ammo = ammo - 1;
//Draw Four Ammo Count Boxes
Serial.println("19-10");
u8g2.clearBuffer();
u8g2.drawBox(2,110,30,17);
u8g2.drawBox(2,91,30,17);
Serial.println(ammo);
u8g2.setCursor (2, 2);
u8g2.print(ammo);
u8g2.sendBuffer();
digitalWrite(led, LOW);
delay(100);
}
//One bars
if ((ammo <= 19) && (ammo >= 1)) {
digitalWrite(led,HIGH);
myMP3.playFromMP3Folder(0001);
delay(100);
ammo = ammo - 1;
//Draw Four Ammo Count Boxes
u8g2.clearBuffer();
u8g2.drawBox(2,110,30,17);
Serial.println(ammo);
u8g2.setCursor (2, 2);
u8g2.print(ammo);
u8g2.sendBuffer();
digitalWrite(led, LOW);
delay(100);
}
//Zero bars
if ((ammo == 0)) {
Serial.println("Empty");
myMP3.playFromMP3Folder(0005);
//Draw Four Ammo Count Boxes
u8g2.clearBuffer();
Serial.println(ammo);
u8g2.setCursor (2, 2);
u8g2.print(ammo);
u8g2.sendBuffer();
}
}
if(digitalRead(fire)==LOW){
Serial.println("do nothing");
}
if (digitalRead(reload) == HIGH) {
Serial.println("...Reload...");
myMP3.playFromMP3Folder(0003);
ammo = 99;
//Re-Draw Five Ammo Count Boxes for reload
u8g2.drawBox(2,110,30,17);
u8g2.drawBox(2,91,30,17);
u8g2.drawBox(2,72,30,17);
u8g2.drawBox(2,53,30,17);
u8g2.drawBox(2,34,30,17);
u8g2.setCursor (2, 2);
u8g2.print(ammo);
u8g2.sendBuffer();
delay(1000);
}
;
}