So......ich bedanke mich recht herzlich für die Hilfe bei hotsystems und Thommy...
hab das Programm jetzt fertig und es läuft so wie ich es mir vorgestellt habe....
es gibt bestimmt noch ein paar Dinge die man einfacher zusammen führen könnte und komprimieren um speicherplatz auf dem Nano zu sparen, aber es läuft....
falls jemand tipps hat wie der sketch kompakter gemacht werden kann oder funktionen einfacher geschrieben werden, bin ich für jede Anregung offen und dankbar!!
In diesem Sinne wünsche ich allen ein gutes und erfolgreiches neues Jahr 2021!!
Code:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1305.h>
#include <U8g2_for_Adafruit_GFX.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>
SoftwareSerial myPlayer(14,15);
#define SCREEN_WIDTH 128
#define SCREEN_HIGHT 32
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 8
#define OLED_CS 10
#define OLED_RESET 9
#define PIN 17
#define NUMPIXELS 7
Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_SSD1305 display(128, 32, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
U8G2_FOR_ADAFRUIT_GFX disp;
#pragma once
#define ZW1IXR_BMPWIDTH 128
#define ZW1IXR_BMPHEIGHT 32
const unsigned char bitmap_zw1ixr[] PROGMEM = {
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000011,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000110,B00011110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B00000000,B00001100,B00111000,B00000000,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11100000,B00111000,B01111100,B00000111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111100,B01110000,B11000111,B00111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B11110011,B11111111,B11000000,B00001111,B11111111,B11001111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B11100110,B01111111,B10011111,B11111111,B11111110,B01100111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B11100100,B01001110,B00001111,B11111000,B01110010,B00100111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B11101100,B11001000,B00000000,B00000000,B00010011,B00110111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B11101000,B10011000,B00100010,B01000100,B00011001,B00010111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B11111001,B10010001,B10001000,B00010001,B10001001,B10011111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B01110001,B00110011,B10011100,B00111001,B11001100,B10001110,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B01110011,B00100111,B10011100,B00111001,B11100100,B11001110,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00110010,B01100111,B10011100,B00111001,B11100110,B01001100,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00110110,B01001111,B10011100,B00111001,B11110010,B01101100,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00011100,B11001111,B10011100,B00111001,B11110011,B00111000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00011100,B10011111,B11011100,B00111011,B11111001,B00111000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B10011111,B11111100,B00111111,B11111001,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11111111,B11111100,B00111111,B11111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000111,B11100111,B11111110,B01111111,B11100111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000011,B11100011,B11111111,B11111111,B11000111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000011,B11110011,B11111111,B11111111,B11001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,B11110001,B10011111,B11111001,B10001111,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01100000,B00111111,B11111100,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B11111110,B01111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B11111100,B00111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01110000,B00001110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000
};
int a = 25;
int rot = 2;
int grn = 3;
const int feuer = 4;
const int wechsel = 5;
const int nachladen = 6;
const int reed = 7;
const int feuerled = 17;
int feuerstatus = 0;
int letzterfeuerstatus = 0;
int feuerzaehler = 0;
int wechselzaehler = 1;
int wechselstatus = 0;
int letzterwechselstatus = 0;
int nachladenstatus = 0;
int letzternachladenstatus = 0;
long lastDebounceTime = 0;
long debounceDelay = 200;
int reedstate = 0;
int lastreedstate = 0;
void setup() {
// put your setup code here, to run once:
pinMode(rot, OUTPUT);
pinMode(grn, OUTPUT);
pinMode(feuer, INPUT);
pinMode(wechsel, INPUT);
pinMode(nachladen, INPUT);
pinMode(reed, INPUT);
pixels.begin();
digitalWrite(feuerled, LOW);
display.begin();
disp.begin(display);
disp.setFontMode(1);
disp.setFontDirection(0);
disp.setForegroundColor(WHITE);
Serial.begin(9600);
myPlayer.begin(9600);
mp3_set_serial (myPlayer);
delay(1);
mp3_set_volume (30);
lawgiver();
dispbasis();
mp3_play(1);
delay(1);
//commok();
balken1();
dnacheck();
delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
wechselstatus = digitalRead(wechsel);
feuerstatus = digitalRead(feuer);
nachladenstatus = digitalRead(nachladen);
if(digitalRead(reed) == HIGH){
digitalWrite(rot, LOW);
digitalWrite(grn, HIGH);
if(reedstate == 0){
idok();
reedstate = 1;
}
if (wechselstatus != letzterwechselstatus && millis() - lastDebounceTime > debounceDelay){
if (wechselstatus == HIGH){
mp3_play(2);
delay(10);
lastDebounceTime = millis();
if (wechselzaehler < 4){
wechselzaehler++;
}else{
wechselzaehler = 1;
}
}
}else{
}
if (feuerstatus != letzterfeuerstatus && millis() - lastDebounceTime > debounceDelay){
if (feuerstatus == HIGH){
lastDebounceTime = millis();
if (feuerzaehler < 25){
if(a > 0){
a--;
feuerzaehler++;
SelectorPosition();
magazin();
}
}else{
mp3_play(9);
delay(10);
}
}else{
}
}
if (nachladenstatus != letzternachladenstatus && millis() - lastDebounceTime > debounceDelay){
if (nachladenstatus == HIGH){
feuerzaehler = 0;
lastDebounceTime = millis();
mp3_play(10);
delay(1);
magazinvoll();
}else{
}
}
letzterwechselstatus = wechselstatus;
letzterfeuerstatus = feuerstatus;
letzternachladenstatus = nachladenstatus;
}else{
digitalWrite(grn, LOW);
digitalWrite(rot, HIGH);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("DNA CHECK");
disp.setCursor(95,19);
disp.println("RAPID");
display.display();
if(digitalRead(feuer) == HIGH){
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("ACCESS DENIED");
display.display();
mp3_play(3);
delay(5000);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("DNA CHECK");
disp.setCursor(95,19);
disp.println("RAPID");
display.display();
}
reedstate = 0;
}
}
void lawgiver(void) {
display.clearDisplay();
display.drawBitmap(
(display.width() - ZW1IXR_BMPWIDTH ) / 2,
(display.height() - ZW1IXR_BMPHEIGHT) / 2,
bitmap_zw1ixr, ZW1IXR_BMPWIDTH, ZW1IXR_BMPHEIGHT, 1);
display.display();
delay(2000);
}
void dispbasis(void){
display.clearDisplay();
display.drawLine(0,20,128,20,WHITE);
display.drawLine(27,20,27,32,WHITE);
display.drawLine(51,20,51,32,WHITE);
display.drawLine(77,20,77,32,WHITE);
display.drawLine(102,20,102,32,WHITE);
display.drawLine(127,0,123,7,WHITE);
display.drawLine(124,0,120,7,WHITE);
display.drawLine(121,0,117,7,WHITE);
display.drawLine(118,0,114,7,WHITE);
disp.setFont(u8g2_font_5x8_tf);
disp.setCursor(0,30);
disp.println("D:0,0");
disp.setCursor(39,30);
disp.println("ap");
disp.setCursor(63,30);
disp.println("in");
disp.setCursor(89,30);
disp.println("he");
disp.setCursor(114,30);
disp.println("fmj");
disp.setCursor(29,30);
disp.println(a);
disp.setCursor(53,30);
disp.println(a);
disp.setCursor(79,30);
disp.println(a);
disp.setCursor(104,30);
disp.println(a);
display.display();
}
void balken1(void){
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("COMM OK");
disp.setCursor(100,19);
disp.println("SEMI");
for(int i=1;i<90;i++){
display.fillCircle(i, 4, 3, WHITE);
delay(50);
display.display();
}
display.display();
}
void commok(void){
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("COMM OK");
disp.setCursor(100,19);
disp.println("SEMI");
display.display();
}
void dnacheck(void){
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("DNA CHECK");
disp.setCursor(95,19);
disp.println("RAPID");
for(int i=91;i<110;i++){
display.fillCircle(i, 4, 3, WHITE);
delay(50);
display.display();
}
display.display();
}
void idok(void){
mp3_play(4);
delay(1);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("I.D. OK");
disp.setCursor(95,19);
disp.println("SEMI");
display.display();
delay(1500);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("DREDD");
display.display();
}
void magazin(){
switch (wechselzaehler){
case 1:
disp.setFont(u8g2_font_5x8_tf);
display.drawLine(28,21,50,21,WHITE);
display.drawLine(28,22,50,22,WHITE);
display.drawLine(52,21,76,21,BLACK);
display.drawLine(52,22,76,22,BLACK);
display.drawLine(78,21,101,21,BLACK);
display.drawLine(78,22,101,22,BLACK);
display.drawLine(103,21,128,21,BLACK);
display.drawLine(103,22,128,22,BLACK);
display.fillRect(28,23,11,10,BLACK);
disp.setCursor(29,30);
disp.println(a);
display.fillRect(52,23,11,10,BLACK);
disp.setCursor(53,30);
disp.println(a);
display.fillRect(78,23,11,10,BLACK);
disp.setCursor(79,30);
disp.println(a);
display.fillRect(103,23,11,10,BLACK);
disp.setCursor(104,30);
disp.println(a);
display.display();
break;
case 2:
disp.setFont(u8g2_font_5x8_tf);
display.drawLine(28,21,50,21,BLACK);
display.drawLine(28,22,50,22,BLACK);
display.drawLine(52,21,76,21,WHITE);
display.drawLine(52,22,76,22,WHITE);
display.drawLine(78,21,101,21,BLACK);
display.drawLine(78,22,101,22,BLACK);
display.drawLine(103,21,128,21,BLACK);
display.drawLine(103,22,128,22,BLACK);
display.fillRect(28,23,11,10,BLACK);
disp.setCursor(29,30);
disp.println(a);
display.fillRect(52,23,11,10,BLACK);
disp.setCursor(53,30);
disp.println(a);
display.fillRect(78,23,11,10,BLACK);
disp.setCursor(79,30);
disp.println(a);
display.fillRect(103,23,11,10,BLACK);
disp.setCursor(104,30);
disp.println(a);
display.display();
break;
case 3:
disp.setFont(u8g2_font_5x8_tf);
display.drawLine(28,21,50,21,BLACK);
display.drawLine(28,22,50,22,BLACK);
display.drawLine(52,21,76,21,BLACK);
display.drawLine(52,22,76,22,BLACK);
display.drawLine(78,21,101,21,WHITE);
display.drawLine(78,22,101,22,WHITE);
display.drawLine(103,21,128,21,BLACK);
display.drawLine(103,22,128,22,BLACK);
display.fillRect(28,23,11,10,BLACK);
disp.setCursor(29,30);
disp.println(a);
display.fillRect(52,23,11,10,BLACK);
disp.setCursor(53,30);
disp.println(a);
display.fillRect(78,23,11,10,BLACK);
disp.setCursor(79,30);
disp.println(a);
display.fillRect(103,23,11,10,BLACK);
disp.setCursor(104,30);
disp.println(a);
display.display();
break;
case 4:
disp.setFont(u8g2_font_5x8_tf);
display.drawLine(28,21,50,21,BLACK);
display.drawLine(28,22,50,22,BLACK);
display.drawLine(52,21,76,21,BLACK);
display.drawLine(52,22,76,22,BLACK);
display.drawLine(78,21,101,21,BLACK);
display.drawLine(78,22,101,22,BLACK);
display.drawLine(103,21,128,21,WHITE);
display.drawLine(103,22,128,22,WHITE);
display.fillRect(28,23,11,10,BLACK);
disp.setCursor(29,30);
disp.println(a);
display.fillRect(52,23,11,10,BLACK);
disp.setCursor(53,30);
disp.println(a);
display.fillRect(78,23,11,10,BLACK);
disp.setCursor(79,30);
disp.println(a);
display.fillRect(103,23,11,10,BLACK);
disp.setCursor(104,30);
disp.println(a);
display.display();
break;
}
}
void magazinvoll(){
feuerzaehler = 0;
a=25;
disp.setFont(u8g2_font_5x8_tf);
disp.setCursor(29,30);
disp.println(a);
disp.setCursor(53,30);
disp.println(a);
disp.setCursor(79,30);
disp.println(a);
disp.setCursor(104,30);
disp.println(a);
display.display();
}
void SelectorPosition(){
switch(wechselzaehler){
case 1:
ap();
mp3_play(5);
delay(1);
feuerlicht();
break;
case 2:
in();
mp3_play(6);
delay(1);
inlicht();
break;
case 3:
he();
mp3_play(7);
delay(1);
helicht();
break;
case 4:
fmj();
mp3_play(8);
delay(1);
fmjlicht();
break;
}
}
void feuerlicht(){
for(int i=0; i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(255,0,0));
delay(10);
pixels.show();
}
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(0,0,0));
delay(5);
pixels.show();
}
}
void inlicht(){
for(int i=0; i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(250,180,0));
delay(10);
pixels.show();
}
for(int i=0; i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(0,0,0));
delay(5);
pixels.show();
}
}
void helicht(){
for(int i=0; i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(20,180,250));
delay(10);
pixels.show();
}
for(int i=0; i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(0,0,0));
delay(5);
pixels.show();
}
}
void fmjlicht(){
for(int i=0; i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(0,50,250));
delay(10);
pixels.show();
}
for(int i=0; i<NUMPIXELS;i++){
pixels.setPixelColor(i,pixels.Color(0,0,0));
delay(5);
pixels.show();
}
}
void ap(){
display.fillRect(0,0,113,8, BLACK);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("ARMOR PIERCER");
display.display();
}
void in(){
display.fillRect(0,0,113,8, BLACK);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("INCENDIARY");
display.display();
}
void he(){
display.fillRect(0,0,113,8, BLACK);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("HIGH EX");
display.display();
}
void fmj(){
display.fillRect(0,0,113,8, BLACK);
display.fillRect(0,8,128,11, BLACK);
disp.setFont(u8g2_font_crox1h_tf);
disp.setCursor(0,19);
disp.println("HOT SHOT");
display.display();
}