Lasertag Oled Probleme

Anders rum so manch macht mit dem was er schon mal angefasst hat, und meisten hat nur Angst vor neuem, und wenn man das überwunden hat scheut nicht mehr so

genau, ich will nicht für jedes neue Projekt mir eine andere libary anschauen müssen

Ganz falsche Denkweise, wie jetziger Fall zeigt das.
Und ja ich habe ach meine lieblings Lib nur wen es hackt dann nehme andere einarbeite mich rein fertig.

Das kann ich gut verstehen. Nur wenn es nicht passt, musst du halt die Library überarbeiten.
In der Hoffnung, dass die dann für deine anderen (100) Projekte passt.
Aber wird schon.
Und dann hast du doch wieder mehrere (unterschiedliche) Libraries.

Aber nochmal, hast du dir die Alternative in Post #14 angesehen ?

okay, dann harke ich das Thema ab und die Lösung lautet wenn man Rrremote und ein oled Display verwenden möchte benutzt man u8g2.

Mein funktionierender code:

/*
Board: arduino nano
Display (Oled 64*128 ): A4,A5
MP3-TF-16P (AS21CN270A Chip): 9, 10 (mit jeweils einem 1k ohm wiederstand)
IRsend Pin: 3  (Mit transistor verstärkt (npn))
IR Empfänger: Pin 2
*/
#include "Arduino.h"
#include "U8g2lib.h"  
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <IRremote.h>  //IR funktionen funktionieren nur mit der version 2.8.0 ohne probleme                   
//display
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0);
//DFPlayer
SoftwareSerial mySoftwareSerial(10,9); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
//Variablen
unsigned int LIVE = 10;
unsigned int AMMO = 10;                         
//leds
const int LEDm = 13;                    //mündungsfeuer
//buttons
unsigned int nachladen = 5;             //nachladeknopf
unsigned int buttonState1 = 0;

unsigned int wiederbeleben = 6;        //wiederbeleben
unsigned int buttonState2 = 0;

unsigned int ueberbruecken = A3;         //überbrücken (simuliert Treffer )
unsigned int buttonState3 = 0;

unsigned int Trigger = 4;              //Trigger
unsigned int buttonState = 0;                        
//......


int RECV_PIN = 2;                          //ir empfänger pin
IRsend irsend;                            

IRrecv irrecv(RECV_PIN) ;
decode_results results;
void setup()//_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
     Serial.begin(115200);
//IR Input
  irrecv.enableIRIn(); 
//Display 
  u8g2.begin();                              
  u8g2.setFont(u8g2_font_helvB10_tr);        


pinMode(LEDm, OUTPUT);                          //mündungsfeuer auf output
digitalWrite(LEDm, LOW);                        //mündungsfeuer low

    pinMode(nachladen, INPUT_PULLUP);         //nachladeknopf
    pinMode(wiederbeleben, INPUT_PULLUP);     //wiederbeleben
    pinMode(ueberbruecken, INPUT_PULLUP);       //überbrücken
    pinMode(Trigger, INPUT_PULLUP);       //Trigger
    buttonState2 = digitalRead(wiederbeleben);
    buttonState3 = digitalRead(ueberbruecken);
    buttonState1 = digitalRead(nachladen);
    buttonState = digitalRead(Trigger);
  
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
  mySoftwareSerial.begin(9600);
  
  Serial.println();
  Serial.println(F("DFPlayer Mini "));
  Serial.println(F("Initializing DFPlayer ..."));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  myDFPlayer.volume(15);  //Set volume value (0~30).
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 


}
void Print(byte x, byte y, String text, int8_t value)//Oled Display_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{                                                    
  if (value >= 0)                                    
  {                                                  
    text += String(value);                           
  }                                                  
  u8g2.drawStr(x, y, text.c_str());                  
}                                                    
void IRIN()//Treffer-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
    if (irrecv.decode(&results)) {
    if (LIVE > 0){  
Serial.println(results.value, DEC);
   
if (results.value == 01)
{
     myDFPlayer.play(2);
  LIVE--;
Serial.print("Getroffen, ");
Serial.print(LIVE);
Serial.println(" Leben Verbleibend");
}
irrecv.resume();
}
  }
}
void HANDLETrigger()//Trigger_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
     if (digitalRead(Trigger) == HIGH) {       //ist Trigger high

 if ((AMMO > 0) && (AMMO < 100)){                            //ist ammo größer als 0 und ist ammo kleiner als 100 für debug
 if ((LIVE > 0) && (LIVE < 100)){ 
//disableIRIn
   irrecv.disableIRIn();
// irsend
    irsend.sendRC5(01, 32); 
//Mündungs Led
  digitalWrite(LEDm, HIGH);
  delay(50);
  digitalWrite(LEDm, LOW);
// Aktivieren des IR Empfänger nach dem Senden des Signals
    irrecv.enableIRIn();
//Munition abziehen
AMMO --;   
 //MP3 Play 3                                             
  myDFPlayer.play(3);
//Serieler output (Diagnose)
Serial.println("Schuss ");                         
Serial.print(AMMO);                                   //serial    wie viel ammo wurde verscossen (zahl)
Serial.println(" Verbleibend ");
//Ammo out                                                                                           
  }
  }else{
if ((LIVE > 0) && (LIVE < 100)){
 Serial.println("ammo out   ");                          //serial   ammo out
 myDFPlayer.play(4);  
}
  } 
   delay(100);
}  
}

