Error: invalid header file

Im have been trying to figure out why this error happens. I am working with tinkercad arudino IDE, which includes all the libraries.
Sorry for this long code.

#include <Servo.h>
#include <Keypad.h>

#include <Adafruit_LiquidCrystal.h>

//Display:
Adafruit_LiquidCrystal lcd_1(0);

//Servo:
Servo vaultservo;
int pos = 0;
//4x4 Keypad: *Quelle
const byte COLS = 4; 
const byte ROWS = 4;
char hexaKeys[ROWS][COLS]={
{'A','3','2','1'},
{'B','6','5','4'},
{'C','9','8','7'},
{'D','#','0','*'}
};
byte rowPins[ROWS] = {13,12,11,10};//Definition der Pins für die 4 Zeilen
byte colPins[COLS] = {6,7,8,9}; //Definition der Pins für die 4 Spalten
char key; //Taste ist die Variable für die jeweils gedrückte Taste.
Keypad keypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit "Tastenfeld" angesprochen werden
//password:
char savedpassword[4] = {'0','0','0','0'};
bool boolSavedPassword = false;
int passwordIndex = 0;
bool open = false; 
//LED:
int LEDgreen = 3;
int LEDblue = 4;
int LEDred = 5;

void setup()
{
  vaultservo.attach(0);
  lcd_1.begin(16, 2);
  lcd_1.setBacklight(1);
  pinMode(LEDgreen, OUTPUT);
  pinMode(LEDblue, OUTPUT);
  pinMode(LEDred, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);

}

void loop()
{
  LED();
  servo();

  key = keypad.getKey(); //key entspricht der gedrückten Taste

  if(key){ //sollte ein Knopf gedrückt werden
  	checkKey(key);
  }
}

void checkKey(char key){
	if (!boolSavedPassword && checkForNumber() ){
      Serial.println("Bitte drücken sie '*' um ein Passwort zu speichern");
      lcdPrint2("Press '*' to", "save password.");
    } else if (boolSavedPassword && key == '#' && !open){
        enterCode();
    } else if (key == 'A' || key == 'B' || key == 'C' || key == 'D'){
      	lcdPrint2("Button has no", "meaning.");
    } else if (key == '*' && !boolSavedPassword){
      	savePassword(); 
    } else if (key == '*' && boolSavedPassword){
      	resetPassword();
    } else {
      	Serial.println("Fehler");
    }
}

void savePassword(){
  lcdPrint2("Enter 4 digits", "to save password");
  while (!boolSavedPassword && passwordIndex <= 3){
    key = keypad.getKey();
    if (passwordIndex == 3){
      boolSavedPassword = true;
    }
    if (key && checkForNumber){
      savedpassword[passwordIndex] = key;
      passwordIndex++;
    } else {
     lcdPrint2("Error, please", "enter digits.");
    }
  }
  passwordIndex = 0;
  Serial.println(savedpassword);
  lcdPrint2("New password", "now is " + String(savedpassword));
  delay(400);
  lcdPrint2("Press '#' to", "enter code.");
}

void resetPassword(){
  if (open){
    key = keypad.getKey();
    lcdPrint2("Confirm: '*'","Cancel with any.");
    if (key == '*'){
    savePassword();
    } else if (key){
	  lcdPrint2("Cancelled", "reset.");
      delay(400);
      lcdPrint2("Close vault:'#'", "Reset vault:'*'");
   	  }
    } else {
    lcdPrint2("To reset code", "first open safe.");
    delay(300);
    lcdPrint2("Press '#' to", "enter code.");
    } 
}                    
                    
void enterCode(){
  char trypassword[4] = {'0','0','0','0'};
  String counter;
  bool samePassword = false;
  while (passwordIndex <= 3){
    counter = "";
    key = keypad.getKey();    
	for(int i=0; i < passwordIndex; i++){
      counter += "*";
	} lcdPrint2("counter", "nothing");
    trypassword[passwordIndex] = key;
    passwordIndex +=1;
  } 
  if (checkPassword(trypassword, savedpassword) == true){
    lcdPrint2("Correct code", "safe is now open");
    delay(400);
    lcdPrint2("Close vault:'#'", "Reset vault:'*'");
  } else {
    lcdPrint2("Wrong code", "try again.");
  } 
  passwordIndex = 0;
}

bool checkForNumber(){
  if (key == '1' ||key == '2' ||key == '3' ||key == '4' ||key == '5' ||key == '6' ||key == '7' ||key == '8' ||key == '9'){
    return true;
  } else {
  return false;
  }
}

bool checkPassword(char *tryPassw, char *password){
  bool samePassword = true;
  int index = 0;
  while(index <= 3 && samePassword == true){
    if (tryPassw[index] != password[index]){
    	samePassword = false;
    } 
    index++;
  }
  return samePassword;
}
             
                    
void LED(){ //schaltet den LED auf grün wenn der Tresor geöffnet ist, ansonsten auf rot wenn der Tresor geschlossen ist.
  if (open){
    analogWrite(LEDgreen, 200);
  } else {
    analogWrite(LEDred, 200);
  }
}

void servo(){
  if (open){
    for (pos = 0; pos <= 180; pos += 1) {
    vaultservo.write(pos);
    //delay(15); 
  	}
  } else {
      for (pos = 90; pos >= 0; pos -= 1) {
    vaultservo.write(pos);
    //delay(15); 
  	}
  }
}

void lcdPrint(int row, String printString){
  if (printString.length() <= 16){
    if (row == 1){
      lcd_1.setCursor(0, 0);
      lcd_1.print(printString);
    } else if (row == 2){
      lcd_1.setCursor(0, 1);
      lcd_1.print(printString);
    } else {
    Serial.println("Nicht die 1 oder 2 Zeile");
    }
  } else {
    Serial.println("String ist zu lang");
  }
}
               
void lcdPrint2(String row1String, String row2String){
  lcd_1.clear();
  lcdPrint(1, row1String);
  lcdPrint(2, row2String);
}

Which header does it complain about? Post the actual error message.


This is all I got, is there a way to get more information out?

You may need to ask the TinkerCad folks. This doesn't really look like an Arduino problem. It looks like you need help from someone who knows the TinkerCad stuff. Is there a forum for that IDE?

Have you tried the same code in the Arduino IDE?

No sadly there is no forum I have found. Is there a way to test code in Arduino IDE, without the actual hardware since tinkercad also simulates the hardware?

No, but you could at least see if it compiles. If it compiles on Arduino then you know the problem is with TinkerCad. If the Arduino IDE throws the same error then maybe it will be more descriptive. Or maybe someone here knows how to get more info out of it.

When I google "TinkerCad forum" I don't see anything like this but I do see a reddit and a facebook group and a google group. Maybe try one of those?

After trying some things I have found out that the error is being caused by calling the function enterCode() since the code works fine without calling the function. Now I can't figure out what the bug is.

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