• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
LCD_I2C problem z biblioteką
#1
Dzień dobry wszystkim.

Mam problem z biblioteką LCD I2c, co może być przyczyną takiego komunikatu :

Utilities.ino: In function 'void powerOn()':
Utilities:192: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:193: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:194: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:195: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:196: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:197: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:240: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:241: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:242: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:243: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:244: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:245: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:246: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:247: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities.ino: In function 'void powerOff()':
Utilities:262: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:263: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:264: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:265: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:266: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
Utilities:267: error: 'class LiquidCrystal_I2C' has no member named 'createChar_P'
'class LiquidCrystal_I2C' has no member named 'createChar_P'

Biblioteki zainstalowane z menadżera IDE. Próbowałem też inny i błąd jest ten sam.

Projekt :


Załączone pliki
.txt   Nowy dokument tekstowy (2).txt (Rozmiar: 1.79 KB / Pobrań: 4)
.zip   V1.2.2 Amp2 (1).zip (Rozmiar: 9.86 KB / Pobrań: 3)
 
Odpowiedź
#2
A gdzie w setupie "lcd.createChar();


https://www.arduino.cc/en/Reference/Liqu...CreateChar
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
(04-01-2020, 13:32)desoto100 napisał(a): Aż taki biegły to ja nie jestem, faktycznie nie ma takiego polecenia a próba dopisania go nic nie dała.


lcd.createChar znalazłem tutaj :
Kod:
void resetEEPROM() {
  lcd.setCursor(0, 0);
  lcd.print(F(" FACTORY RESET?"));
  lcd.setCursor(0, 1);
  lcd.print(F("YES           NO"));
  while (true) {
    input1Button.update();
    input4Button.update();
    if (input1Button.fell()) {
      lcd.setCursor(0, 0);
      lcd.print(F("   RESETTING!   "));
      delay(500);
      EEPROM.update(0 + EEPROMOFFSET, 0);
      EEPROM.update(1 + EEPROMOFFSET, 7);
      EEPROM.update(2 + EEPROMOFFSET, 7);
      EEPROM.update(3 + EEPROMOFFSET, 7);
      EEPROM.update(4 + EEPROMOFFSET, 36);
      EEPROM.update(5 + EEPROMOFFSET, 0);
      EEPROM.update(6 + EEPROMOFFSET, 0);
      EEPROM.update(7 + EEPROMOFFSET, 0);
      EEPROM.update(8 + EEPROMOFFSET, 0);
      EEPROM.update(9 + EEPROMOFFSET, 0);
      for (int addy = 0; addy < 4; addy++) {
        for (byte i = 0; i < 14; i++) {
          int address = i + 10 + EEPROMOFFSET + (addy * 14);
          EEPROM.update(address, pgm_read_byte(&(inputDefault[addy][i])));
        }
      }
      EEPROM.update(67 + EEPROMOFFSET, 0);
      EEPROM.update(68 + EEPROMOFFSET, 4);
      EEPROM.update(69 + EEPROMOFFSET, 4);
      EEPROM.update(70 + EEPROMOFFSET, 5);
      lcd.setCursor(0, 0);
      lcd.print(F("DEFAULT RESTORED"));
      delay(1000);
      break;
    }
    else if (input4Button.fell()) break;
  }
  input1Button.update();
  input4Button.update();
}

void clearChars(byte startLine, byte startCol, byte char2clear) {
  lcd.setCursor(startCol, startLine);
  for (byte c = 0; c < char2clear; c++) {
    lcd.print(" ");
  }
  lcd.setCursor(startCol, startLine);
}

int8_t encoderStatus() {
  long enc = myEnc.read();
  if (enc >= 4) {
    dimmingTimer = millis();
    myEnc.write(0);
#ifdef REVERSEENCODER
    return -1;
#else
    return 1;
#endif
  }
  else if (enc <= -4) {
    dimmingTimer = millis();
    myEnc.write(0);
#ifdef REVERSEENCODER
    return 1;
#else
    return -1;
#endif
  }
  else return 0;
}

void displayGraph(byte value, byte maxValue, byte chars2Use) {
  byte totalBars = chars2Use * 5;
  byte valuePosition = (float(value) / float(maxValue)) * totalBars;
  byte solidChars = valuePosition / 5;
  byte partChar = valuePosition % 5;
  byte blankChars = 0;
  if (value <= maxValue) {
    if (partChar > 0) blankChars = chars2Use - solidChars - 1;
    else blankChars = chars2Use - solidChars;
    for (byte i = 0; i < solidChars; i++)  lcd.write(255);
    if (partChar > 0) lcd.write(partChar - 1);
    for (byte i = 0; i < blankChars; i++) lcd.print("-");
  }
  else lcd.print(F("V>MV"));
}

