What does redefinition of class Key mean?

I was coding for a Star Wars project and tried to upload it, but then it came up with an error and said "redefinition of 'class Key'". Does any body know what this means?


#include <Key.h>
#include <Keypad.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> 
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeSans12pt7b.h>


const byte ROWS = 4;
const byte COLS = 4;
 
char buttons[ROWS][COLS] = {
  {'pinMode(12,INPUT_PULLUP)', '/0', '/0', '/0'}
  {'pinMode(11,INPUT_PULLUP)', '/0', '/0', '/0'}
  {'pinMode(3,INPUT_PULLUP)', '/0', '/0', '/0'}
  {'/0', '/0', '/0', '/0'}
}
 
 
const int c = 261;
const int d = 294;
const int e = 329;
const int f = 349;
const int g = 391;
const int gS = 415;
const int a = 440;
const int aS = 455;
const int b = 466;
const int cH = 523;
const int cSH = 554;
const int dH = 587;
const int dSH = 622;
const int eH = 659;
const int fH = 698;
const int fSH = 740;
const int gH = 784;
const int gSH = 830;
const int aH = 880;


const unsigned char PROGMEM dioda16 [] = {


0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF,
0x7F, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00


};


const unsigned char PROGMEM storm [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C,
0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x04, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00,
0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40,
0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x01, 0x00,
0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF,
0xE1, 0x00, 0x01, 0xBF, 0xFC, 0x1F, 0xFA, 0x80, 0x01, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F,
0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x06, 0x80,
0x01, 0xE0, 0xC0, 0x03, 0x06, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xF8, 0x00, 0x00,
0x1D, 0xC0, 0x03, 0x70, 0x00, 0x80, 0x0C, 0x60, 0x05, 0xB0, 0x07, 0xF0, 0x08, 0x90, 0x09, 0x10,
0x1F, 0xF8, 0x09, 0xD0, 0x0B, 0x90, 0x1F, 0x7C, 0x03, 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90,
0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x00, 0x00,
0x26, 0x10, 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80,
0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x80, 0x00, 0x80, 0x0B, 0xE8, 0x00, 0x80,
0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF,
0xA0, 0x80, 0x00, 0x6B, 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E,
0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00
};






void setup()   {                
 


 
 pinMode(12,INPUT_PULLUP);//UP BUTTON
 pinMode(11,INPUT_PULLUP);//DOWN BUTTON
pinMode(3,INPUT_PULLUP); //TRIGGER BUTTON

 
                     display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
                                display.display();
                                           display.clearDisplay();
                                               display.setTextSize(0);
                                              display.drawBitmap(6, 11,storm, 48,48, 1);
                                      display.setFont(&FreeSans9pt7b);
                               display.setTextColor(WHITE);
                          display.setCursor(65,14);
  display.println("xWing");
   display.setFont();
  display.setCursor(65,17);
  display.setTextSize(0);
  display.println("vs");
  display.setCursor(0,0);
  float voltaza=readVcc()/1000;
  display.println(voltaza);;
                                      display.setFont(&FreeSans9pt7b);
                                                  display.setCursor(65,39);
                                                                    display.println("Death");
                                                                     display.setFont();
                                            display.setCursor(65,42);
                                                                display.println("star ");
                                                  display.setTextSize(0);
  
                                                display.setCursor(65,55);
 
                                                     display.println("by Danko");
   
                                                             display.setCursor(65,20);


                                                                          display.display();
   
 


display.setFont(); 
 beep(a, 500);
  beep(a, 500);    
  beep(a, 500);
  beep(f, 350);
  beep(cH, 150);  
  beep(a, 500);
  beep(f, 350);
  beep(cH, 150);
  beep(a, 650);
 
  delay(500);
 
 
 
  delay(500);
}
int metx=0;
int mety=0;
int postoji=0;
int nep=8;
int smjer=0;
int go=0;
int rx=95;
int ry=0;
int rx2=95;
int ry2=0;
int rx3=95;
int ry3=0;
int bodovi=0;


int brzina=3; //speed of bullet
int bkugle=1;
int najmanja=600;
int najveca=1200;
int promjer=10;


