//3668236333
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h>
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
#define BUTTON_A 5// set ammo button
#define BUTTON_B 4 // ammo add up
#define BUTTON_C 3// ammo deduction
int ammo = 2;// ammo senser
int shooting = 6;// trigger button
int bullet = 12; // default ammo
bool once = true;
unsigned long prev = 0;
int reloadTime =5000;
bool reload=true;
void setup() {
Serial.begin(9600);
bullet = EEPROM.read(0);
if (bullet == 255)bullet = 12; // default
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
Serial.println("OLED begin");
display.display();
// Clear the buffer.
display.clearDisplay();
display.display();
delay(1000);
pinMode(ammo, INPUT_PULLUP);
pinMode(BUTTON_A, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
pinMode(BUTTON_C, INPUT_PULLUP);
pinMode(shooting, INPUT_PULLUP);
// text display tests
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("gun initalizing ...");
display.display();
delay(1000);
display.println("loading default ammo");
display.display();
delay(1000);
display.println("trigger ready");
display.display();
delay(1000);// actually display all of the above
display.clearDisplay();
display.setCursor(10, 0);
display.print("total ammo left ");
display.setTextSize(6);
// display.clearDisplay();
display.setCursor(40, 10);
display.print(bullet);
display.display();
}
void loop() {
while (digitalRead(ammo) == LOW) {
if (once) {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(10, 0);
display.println("ammo loaded..");
display.println("have a nice day");
display.display();
once = false;
}
if (!digitalRead(BUTTON_A)) {
//delay(300);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(10, 0);
display.println("entered config..");
display.println("set number of bullet");
display.display();
delay(1000);
while (1) {
if (!digitalRead(BUTTON_B)) {
delay(100);
bullet++;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("set number of bullet..");
display.setTextSize(6);
display.setCursor(35, 10);
display.print(bullet);
display.display();
}
else if (!digitalRead(BUTTON_C)) {
bullet--; if (bullet <= 0)bullet = 0;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("set MAX bullet.");
display.setTextSize(6);
display.setCursor(35, 10);
display.print(bullet);
display.display();
}
else if (!digitalRead(BUTTON_A)) {
delay(200); EEPROM.update(0, bullet);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(10, 0);
display.println("sucessful... ");
display.println("ammo count updated");
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(10, 0);
display.print("total ammo left ");
display.setTextSize(6);
// display.clearDisplay();
display.setCursor(35, 10);
display.print(bullet);
display.display();
break;
}
}
}
if (digitalRead(shooting) == LOW) {
delay(100); display.clearDisplay();
bullet--;
if (bullet <= 0) {
bullet=0;
if(reload) prev=millis();reload=false;
unsigned long timeNow = millis();
if (timeNow - prev>reloadTime) {
prev = millis();
bullet = 12;
reload=true;
} else {
bullet = 0;
}
}
display.setTextSize(1);
display.setCursor(10, 0);
display.print("total ammo left ");
display.setTextSize(6);
display.setCursor(35, 10); if (bullet <= 9) display.print('0');
display.print(bullet);
display.display();
}
delay(10);
yield();
display.display();
}
if (digitalRead(ammo)) {
once = true;
}
}