void displaySplitGraph(byte value, byte halfPos, byte char2Display) {
  byte chars2Use = char2Display / 2 - 1;
  byte totalBars = chars2Use * 5;
  byte valuePosition;
  if (value > halfPos) valuePosition = ((float(value - halfPos) / float(halfPos)) * totalBars);
  else if (value < halfPos) valuePosition = (float(halfPos - value) / float(halfPos)) * totalBars;
  byte solidChars = valuePosition / 5;
  byte partChar = valuePosition % 5;
  byte blankChars = 0;
  if (partChar > 0) blankChars = chars2Use - solidChars - 1;
  else blankChars = chars2Use - solidChars;
  if (value > halfPos) {
    for (byte i = 0; i < chars2Use; i++) lcd.print("-");
    lcd.print("|~");
    for (byte i = 0; i < solidChars; i++)  lcd.write(255);
    if (partChar > 0) lcd.write(partChar - 1);
    for (byte i = 0; i < blankChars; i++) lcd.print("-");
  }
  else if (value < halfPos) {
    for (byte i = 0; i < blankChars; i++) lcd.print("-");
    if (partChar > 0) lcd.write(partChar + 3);
    for (byte i = 0; i < solidChars; i++)  lcd.write(255);
    lcd.write(127);
    lcd.print("|");
    for (byte i = 0; i < chars2Use; i++) lcd.print("-");
  }
  else {
    for (byte i = 0; i < chars2Use; i++) lcd.print("-");
    lcd.print("||");
    for (byte i = 0; i < chars2Use; i++) lcd.print("-");
  }
}

boolean flash(unsigned int delayTime) {
  static boolean flash = false;
  static uint32_t flashTimer = 0;
  if ((long)(millis() - flashTimer) > delayTime) {
    flash = 1 - flash;
    flashTimer = millis();
  }
  return flash;
}


void powerOn() {
  modeChanged = true;
  displayUpdate = true;
  inputChanged = true;
  updateName = true;
  mute = false;
  volume = EEPROM.read(0 + EEPROMOFFSET);
  treble = EEPROM.read(1 + EEPROMOFFSET);
  middle = EEPROM.read(2 + EEPROMOFFSET);
  bass = EEPROM.read(3 + EEPROMOFFSET);
  balance = EEPROM.read(4 + EEPROMOFFSET);
  currentInput = EEPROM.read(5 + EEPROMOFFSET);
  powerOnInput = currentInput;
  for (byte i = 0; i < 4; i++) {
    inputLevel[i] = EEPROM.read(i + 6 + EEPROMOFFSET);
  }
  rgbHue = EEPROM.read(67 + EEPROMOFFSET);
  if (rgbHue > 16) {
    rgbHue = 0;
    EEPROM.update(67 + EEPROMOFFSET, rgbHue);
  }
  rgbBri = EEPROM.read(68 + EEPROMOFFSET);
  rgbSat = EEPROM.read(69 + EEPROMOFFSET);
  autoBacklightDelay = EEPROM.read(70 + EEPROMOFFSET);
  digitalWrite(shutdownPin, HIGH); // turn on power
  setSelectorVolume(40);
  delay(1); // short delay to allow amp to bootup
  //  volumeControl(volume);
  setTone(0, bass);
  setTone(1, middle);
  setTone(2, treble);
  setInputBoard(currentInput);
  setGain(inputLevel[currentInput]);
  setSelectorVolume(5);
  setBalance(balance);
  lcd.clear();

  lcd.createChar_P(0, audion1);
  lcd.createChar_P(1, audion2);
  lcd.createChar_P(2, audion3);
  lcd.createChar_P(3, audion4);
  lcd.createChar_P(4, audion5);
  lcd.createChar_P(5, audion6);
  if (rgbBacklight) {
    setHue(80);
    setSaturation(255);
    setBright(255);
  }
  else {
    lcd.backlight();
  }
  lcd.setCursor(0, 1);
  lcd.print(F("   TONE  DA-2004"));
  lcd.setCursor(0, 0);
  lcd.write(0);
  lcd.write(1);
  lcd.write(2);
  lcd.setCursor(0, 1);
  lcd.write(3);
  lcd.write(4);
  lcd.write(5);
#ifdef DEBUG
  lcd.setCursor(5, 0);
  lcd.print(F(FIRMWAREVERSION));
#endif
  unsigned long millisStart = millis();
  unsigned int volumeTimer = 1000 / volume;
  unsigned long millisVolume = millisStart;
  byte tempVolume = 0;
  while ((long)(millis() - millisStart <= 2000)) {
    if ((long)(millis() - millisVolume > volumeTimer)) {
      millisVolume += volumeTimer;
      if (tempVolume < volume) {
        tempVolume++;
        volumeControl(tempVolume);
      }
    }
  }
  lcd.clear();
  lcd.createChar_P(0, barR1);
  lcd.createChar_P(1, barR2);
  lcd.createChar_P(2, barR3);
  lcd.createChar_P(3, barR4);
  lcd.createChar_P(4, barL1);
  lcd.createChar_P(5, barL2);
  lcd.createChar_P(6, barL3);
  lcd.createChar_P(7, barL4);
  if (rgbBacklight) {
    setHue(rgbHue * 16);
    setBright(((rgbBri + 4) * 32) - 1);
    if (rgbSat == 0) setSaturation(0);
    else setSaturation((rgbSat * 64) - 1);
  }
}