int rx4=95;
int ry4=0;
int zivoti=5;
int poc=0;
int ispaljeno=0;
int nivo=1;
int centar=95;
unsigned long pocetno=0;
unsigned long odabrano=0;
unsigned long trenutno=0;
unsigned long nivovrije=0;
int poz=30;
void loop() {


  if(go==0){
  display.clearDisplay();


                               display.drawPixel(50,30,1);
                                   display.drawPixel(30,17,1);
                                          display.drawPixel(60,18,1);
                                          display.drawPixel(55,16,1);
                              display.drawPixel(25,43,1);
                              display.drawPixel(100,43,1); 
                              display.drawPixel(117,52,1);
                              display.drawPixel(14,49,1);
                              display.drawPixel(24,24,1);
                              display.drawPixel(78,36,1);
display.drawPixel(80,57,1);
display.drawPixel(107,11,1);
display.drawPixel(150,11,1);
display.drawPixel(5,5,1);
display.drawPixel(8,7,1);
display.drawPixel(70,12,1);
display.drawPixel(10,56,1);
display.drawPixel(70,25,1);




  
  if(poc==0){
  pocetno=millis();
  odabrano= random(400,1200);
  poc=1;
  }
 trenutno=millis();




//nivoi


                                  if((trenutno-nivovrije)>50000)
{
                             nivovrije=trenutno;
  nivo=nivo+1;


 brzina=brzina+1; //brizna neprijateljevog metka
 if ( nivo % 2 == 0 )
    {
                                           bkugle=bkugle+1;
                                           promjer=promjer-1;
    }
                               najmanja=najmanja-50;
                                najveca=najveca-50;


  }






 if((odabrano+pocetno)<trenutno)
  {
    poc=0;
   ispaljeno=ispaljeno+1;
   if(ispaljeno==1)
   {rx=95;
    ry=nep;}
     if(ispaljeno==2){
      rx2=95;
      ry2=nep;}
      if(ispaljeno==3)
      {
        rx3=95;
          ry3=nep;
      }
  
      
     if(ispaljeno==4){
      rx4=95;
      ry4=nep;
     
     }
     
    
      
   }


  
    if(ispaljeno>0)
    {
    display.drawCircle(rx,ry,2,1);
                                    rx=rx-brzina;}


    if(ispaljeno>1)
    {
    display.drawCircle(rx2,ry2,1,1);
                                   rx2=rx2-brzina;}


     if(ispaljeno>2)
    {
    display.drawCircle(rx3,ry3,4,1);
                                   rx3=rx3-brzina;}


     if(ispaljeno>3)
    {
    display.drawCircle(rx4,ry4,2,1);
                                    rx4=rx4-brzina;}


 if(digitalRead(12)==0 && poz>=2){
                 poz=poz-2;}


  if(digitalRead(11)==0&& poz<=46){
                  poz=poz+2;}
  


   if(digitalRead(3)==0 && postoji==0)
  {
    postoji=1;
    metx=6;
    mety=poz+8;
    tone(9,1200,20);
  
    
    }
   if(postoji==1)


    {
    metx=metx+8 ;
    
    display.drawLine(metx,mety,metx+4,mety,1);
    }
   
                                display.drawBitmap(4, poz,dioda16, 16,16, 1);
                       display.fillCircle(centar,nep,promjer,1);
                display.fillCircle(centar+2,nep+3,promjer/3,0);
              
 display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(33,57);
  display.println("score:");
                     display.setCursor(68,57);
                                  display.println(bodovi);


                                          display.setCursor(33,0);
  display.println("lives:");
                             display.setCursor(68,0);
                                    display.println(zivoti);
   
   display.setCursor(110,0);
                               display.println("L:");


  display.setCursor(122,0);
                 display.println(nivo);


  display.setCursor(108,57);
  display.println(trenutno/1000);
   display.display();


   if(metx>128)postoji=0;
  
 
  
   if(smjer==0){
   nep=nep+bkugle;}
   else
   {nep=nep-bkugle;}


   if(nep>=(64-promjer))
   smjer=1;
   if(nep<=promjer)
   smjer=0;


   if(mety>=nep-promjer && mety<=nep+promjer)
   if(metx>(centar-promjer)&&metx<(centar+promjer))
   {
   metx=-20;
   tone(9,500,20);
   bodovi=bodovi+1;
   postoji=0;
   }


int pozicija=poz+8;
     if(ry>=pozicija-8 && ry<=pozicija+8)
   if(rx<12&&rx>4)
   {
   rx=95;
   ry=-50;
   tone(9,100,100);
 zivoti=zivoti-1;
   }


        if(ry2>=pozicija-8 && ry2<=pozicija+8)
   if(rx2<12&&rx2>4)
   {
   rx2=-50;
   ry2=-50;
   tone(9,100,100);
 zivoti=zivoti-1;
   }


      if(ry3>=pozicija-8 && ry3<=pozicija+8)
   if(rx3<12&&rx3>4)
   {
   rx3=-50;
   ry3=-50;
   tone(9,100,100);
 zivoti=zivoti-1;
   }


      if(ry4>=pozicija-8 && ry4<=pozicija+8)
   if(rx4<12&&rx4>4)
   {
   rx4=200;
   ry4=-50;
   ispaljeno=0;
   tone(9,100,100);
 zivoti=zivoti-1;
   }
 
if(rx4<1){
   ispaljeno=0;
   rx4=200;}


   if(zivoti==0)
   go=1;
  }


  if(go==1)
  {
    if(zivoti==0){
     tone(9,200,300);
     delay(300);
      tone(9,250,200);
      delay(200);
       tone(9,300,300);
       delay(300);
       zivoti=5;
    }
   display.clearDisplay();
   display.setFont();  
 display.setTextSize(2);
  display.setTextColor(WHITE);
    display.setCursor(7,10);
  display.println("GAME OVER!");
   display.setTextSize(1);
  display.setCursor(7,30);
   display.println("score:");
    display.setCursor(44,30);
    display.println(bodovi);
    display.setCursor(7,40);
    display.println("level:");
     display.setCursor(44,40);
     display.println(nivo);
     display.setCursor(7,50);
     display.println("time(s):");
       display.setCursor(60,50);
       
       display.println(trenutno/1000);
  display.display();


    if(digitalRead(3)==0)
    {
       tone(9,280,300);
     delay(300);
      tone(9,250,200);
      delay(200);
       tone(9,370,300);
       delay(300);
      ponovo();
    }
    }
}