void HANDLEueberbruecken()//Treffer simulieren für Tests_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
  
   if (digitalRead(ueberbruecken) == HIGH) {                //ist ueberbruecken high
     if (LIVE > 0){ 
   LIVE --;                                                 //live -1
    myDFPlayer.play(2); 
} 
   }   
}
void HANDLEwiederbeleben()//Wiederbeleben-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
     if (digitalRead(wiederbeleben) == HIGH) {       //ist wiederbeleben high
   delay(10000);                              
    LIVE =10;                                  //LIVE wird auf 10 gesetzt
   }
}
void HANDLEnachladen()//Nachladen_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
     if (digitalRead(nachladen) == HIGH) {       //ist nachladen high
   if ((LIVE > 0) && (AMMO < 10)){   
 myDFPlayer.play(1);
    AMMO =10;                                  //ammo wird auf 10 gesetzt
   }
   }
}
void HANDLEDEBUG()//debug_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
if (AMMO > 10){                                   //ist ammo größer als 10  
    AMMO =0;}                                     //setze ammo auf null (debuging)

if (LIVE > 10){                                   //ist live größer als 10  
    LIVE =0;}                                     //setze live auf null (debuging)
  
}
void HANDLEDISPLAY()//Display-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{
  IRIN();
  HANDLETrigger();
  HANDLEnachladen();
  HANDLEwiederbeleben();
  HANDLEueberbruecken();
  HANDLEDEBUG();
  {
  u8g2.firstPage();
  do{
 if ((AMMO > 0) && (LIVE > 0)){
    
   Print(0, 15, "Ammo: ", AMMO);
   Print(0, 30, "LIVE: ", LIVE);
   
}else{
   if (LIVE > 0){ 
     Print(0, 15, "Ammo out                                        ", AMMO);
     Print(0, 30, "LIVE: ", LIVE);
   }else{
    AMMO = 0;
    Print(0, 30, "DEATH!                                       ", LIVE);
   }
   
}
  } while ( u8g2.nextPage() );

}
}
void loop()//_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
{

  HANDLEDISPLAY();
  
}

Das sehe ich ganz anders, es gibt sicher Alternativen, die du aber nicht sehen willst.

Aber OK, wenn es dann so bei dir funktioniert, ist es doch gut.
Danke für deine Aufklärung.

das wäre tatsächlich eine idee für ein kabeloses ir Empfänger Stirnband.
aber sonst zu aufwendig, da nehme ich lieber u8g2

hast du den eine idee für eine alternative?

Die hatte ich dir genannt und weitere musst du recherchieren, da ich deine Hardware nicht aktiv hier laufen habe.

ich habe keine alternative zur irremote lib gefunden und keine oled lib die so komplex ist wie die Adafruid 1306 oder u8g2

Ok, deine Anforderungen hattes du bisher noch nicht beschrieben.
Ich kenne sie nun auch nicht alle....
Dann gibt's halt nur die "eine".

Na ja am Anfang denkt man so :wink: nur wen du mall ein Farbdisplay nimmst, wirst feststellen das die beide doch Spielzeug sind.

Du beliegst sich selber das wird nei und niemals funktionieren :wink:
Also so viel zu

Noch ein kleiner Tipp, drücke in der IDE STRG +T dadurch hast bessere übersticht über fehlende Zeichen usw. Der Text wird formatiert und die meisten Fehler angezeigt bevor der Compiler meckert.

naja ich habe ihn getestet und er funktionirt:

so wird das niemals funktionieren

 Print(0, 30, "DEATH!" );

so schon :wink:

Stell deine IDE so ein
image

scrol mal nach rechts

Du übersiehst die zahlreichen und unnötigen Leerzeichen.

weist du warum das noch funktioniert nur wegen dem Ausrufezeichen. Wenn du zu Death kommst ist Feierabend , so wie jetzt bei mir :wink:

das problem ist, das ich bei u8g2 ein format festlegen mus, also ("variable", variable)
bei DEATH! soll aber keine variable stehen also habe ich das einfachste für mich gemacht und die variable aus dem bild geschoben