void powerOff() {
  lcd.clear();
  lcd.createChar_P(0, audion1);
  lcd.createChar_P(1, audion2);
  lcd.createChar_P(2, audion3);
  lcd.createChar_P(3, audion4);
  lcd.createChar_P(4, audion5);
  lcd.createChar_P(5, audion6);
  if (rgbBacklight) {
    setHue(80);
    setBright(255);
    setSaturation(255);
  }
  lcd.setCursor(0, 1);
  lcd.print(F("   TONE  DA-2004"));
  lcd.setCursor(0, 0);
  lcd.write(0);
  lcd.write(1);
  lcd.write(2);
  lcd.setCursor(0, 1);
  lcd.write(3);
  lcd.write(4);
  lcd.write(5);
  if (bitRead(valueChange, changeBit)) {
    if (bitRead(valueChange, volumeBit)) {
#ifdef DEBUG
      Serial.println(F("EEPROM Update Volume"));
#endif
      EEPROM.update(0 + EEPROMOFFSET, volume);
      bitClear(valueChange, volumeBit);
    }
    if (bitRead(valueChange, trebleBit)) {
#ifdef DEBUG
      Serial.println(F("EEPROM Update Treble"));
#endif
      EEPROM.update(1 + EEPROMOFFSET, treble);
      bitClear(valueChange, trebleBit);
    }
    if (bitRead(valueChange, middleBit)) {
#ifdef DEBUG
      Serial.println(F("EEPROM Update Midrange"));
#endif
      EEPROM.update(2 + EEPROMOFFSET, middle);
      bitClear(valueChange, middleBit);
    }
    if (bitRead(valueChange, bassBit)) {
#ifdef DEBUG
      Serial.println(F("EEPROM Update Bass"));
#endif
      EEPROM.update(3 + EEPROMOFFSET, bass);
      bitClear(valueChange, bassBit);
    }
    if (bitRead(valueChange, balanceBit)) {
#ifdef DEBUG
      Serial.println(F("EEPROM Update Balance"));
#endif
      EEPROM.update(4 + EEPROMOFFSET, balance);
      bitClear(valueChange, balanceBit);
    }
    bitClear(valueChange, changeBit);
    valueChange = false;
  }
  if (currentInput != powerOnInput) {
    EEPROM.update(5 + EEPROMOFFSET, currentInput);
#ifdef DEBUG
    Serial.println(F("EEPROM Update Selected Input"));
#endif
  }
  unsigned long millisStart = millis();
  unsigned int volumeTimer = 1000 / 35;
  unsigned long millisVolume = millisStart;
  byte tempVolume = 5;
  while ((long)(millis() - millisStart <= 2000)) {
    if ((long)(millis() - millisVolume > volumeTimer)) {
      millisVolume += volumeTimer;
      if (tempVolume < 40) {
        tempVolume++;
        setSelectorVolume(tempVolume);
      }
      else {
        setSelectorVolume(56);
        volumeControl(0);
        digitalWrite(shutdownPin, LOW); // turn off power
      }
    }
  }
  lcd.clear();
  //  displayon(false);
  if (rgbBacklight) setBright(0);
  else lcd.noBacklight();
}