void ponovo()
{
 metx=0;
 mety=0;
postoji=0;
 nep=8;
 smjer=0;
 go=0;
 rx=95;
 ry=0;
 rx2=95;
 ry2=0;
rx3=95;
ry3=0;
bodovi=0;


 brzina=3; //brizna neprijateljevog metka
bkugle=1;
 najmanja=600;
 najveca=1200;
 promjer=12;


 rx4=95;
ry4=0;
zivoti=5;
poc=0;
 ispaljeno=0;
nivo=1;
 pocetno=0;
 odabrano=0;
 trenutno=0;
nivovrije=0;
  
  
  
  
  }


long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  


  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring


  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
  uint8_t high = ADCH; // unlocks both


  long result = (high<<8) | low;


  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
}




void beep(int note, int duration)
{
  //Play tone on buzzerPin
  tone(9, note, duration);
 


  
    delay(duration);
    




  noTone(9);
 
  delay(50);
 
 
}```

I've been trying to figure it out for a few days but just can't seem to get it.

It said a whole lot more.

I have no idea what that is supposed to be.

It means that there is somewhere a class called Key and somewhere else is also a class called Key.

I do not get your error (yet) and after fixing your warnings/errors it compiles. First I suggest that you go to file -> preferences and set compiler warnings to ALL so you can see all the things that the compiler does not trust.

I suggest that you start by looking at and understanding (!!) the custom keypad example; the understanding is important. Once you have corrected the lines indicated by @anon73444976, you can start studying the examples so you can fix the errors / warnings that relate to that.

Notes:
Text between single quotes is a character constant and can therefore only contain one character. Both e.g. 'pinMode(11,INPUT_PULLUP)' and '/0' are multiple characters; for the latter, there is a difference between '\0' and '/0'.

Once you have fixed that, the compiler will complain about a missing variable called display. Again, study the examples (for the Adafruit_SSD1308 library this time) to figure that out.

Your topic has been moved to a more suitable location on the forum. Installation and Troubleshooting is not for problems with (nor for advise on) your project :wink: See About the Installation & Troubleshooting category.

OK.
{'pinMode(12,INPUT_PULLUP)', '/0', '/0', '/0'}
{'pinMode(11,INPUT_PULLUP)', '/0', '/0', '/0'}
{'pinMode(3,INPUT_PULLUP)', '/0', '/0', '/0'}
{'/0', '/0', '/0', '/0'}
}
{'pinmode(12,INPUT_PULLUP)', '/0', '/0', '/0'} That is for the button in the top right corner to make the X-wing go up.
{'pinmode(11,INPUT_PULLUP)', '/0', '/0', '/0'} That is for the button under the top right corner one to make the X-wing go down.
{'pinmode(3,INPUT_PULLUP), '/0', '/0', '/0'} That is for the X-wing to fire a bullet.

/0 Is supposed to tell the uno that that button isn't needed. I will provide a diagram of the circuit as soon as I find an animator thing. (Also, I'm a newbie at this, sooo...)

Um.... I think I forgot to mention that the computer I use is No.1, not mine, No.2, I can't really use it that often, and No.3, is a chromebook OS that is so old that it literally does not get security updates automaticlay even though it's only from like, 2019. Also, I'm sorry 4 not responding sooner. I'll see if I can go into so-called files.

  1. Single quotes, single characters.
  2. I think what you're trying to express is some kind of function pointer, but that won't work because of 1), and because C++ is a compiled language.
    So, back to basics, and a re-design.

OK, thx!!

I looked into that, I found where I'm actually supposed to go for problems like this. Thank you so much for trying to help. This hasn't been the only time that appeared in a code error message, so it'll probably help me in future problems. This also for @anon73444976 Thank you, too.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.