Символы для дисплея 1602
- Войдите на сайт для отправки комментариев
Чт, 06/09/2018 - 13:41
Добрый день, помогите актуализировать символы для дисплея 1602. Хочу создать две шкалы, которые будут уменьшаться или заполняться в зависимости от потенциометра. С одной шкалой проблем нет, а вот как на экран вывести две шкалы от двух потенциометров? с моим кодом они не контактируют .. Помогите советами.
byte black[8] =
{
0B11111,
0B11111,
0B11111,
0B11111,
0B11111,
0B11111,
0B11111,
0B11111
};
byte white[8] =
{
0B11111,
0B10001,
0B10001,
0B10001,
0B10001,
0B10001,
0B10001,
0B11111
};
lcd.createChar(8,black); lcd.createChar(9,white);
вызываю символы
lcd.write();
if (benzun_ico >= 90){
lcd.clear();
lcd.setCursor(0, 1);
lcd.write(8);
lcd.setCursor(1, 1);
lcd.write(8);
lcd.setCursor(2, 1);
lcd.write(8);
lcd.setCursor(3, 1);
lcd.write(8);
lcd.setCursor(4, 1);
lcd.write(8);
lcd.setCursor(5, 1);
lcd.write(8);
lcd.setCursor(6, 1);
lcd.write(8);
}
if (benzun_ico >= 75 && benzun_ico <= 89){
lcd.clear();
lcd.setCursor(0, 1);
lcd.write(8);
lcd.setCursor(1, 1);
lcd.write(8);
lcd.setCursor(2, 1);
lcd.write(8);
lcd.setCursor(3, 1);
lcd.write(8);
lcd.setCursor(4, 1);
lcd.write(8);
lcd.setCursor(5, 1);
lcd.write(8);
lcd.setCursor(6, 1);
lcd.write(9);
}
if (benzun_ico >= 60 && benzun_ico <= 74){
lcd.clear();
lcd.setCursor(0, 1);
lcd.write(8);
lcd.setCursor(1, 1);
lcd.write(8);
lcd.setCursor(2, 1);
lcd.write(8);
lcd.setCursor(3, 1);
lcd.write(8);
lcd.setCursor(4, 1);
lcd.write(8);
lcd.setCursor(5, 1);
lcd.write(9);
lcd.setCursor(6, 1);
lcd.write(9);
}
if (benzun_ico >= 45 && benzun_ico <= 59){
lcd.clear();
lcd.setCursor(0, 1);
lcd.write(8);
lcd.setCursor(1, 1);
lcd.write(8);
lcd.setCursor(2, 1);
lcd.write(8);
lcd.setCursor(3, 1);
lcd.write(8);
lcd.setCursor(4, 1);
lcd.write(9);
lcd.setCursor(5, 1);
lcd.write(9);
lcd.setCursor(6, 1);
lcd.write(9);
}
if (benzun_ico >= 30 && benzun_ico <= 44){
lcd.clear();
lcd.setCursor(0, 1);
lcd.write(8);
lcd.setCursor(1, 1);
lcd.write(8);
lcd.setCursor(2, 1);
lcd.write(8);
lcd.setCursor(3, 1);
lcd.write(9);
lcd.setCursor(4, 1);
lcd.write(9);
lcd.setCursor(5, 1);
lcd.write(9);
lcd.setCursor(6, 1);
lcd.write(9);
}
if ( benzun_ico >= 15 && benzun_ico <= 29 ){
lcd.clear();
lcd.setCursor(0, 1);
lcd.write(8);
lcd.setCursor(1, 1);
lcd.write(8);
lcd.setCursor(2, 1);
lcd.write(9);
lcd.setCursor(3, 1);
lcd.write(9);
lcd.setCursor(4, 1);
lcd.write(9);
lcd.setCursor(5, 1);
lcd.write(9);
lcd.setCursor(6, 1);
lcd.write(9);
}
if ( benzun_ico >= 0 && benzun_ico <= 14 ){
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("LOW");
lcd.setCursor(0, 1);
lcd.write(8);
lcd.setCursor(1, 1);
lcd.write(9);
lcd.setCursor(2, 1);
lcd.write(9);
lcd.setCursor(3, 1);
lcd.write(9);
lcd.setCursor(4, 1);
lcd.write(9);
lcd.setCursor(5, 1);
lcd.write(9);
lcd.setCursor(6, 1);
lcd.write(9);
}
То есть, если дублировать просто в вправо, он перезаписывает левую шкалу (
а попонятнее?
помогите актуализировать символы для дисплея 1602.
Чего сделать?
Хочу создать две шкалы, которые будут уменьшаться или заполняться в зависимости от потенциометра.
А поподробее? Где они будут располагаться, в разных строках В разных концах одной строки? Какого они размера? Каковы правила их рисования?
С одной шкалой проблем нет
Судя по приведённому коду - есть и очень серьёзные. Кстати, именно эти проблемы и не дают сделать две шкалы.
как на экран вывести две шкалы от двух потенциометров?
По очереди. Сначала одну, потому другую. Можно и параллельно, заполняя обе, напмриер слева направо. Как Вам удобнее, так и выводите.
с моим кодом они не контактируют ..
Не знаю кто с кем контактирует, но в том огрызке без начала и без конца, который Вы называете кодом, не содержится никаких попыток сделать две шкалы. Вы просто не пробовали.
То есть, если дублировать просто в вправо, он перезаписывает левую шкалу (
Это я совсем не понял. Кто "он"? Куда перезаписывает? Вы вообще понимаете, кто главный на компьютере? Вы или "он"? Делайте как Вам надо и не позволяйте "ему" лезть не в своё дело.
Помогаю.
Сначала сделайте одну шкалу. Нормально, а не так, как у Вас. Рисование одной шкалы должно выглядеть как вызов функции с параметрами: "начало шкалы", "длина шкалы", "отображаемое значение".
А когда Вы это сделаете, просто вызовите эту функцию два раза с разными параметрами "начало" и "значение". Вот они у Вас две и нарисуются.
И ещё, по секрету, вместо вызова write для каждого симовла с последующей установкой курсора, можно воспользоваться методом print - он печатает сразу столько символов, сколько надо. Ну, или циклом, на худой конец.
Хочу создать две шкалы, которые будут уменьшаться или заполняться в зависимости от потенциометра.
Например так:
//****************************************************************** #define ADJ_PIN1 A0 #define ADJ_PIN2 A1 byte black[8] = { 0B11111, 0B11111, 0B11111, 0B11111, 0B11111, 0B11111, 0B11111, 0B11111 }; byte white[8] = { 0B11111, 0B10001, 0B10001, 0B10001, 0B10001, 0B10001, 0B10001, 0B11111 }; int benzun_ico1 = -100; int benzun_ico2 = -100; void setup() { Serial.begin(115200); // connect to the serial port Serial.println("Test begin"); pinMode(ADJ_PIN1, INPUT); pinMode(ADJ_PIN2, INPUT); //LCD дисплей lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.createChar(8,black); lcd.createChar(9,white); lcd.clear(); // Выводим текст } void loop() { int current_val1 = analogRead(ADJ_PIN1)/12; //эмуляция получения значения от 0 до 100 int current_val2 = analogRead(ADJ_PIN2)/12; //эмуляция получения значения от 0 до 100 if (abs(benzun_ico1 - current_val1) > 5 || abs(benzun_ico2 - current_val2) > 5){ // Если текущее значение отличается от предыдущего более, чем на 5, будем рефрешить экран benzun_ico1 = current_val1; //Сохраним текущее значение benzun_ico2 = current_val2; //Сохраним текущее значение Serial.println(benzun_ico1); Serial.println(benzun_ico2); lcd.clear(); //Очистим экран drawval(0, benzun_ico1); drawval(1, benzun_ico2); } } void drawval(byte ln, int val) //Нарисовать шкалу, ln - номер строки, val - значение { for (int i=0; i<7; i++) { lcd.setCursor(i, ln); if (val > i*100/8) { lcd.write(8); } else { lcd.write(9); } } }Давно где-то видел и сам включал дэмку с двумя аналоговыми шкалами.
Там загружалось 5 символов так как шрифт дисплея 5x8.
Одна вертикаль, две, три , четыре и чёрный квадрат.
Поэтому максимум штрихов в линейках было 16х5 = 80 .
Красиво работало....
Хочу создать две шкалы, которые будут уменьшаться или заполняться в зависимости от потенциометра.
Например так:
//****************************************************************** #define ADJ_PIN1 A0 #define ADJ_PIN2 A1 byte black[8] = { 0B11111, 0B11111, 0B11111, 0B11111, 0B11111, 0B11111, 0B11111, 0B11111 }; byte white[8] = { 0B11111, 0B10001, 0B10001, 0B10001, 0B10001, 0B10001, 0B10001, 0B11111 }; int benzun_ico1 = -100; int benzun_ico2 = -100; void setup() { Serial.begin(115200); // connect to the serial port Serial.println("Test begin"); pinMode(ADJ_PIN1, INPUT); pinMode(ADJ_PIN2, INPUT); //LCD дисплей lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.createChar(8,black); lcd.createChar(9,white); lcd.clear(); // Выводим текст } void loop() { int current_val1 = analogRead(ADJ_PIN1)/12; //эмуляция получения значения от 0 до 100 int current_val2 = analogRead(ADJ_PIN2)/12; //эмуляция получения значения от 0 до 100 if (abs(benzun_ico1 - current_val1) > 5 || abs(benzun_ico2 - current_val2) > 5){ // Если текущее значение отличается от предыдущего более, чем на 5, будем рефрешить экран benzun_ico1 = current_val1; //Сохраним текущее значение benzun_ico2 = current_val2; //Сохраним текущее значение Serial.println(benzun_ico1); Serial.println(benzun_ico2); lcd.clear(); //Очистим экран drawval(0, benzun_ico1); drawval(1, benzun_ico2); } } void drawval(byte ln, int val) //Нарисовать шкалу, ln - номер строки, val - значение { for (int i=0; i<7; i++) { lcd.setCursor(i, ln); if (val > i*100/8) { lcd.write(8); } else { lcd.write(9); } } }Спасибо) Подробно все разобрал и почерпнул для себя на будущее полезную вещь. Еще раз спасибо за помощь.
if (abs(benzun_ico1 - current_val1) > 5 || abs(benzun_ico2 - current_val2) > 5){ // Если текущее значение отличается от предыдущего более, чем на 5, будем рефрешить экран