void setupMenu() {
  byte currentSelection = 0;
  lcd.clear();
  lcd.print(F("SETUP MENU"));
  displayUpdate = true;
  do {
    muteButton.update();
    input4Button.update();
    lcd.setCursor(0, 1);
    if (currentSelection == 0) {
      if (displayUpdate) {
        lcd.print(F("VER: "));
        clearChars(1, 5, 11);
        lcd.print(FIRMWAREVERSION);
        displayUpdate = false;
      }
    }
    else if (currentSelection == 1) {
      lcd.print(F("RGB: "));
      if (rgbBacklight) {
        if (displayUpdate) {
          clearChars(1, 5, 11);
          rgbColourPrint(rgbHue, 1, 5);
          displayUpdate = false;
        }
        if (muteButton.fell()) {
          lcd.setCursor(0, 1);
          lcd.print(F("RGB> "));
          while (1) {
            muteButton.update();
            if (displayUpdate) {
              clearChars(1, 5, 11);
              rgbColourPrint(rgbHue, 1, 5);
              displayUpdate = false;
            }
            byte encoder = encoderStatus();
            if (encoder != 0) {
              rgbHue += encoder;
              if (rgbHue > 15 && rgbHue < 255) rgbHue = 0;
              else if (rgbHue == 255) rgbHue = 15;
              //              if (rgbHue <= 15) {
              setHue(rgbHue * 16);
              //              setSaturation(255);
              //              }
              displayUpdate = true;
            }
            if (muteButton.fell()) {
              EEPROM.update(67 + EEPROMOFFSET, rgbHue);
              break;
            }
          }
        }
      }
      else {
        if (displayUpdate) {
          clearChars(1, 5, 11);
          lcd.print(F("NA"));
          displayUpdate = false;
        }
      }
    }
    else if (currentSelection == 2) {
      lcd.print(F("BRI:"));
      if (rgbBacklight) {
        if (displayUpdate) {
          //          clearChars(1, 5, 11);
          lcd.setCursor(4, 1);
          lcd.print(F("[          ]"));
          lcd.setCursor(5, 1);
          displayGraph(rgbBri, 4, 10);
          displayUpdate = false;
        }
        if (muteButton.fell()) {
          lcd.setCursor(0, 1);
          lcd.print(F("BRI>"));
          while (1) {
            muteButton.update();
            if (displayUpdate) {
              lcd.setCursor(4, 1);
              lcd.print(F("[          ]"));
              lcd.setCursor(5, 1);
              displayGraph(rgbBri, 4, 10);
              displayUpdate = false;
            }
            byte encoder = encoderStatus();
            if (encoder != 0) {
              rgbBri += encoder;
              if (rgbBri > 4 && rgbBri < 255) rgbBri = 4;
              else if (rgbBri == 255) rgbBri = 0;
              setBright(((rgbBri + 4) * 32) - 1);
              displayUpdate = true;
            }
            if (muteButton.fell()) {
              EEPROM.update(68 + EEPROMOFFSET, rgbBri);
              break;
            }
          }
        }
      }
      else {
        if (displayUpdate) {
          clearChars(1, 5, 11);
          lcd.print(F("NA"));
          displayUpdate = false;
        }
      }

    }
    else if (currentSelection == 3) {
      lcd.print(F("SAT:"));
      if (rgbBacklight) {
        if (displayUpdate) {
          //          clearChars(1, 5, 11);
          lcd.setCursor(4, 1);
          lcd.print(F("[          ]"));
          lcd.setCursor(5, 1);
          displayGraph(rgbSat, 4, 10);
          displayUpdate = false;
        }
        if (muteButton.fell()) {
          lcd.setCursor(0, 1);
          lcd.print(F("SAT>"));
          while (1) {
            muteButton.update();
            if (displayUpdate) {
              lcd.setCursor(4, 1);
              lcd.print(F("[          ]"));
              lcd.setCursor(5, 1);
              displayGraph(rgbSat, 4, 10);
              displayUpdate = false;
            }
            byte encoder = encoderStatus();
            if (encoder != 0) {
              rgbSat += encoder;
              if (rgbSat > 4 && rgbSat < 255) rgbSat = 4;
              else if (rgbSat == 255) rgbSat = 0;
              if (rgbSat == 0) setSaturation(0);
              else setSaturation((rgbSat * 64) - 1);
              displayUpdate = true;
            }
            if (muteButton.fell()) {
              EEPROM.update(69 + EEPROMOFFSET, rgbSat);
              break;
            }
          }
        }
      }
      else {
        if (displayUpdate) {
          clearChars(1, 5, 11);
          lcd.print(F("NA"));
          displayUpdate = false;
        }
      }
    }
    else if (currentSelection == 4) {
      lcd.print(F("BL TIME:"));
      if (displayUpdate) {
        lcd.setCursor(8, 1);
        //          clearChars(1, 8, 8);
        if (delayOptions[autoBacklightDelay] < 9) lcd.print("0");
        lcd.print(delayOptions[autoBacklightDelay]);
        lcd.setCursor(10, 1);
        lcd.print(F(" MINS "));
        displayUpdate = false;
      }
      if (muteButton.fell()) {
        lcd.setCursor(0, 1);
        lcd.print(F("BL TIME>"));
        while (1) {
          muteButton.update();
          if (displayUpdate) {
            lcd.setCursor(8, 1);
            if (delayOptions[autoBacklightDelay] < 9) lcd.print("0");
            lcd.print(delayOptions[autoBacklightDelay]);
            displayUpdate = false;
          }
          byte encoder = encoderStatus();
          if (encoder != 0) {
            autoBacklightDelay += encoder;
            if (autoBacklightDelay > 7 && autoBacklightDelay < 255) autoBacklightDelay = 0;
            else if (autoBacklightDelay == 255) autoBacklightDelay = 7;
            displayUpdate = true;
          }
          if (muteButton.fell()) {
            EEPROM.update(70 + EEPROMOFFSET, autoBacklightDelay);
            break;
          }
        }
      }
    }

    byte encoderPos = encoderStatus();
    if (encoderPos != 0) {
      currentSelection += encoderPos;
      displayUpdate = true;
    }
    if (currentSelection > 4 && currentSelection < 255) currentSelection = 0;
    else if (currentSelection == 255) currentSelection = 4;
  } while (input4Button.read());
  while (input4Button.read() == 0) {
    displayUpdate = true;
    updateName = true;
    modeChanged = true;
    input4Button.update();
    powerButton.update();
  }
}

