При программировании Arduino на C, как мы пишем два символа рядом друг с другом? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть следующий код для моего arduino, однако на ЖК-дисплее adafruit печатается только символ стрелки вниз, а не стрелка вверх, а затем стрелка вниз. (функция l oop пуста, поэтому я ее не включил).

#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

#define UP_ARROW 0
byte up[] = {4, 14, 31, 4, 4, 4, 0, 0};
#define DOWN_ARROW 1
byte down[] = {0, 0, 4, 4, 4, 31, 14, 4};

void setup() {
  lcd.clear();
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.createChar(UP_ARROW, up);
  lcd.write(UP_ARROW);
  lcd.setCursor(1,0);
  lcd.createChar(DOWN_ARROW, down);
  lcd.write(DOWN_ARROW);
}

Ответы [ 3 ]

2 голосов
/ 14 апреля 2020

Исходя из исходного кода вашей библиотеки,

void Adafruit_RGBLCDShield::createChar(uint8_t location, uint8_t charmap[]) {
  location &= 0x7; // we only have 8 locations 0-7
  command(LCD_SETCGRAMADDR | (location << 3));
  for (int i=0; i<8; i++) {
    write(charmap[i]);
  }
  command(LCD_SETDDRAMADDR);  // unfortunately resets the location to 0,0
}

Если бы я был вами, я бы создал символы в начале программы, затем поместите курсор и напишите их по мере необходимости.

0 голосов
/ 17 апреля 2020

Оказывается, моя проблема в том, что создание символа сбрасывает позицию курсора на (0,0), поэтому, когда я устанавливаю курсор на (0,1) и создаю стрелку вниз, он сбрасывает курсор на (0,0 ). Мое решение было сначала создать пользовательские символы, а затем установить курсор и написать их.

0 голосов
/ 15 апреля 2020

Из ссылки Arduino :

Примечание: при обращении к пользовательскому символу "0", если он не находится в переменной, необходимо привести его как байт, в противном случае компилятор выдает ошибку. См. Пример ниже.

В вашем примере UP_ARROW будет заменено на 0 в lcd.write(UP_ARROW);

Возможно, попробуйте: lcd.write(byte(UP_ARROW));

Надеюсь, это поможет.

...