секундомер с большими цифрами
- Войдите на сайт для отправки комментариев
Вс, 28/07/2019 - 12:55
arduino uno и дисплей LCD2004A , по идее должны бежать большие секунд, вместо секунд на экране квадратики из точек меняются, подскажите где ошибка.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup()
{
lcd.begin();
}
void loop(){
printSEC(millis()/1000); // вывод числа секунд после сброса
}
void printSEC(int rpm) {
int m , c, d, u, number;
number = rpm;
if (number > 999) {
m = (number - (number % 1000)) / 1000;
number = number % 1000;
} else {
m = 0;
}
if (number > 99) {
c = (number - (number % 100)) / 100;
number = number % 100;
} else {
c = 0;
}
if (number > 9) {
d = (number - (number % 10)) / 10;
number = number % 10;
} else {
d = 0;
}
u = number;
lcd.setCursor(0, 0);
lcd.print("SEC:");
printNumber(m, 4);
printNumber(c, 7);
printNumber(d, 10);
printNumber(u, 13);
}
void printNumber(int value, int col) {
if (value == 0) {
custom0(col);
} if (value == 1) {
custom1(col);
} if (value == 2) {
custom2(col);
} if (value == 3) {
custom3(col);
} if (value == 4) {
custom4(col);
} if (value == 5) {
custom5(col);
} if (value == 6) {
custom6(col);
} if (value == 7) {
custom7(col);
} if (value == 8) {
custom8(col);
} if (value == 9) {
custom9(col);
}
}
void custom0(int col)
{
lcd.setCursor(col, 0);
lcd.write(2);
lcd.write(8);
lcd.write(1);
lcd.setCursor(col, 1);
lcd.write(2);
lcd.write(6);
lcd.write(1);
}
void custom1(int col)
{
lcd.setCursor(col,0);
lcd.write(32);
lcd.write(32);
lcd.write(1);
lcd.setCursor(col,1);
lcd.write(32);
lcd.write(32);
lcd.write(1);
}
void custom2(int col)
{
lcd.setCursor(col,0);
lcd.write(5);
lcd.write(3);
lcd.write(1);
lcd.setCursor(col, 1);
lcd.write(2);
lcd.write(6);
lcd.write(6);
}
void custom3(int col)
{
lcd.setCursor(col,0);
lcd.write(5);
lcd.write(3);
lcd.write(1);
lcd.setCursor(col, 1);
lcd.write(7);
lcd.write(6);
lcd.write(1);
}
void custom4(int col)
{
lcd.setCursor(col,0);
lcd.write(2);
lcd.write(6);
lcd.write(1);
lcd.setCursor(col, 1);
lcd.write(32);
lcd.write(32);
lcd.write(1);
}
void custom5(int col)
{
lcd.setCursor(col,0);
lcd.write(2);
lcd.write(3);
lcd.write(4);
lcd.setCursor(col, 1);
lcd.write(7);
lcd.write(6);
lcd.write(1);
}
void custom6(int col)
{
lcd.setCursor(col,0);
lcd.write(2);
lcd.write(3);
lcd.write(4);
lcd.setCursor(col, 1);
lcd.write(2);
lcd.write(6);
lcd.write(1);
}
void custom7(int col)
{
lcd.setCursor(col,0);
lcd.write(2);
lcd.write(8);
lcd.write(1);
lcd.setCursor(col, 1);
lcd.write(32);
lcd.write(32);
lcd.write(1);
}
void custom8(int col)
{
lcd.setCursor(col, 0);
lcd.write(2);
lcd.write(3);
lcd.write(1);
lcd.setCursor(col, 1);
lcd.write(2);
lcd.write(6);
lcd.write(1);
}
void custom9(int col)
{
lcd.setCursor(col, 0);
lcd.write(2);
lcd.write(3);
lcd.write(1);
lcd.setCursor(col, 1);
lcd.write(7);
lcd.write(6);
lcd.write(1);
}
Сделайте сначала вывод одной цифры безо всякого бегания - статично. Потом вывод одного числа. Тоже статично. А там уж и бегать начнёте.
это я уже пробовал
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 20, 4); void setup() { lcd.begin(); lcd.setCursor(0, 0); lcd.write(2); lcd.write(8); lcd.write(1); lcd.setCursor(0, 1); lcd.write(2); lcd.write(6); lcd.write(1); } void loop() { }результат тот же 8 рядов по 3 полосы длинной в символ
Так вот, сначала это отладьте. А пока не отладите, дальше не лезьте. Так всегда делается, никто не наваливает всё в одну кучу.
Не вижу где в скетче происходит определение символов, которые потом выводятся через write(...)
уже исправился))) Работает все)))) Вот код если кому интересно
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 20, 4); int sek = 0; byte bar1[8] = { B11100, B11110, B11110, B11110, B11110, B11110, B11110, B11100 }; byte bar2[8] = { B00111, B01111, B01111, B01111, B01111, B01111, B01111, B00111 }; byte bar3[8] = { B11111, B11111, B00000, B00000, B00000, B00000, B11111, B11111 }; byte bar4[8] = { B11110, B11100, B00000, B00000, B00000, B00000, B11000, B11100 }; byte bar5[8] = { B01111, B00111, B00000, B00000, B00000, B00000, B00011, B00111 }; byte bar6[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111 }; byte bar7[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00111, B01111 }; byte bar8[8] = { B11111, B11111, B00000, B00000, B00000, B00000, B00000, B00000 }; void custom0(int col) { // uses segments to build the number 0 lcd.setCursor(col, 0); lcd.write(2); lcd.write(8); lcd.write(1); lcd.setCursor(col, 1); lcd.write(2); lcd.write(6); lcd.write(1); } void custom1(int col) { lcd.setCursor(col,0); lcd.write(32); lcd.write(32); lcd.write(1); lcd.setCursor(col,1); lcd.write(32); lcd.write(32); lcd.write(1); } void custom2(int col) { lcd.setCursor(col,0); lcd.write(5); lcd.write(3); lcd.write(1); lcd.setCursor(col, 1); lcd.write(2); lcd.write(6); lcd.write(6); } void custom3(int col) { lcd.setCursor(col,0); lcd.write(5); lcd.write(3); lcd.write(1); lcd.setCursor(col, 1); lcd.write(7); lcd.write(6); lcd.write(1); } void custom4(int col) { lcd.setCursor(col,0); lcd.write(2); lcd.write(6); lcd.write(1); lcd.setCursor(col, 1); lcd.write(32); lcd.write(32); lcd.write(1); } void custom5(int col) { lcd.setCursor(col,0); lcd.write(2); lcd.write(3); lcd.write(4); lcd.setCursor(col, 1); lcd.write(7); lcd.write(6); lcd.write(1); } void custom6(int col) { lcd.setCursor(col,0); lcd.write(2); lcd.write(3); lcd.write(4); lcd.setCursor(col, 1); lcd.write(2); lcd.write(6); lcd.write(1); } void custom7(int col) { lcd.setCursor(col,0); lcd.write(2); lcd.write(8); lcd.write(1); lcd.setCursor(col, 1); lcd.write(32); lcd.write(32); lcd.write(1); } void custom8(int col) { lcd.setCursor(col, 0); lcd.write(2); lcd.write(3); lcd.write(1); lcd.setCursor(col, 1); lcd.write(2); lcd.write(6); lcd.write(1); } void custom9(int col) { lcd.setCursor(col, 0); lcd.write(2); lcd.write(3); lcd.write(1); lcd.setCursor(col, 1); lcd.write(7); lcd.write(6); lcd.write(1); } void printNumber(int value, int col) { if (value == 0) { custom0(col); } if (value == 1) { custom1(col); } if (value == 2) { custom2(col); } if (value == 3) { custom3(col); } if (value == 4) { custom4(col); } if (value == 5) { custom5(col); } if (value == 6) { custom6(col); } if (value == 7) { custom7(col); } if (value == 8) { custom8(col); } if (value == 9) { custom9(col); } } void printSEK(int sek) { int m , c, d, u, number; number = sek; if (number > 999) { m = (number - (number % 1000)) / 1000; number = number % 1000; } else { m = 0; } if (number > 99) { c = (number - (number % 100)) / 100; number = number % 100; } else { c = 0; } if (number > 9) { d = (number - (number % 10)) / 10; number = number % 10; } else { d = 0; } u = number; lcd.setCursor(0, 0); printNumber(m, 0); printNumber(c, 3); printNumber(d, 6); printNumber(u, 9); } void setup() { lcd.begin(); lcd.createChar(1,bar1); lcd.createChar(2,bar2); lcd.createChar(3,bar3); lcd.createChar(4,bar4); lcd.createChar(5,bar5); lcd.createChar(6,bar6); lcd.createChar(7,bar7); lcd.createChar(8,bar8); } void loop(){ printSEK(millis()/1000); // вывод числа секунд после сброса }