void rgbColourPrint(byte hueIn, byte line, byte col) {
  clearChars(line, col, 16);
  lcd.setCursor(col, line);
  switch (hueIn) {
    case 0:
      lcd.print(F("RED"));
      break;
    case 1:
      lcd.print(F("FIRE"));
      break;
    case 2:
      lcd.print(F("ORANGE"));
      break;
    case 3:
      lcd.print(F("GOLD"));
      break;
    case 4:
      lcd.print(F("YELLOW"));
      break;
    case 5:
      lcd.print(F("LIME"));
      break;
    case 6:
      lcd.print(F("GREEN"));
      break;
    case 7:
      lcd.print(F("FERN"));
      break;
    case 8:
      lcd.print(F("SAPPHIRE"));
      break;
    case 9:
      lcd.print(F("SKY"));
      break;
    case 10:
      lcd.print(F("BLUE"));
      break;
    case 11:
      lcd.print(F("BERRY"));
      break;
    case 12:
      lcd.print(F("PURPLE"));
      break;
    case 13:
      lcd.print(F("MAGENTA"));
      break;
    case 14:
      lcd.print(F("HOT PINK"));
      break;
    case 15:
      lcd.print(F("STRAWBERRY"));
      break;
  }
}


void autoBacklight(byte mode) { // mode: 0 = no auto/backlight on | 1 = automatic mode
  unsigned long timing = delayOptions[autoBacklightDelay] * 60000;
  byte brightnessLevel = ((rgbBri + 4) * 32) - 1;
  if (mode == 0 || timing == 0) {
    if (rgbBacklight) setBright(brightnessLevel);
    else lcd.backlight();
  }
  else {
    if ((long)(millis() - dimmingTimer) >= timing) {
      if (rgbBacklight) setBright(brightnessLevel / 2);
      else lcd.noBacklight();
    }
    else {
      if (rgbBacklight) setBright(brightnessLevel);
      else lcd.backlight();
    }
  }
}
 

 Rozwiązany - Problem tkwił w bibliotece LCD_I2C. 
 Gdyby ktoś miał podobny problem poprawiona biblioteka :
.zip   LiquidCrystal_I2C.zip (Rozmiar: 20.05 KB / Pobrań: 3)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości