Да что же такое? Можно как-то поспокойнее? Первый раз отправляю
Сутки на форуме. Учись )
#include <Wire.h>
int acolumn = 0;
int bcolumn = 1;
int ccolumn = 2;
int dcolumn = 3;
int ecolumn = 4;
int fcolumn = 5;
int gcolumn = 6;
int hcolumn = 7;
int icolumn = 8;
String inputText = "The lonely Shepherd (Der einsame Hirte) - Hardstyle Bootleg (Mixed By Lowwalker)";
int inputText_len = inputText.length() + 1;
constexpr size_t numColumns = 5; //number of bytes -columns for 1 character
//Pretty self-explenatory -here I store all my characters.
void getColumns(char c, uint8_t columns[numColumns]);
const uint8_t upperCase[][numColumns] PROGMEM = {
{0X7E, 0X11, 0X11, 0X11, 0X7E}, // Column codes for 'A'
{0X7F, 0X49, 0X49, 0X49, 0X36}, // Column codes for 'B'
{0X3E, 0X41, 0X41, 0X41, 0X22}, // Column codes for 'C'
{0X7F, 0X41, 0X41, 0X22, 0X1C}, // Column codes for 'D'
{0X7F, 0X49, 0X49, 0X49, 0X41}, // Column codes for 'E'
{0X7F, 0X09, 0X09, 0X09, 0X01}, // Column codes for 'F'
{0X3E, 0X41, 0X49, 0X49, 0X7A}, // Column codes for 'G'
{0X7F, 0X08, 0X08, 0X08, 0X7F}, // Column codes for 'H'
{0X00, 0X41, 0X7F, 0X41, 0X00}, // Column codes for 'I'
{0X20, 0X40, 0X41, 0X3F, 0X01}, // Column codes for 'J'
{0X7F, 0X08, 0X14, 0X22, 0X41}, // Column codes for 'K'
{0X7F, 0X40, 0X40, 0X40, 0X40}, // Column codes for 'L'
{0X7F, 0X02, 0X0C, 0X02, 0X7F}, // Column codes for 'M'
{0X7F, 0X04, 0X08, 0X10, 0X7F}, // Column codes for 'N'
{0X3E, 0X41, 0X41, 0X41, 0X3E}, // Column codes for 'O'
{0X7F, 0X09, 0X09, 0X09, 0X06}, // Column codes for 'P'
{0X3E, 0X41, 0X41, 0X61, 0X3E}, // Column codes for 'Q'
{0X7F, 0X09, 0X19, 0X29, 0X46}, // Column codes for 'R'
{0X46, 0X49, 0X49, 0X49, 0X31}, // Column codes for 'S'
{0X01, 0X01, 0X7F, 0X01, 0X01}, // Column codes for 'T'
{0X3F, 0X40, 0X40, 0X40, 0X3F}, // Column codes for 'U'
{0X07, 0X18, 0X60, 0X18, 0X07}, // Column codes for 'V'
{0X3F, 0X40, 0X38, 0X40, 0X3F}, // Column codes for 'W'
{0X63, 0X14, 0X08, 0X14, 0X63}, // Column codes for 'X'
{0X07, 0X08, 0X70, 0X08, 0X07}, // Column codes for 'Y'
{0X61, 0X51, 0X49, 0X45, 0X43} // Column codes for 'Z'
};
const uint8_t lowerCase[][numColumns] PROGMEM = {
{0X20, 0X54, 0X54, 0X54, 0X78}, // Column codes for 'a'
{0X7F, 0X48, 0X48, 0X48, 0X30}, // Column codes for 'b'
{0X38, 0X44, 0X44, 0X44, 0X44}, // Column codes for 'c'
{0X30, 0X48, 0X48, 0X48, 0X7F}, // Column codes for 'd'
{0X38, 0X54, 0X54, 0X54, 0X58}, // Column codes for 'e'
{0X00, 0X08, 0X7E, 0X09, 0X02}, // Column codes for 'f'
{0X48, 0X54, 0X54, 0X54, 0X3C}, // Column codes for 'g'
{0X7F, 0X08, 0X08, 0X08, 0X70}, // Column codes for 'h'
{0X00, 0X00, 0X7A, 0X00, 0X00}, // Column codes for 'i'
{0X20, 0X40, 0X40, 0X39, 0X00}, // Column codes for 'j'
{0X00, 0X7F, 0X10, 0X28, 0X44}, // Column codes for 'k'
{0X00, 0X41, 0X7F, 0X40, 0X00}, // Column codes for 'l'
{0X7C, 0X04, 0X18, 0X04, 0X7C}, // Column codes for 'm'
{0X7C, 0X08, 0X04, 0X04, 0X78}, // Column codes for 'n'
{0X30, 0X48, 0X48, 0X30, 0X00}, // Column codes for 'o'
{0X7C, 0X14, 0X14, 0X14, 0X08}, // Column codes for 'p'
{0X7F, 0X04, 0X04, 0X04, 0X03}, // Column codes for 'q'
{0X7C, 0X08, 0X04, 0X04, 0X08}, // Column codes for 'r'
{0X48, 0X54, 0X54, 0X54, 0X24}, // Column codes for 's'
{0X04, 0X04, 0X3F, 0X44, 0X24}, // Column codes for 't'
{0X3C, 0X40, 0X40, 0X40, 0X3C}, // Column codes for 'u'
{0X1C, 0X20, 0X40, 0X20, 0X1C}, // Column codes for 'v'
{0X3C, 0X40, 0X30, 0X40, 0X3C}, // Column codes for 'w'
{0X44, 0X28, 0X10, 0X28, 0X44}, // Column codes for 'x'
{0X04, 0X48, 0X30, 0X18, 0X04}, // Column codes for 'y'
{0X44, 0X64, 0X54, 0X4C, 0X44} // Column codes for 'z'
};
const uint8_t numerals[][numColumns] PROGMEM = {
{0X3E, 0X45, 0X49, 0X51, 0X3E}, // Column codes for '0'
{0X00, 0X42, 0X7F, 0X40, 0X00}, // Column codes for '1'
{0X42, 0X61, 0X51, 0X49, 0X46}, // Column codes for '2'
{0X22, 0X41, 0X49, 0X49, 0X36}, // Column codes for '3'
{0X18, 0X14, 0X12, 0X7F, 0X10}, // Column codes for '4'
{0X27, 0X45, 0X45, 0X45, 0X39}, // Column codes for '5'
{0X3E, 0X49, 0X49, 0X49, 0X30}, // Column codes for '6'
{0X01, 0X71, 0X09, 0X05, 0X03}, // Column codes for '7'
{0X36, 0X49, 0X49, 0X49, 0X36}, // Column codes for '8'
{0X06, 0X49, 0X49, 0X49, 0X3E} // Column codes for '9'
};
const uint8_t symbolsa[][numColumns] PROGMEM = {
{0X00, 0X00, 0X5F, 0X00, 0X00}, // Column codes for '!'
{0X00, 0X03, 0X00, 0X03, 0X00}, // Column codes for '"'
{0X14, 0X7F, 0X14, 0X7F, 0X14}, // Column codes for '#'
{0X24, 0X2A, 0X7F, 0X2A, 0X12}, // Column codes for '$'
{0X23, 0X13, 0X08, 0X64, 0X62}, // Column codes for '%'
{0X36, 0X49, 0X55, 0X22, 0X50}, // Column codes for '&'
{0X04, 0X02, 0X02, 0X01, 0X00}, // Column codes for '''
{0X00, 0X1C, 0X22, 0X41, 0X00}, // Column codes for '('
{0X00, 0X41, 0X22, 0X1C, 0X00}, // Column codes for ')'
{0X14, 0X08, 0X3E, 0X08, 0X14}, // Column codes for '*'
{0X08, 0X08, 0X3E, 0X08, 0X08}, // Column codes for '+'
{0X00, 0X00, 0X50, 0X30, 0X00}, // Column codes for ','
{0X08, 0X08, 0X08, 0X08, 0X08}, // Column codes for '-'
{0X00, 0X60, 0X60, 0X00, 0X00}, // Column codes for '.'
{0X20, 0X10, 0X08, 0X04, 0X02} // Column codes for '/'
};
const uint8_t symbolsb[][numColumns] PROGMEM = {
{0X00, 0X7F, 0X41, 0X41, 0X00}, // Column codes for '['
{0X02, 0X04, 0X08, 0X10, 0X20}, // Column codes for '\'
{0X00, 0X41, 0X41, 0X7F, 0X00}, // Column codes for ']'
{0X04, 0X02, 0X01, 0X02, 0X04}, // Column codes for '^'
{0X40, 0X40, 0X40, 0X40, 0X40}, // Column codes for '_'
{0X00, 0X01, 0X02, 0X04, 0X00} // Column codes for '`'
};
const uint8_t symbolsc[][numColumns] PROGMEM = {
{0X08, 0X36, 0X41, 0X41, 0X00}, // Column codes for '{'
{0X00, 0X00, 0X7F, 0X00, 0X00}, // Column codes for '|'
{0X00, 0X41, 0X41, 0X36, 0X08}, // Column codes for '}'
{0X01, 0X02, 0X01, 0X20, 0X00}, // Column codes for '~'
};
const uint8_t equalSymbol [numColumns] PROGMEM = {0x14, 0x14, 0x14, 0x14, 0x14};
const uint8_t afnaSymbol [numColumns] PROGMEM = {0x32, 0x49, 0x71, 0x41, 0x3E};
const uint8_t space[numColumns] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00};
const uint8_t unknown[numColumns] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00};
void setup() {
}
void loop() {
char inputText_array[inputText_len];
inputText.toCharArray(inputText_array, inputText_len);
//Serial only for troubleshooting -I can remove it when it works.
uint8_t ahr[numColumns];
getColumns(inputText[acolumn], ahr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t bhr[numColumns];
getColumns(inputText[bcolumn], bhr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t chr[numColumns];
getColumns(inputText[ccolumn], chr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t dhr[numColumns];
getColumns(inputText[dcolumn], dhr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t ehr[numColumns];
getColumns(inputText[ecolumn], ehr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t fhr[numColumns];
getColumns(inputText[fcolumn], fhr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t ghr[numColumns];
getColumns(inputText[gcolumn], ghr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t hhr[numColumns];
getColumns(inputText[hcolumn], hhr); //This would store all 5 bytes (columns)of letter A in "xxx"
uint8_t ihr[numColumns];
getColumns(inputText[icolumn], ihr); //This would store all 5 bytes (columns)of letter A in "xxx"
//COMMANDS TO SET UP THE DISPLAY
Wire.begin(); // join i2c bus
Wire.beginTransmission(0x3C); // transmit to device
//Wire.write(0x55); // set_mode -normal video, mixed mode, MUX 1:8
Wire.write(0x55);
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x3e); // RAM access
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x7c); //set start bank 0
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x62); //device select
Wire.endTransmission(); // stop transmitting
//WRITING TO DISPLAY STARTS HERE
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x0F); //load x address
Wire.write(bhr[3]); // DATA column 10
Wire.write(bhr[2]); // DATA column 9
Wire.write(bhr[1]); // DATA column 8
Wire.write(bhr[0]); // DATA column 7
Wire.write(0x00); // DATA column 6
Wire.write(ahr[4]); // DATA column 5
Wire.write(ahr[3]); // DATA column 4
Wire.write(ahr[2]); // DATA column 3
Wire.write(ahr[1]); // DATA column 2
Wire.write(ahr[0]); // DATA column 1
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x05); //load x address
Wire.write(dhr[1]); // DATA column 20
Wire.write(dhr[0]); // DATA column 19
Wire.write(0x00); // DATA column 18
Wire.write(chr[4]); // DATA column 17
Wire.write(chr[3]); // DATA column 16
Wire.write(chr[2]); // DATA column 15
Wire.write(chr[1]); // DATA column 14
Wire.write(chr[0]); // DATA column 13
Wire.write(0x00); // DATA column 12
Wire.write(bhr[4]); // DATA column 11
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x00); //load x address
Wire.write(0x00); // DATA MISSING COLUMN -BLANK
Wire.write(0x00); // DATA column 24
Wire.write(dhr[4]); // DATA column 23
Wire.write(dhr[3]); // DATA column 22
Wire.write(dhr[2]); // DATA column 21
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x61); //device select
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x1f); //load x address
Wire.write(fhr[3]); // DATA column 34
Wire.write(fhr[2]); // DATA column 33
Wire.write(fhr[1]); // DATA column 32
Wire.write(fhr[0]); // DATA column 31
Wire.write(0x00); // DATA column 30
Wire.write(ehr[4]); // DATA column 39
Wire.write(ehr[3]); // DATA column 28
Wire.write(ehr[2]); // DATA column 27
Wire.write(ehr[1]); // DATA column 26
Wire.write(ehr[0]); // DATA column 25
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x61); //device select
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x14); //load x address
Wire.write(hhr[2]); // DATA column 45
Wire.write(hhr[1]); // DATA column 44
Wire.write(hhr[0]); // DATA column 43
Wire.write(0x00); // DATA column 42
Wire.write(ghr[4]); // DATA column 41
Wire.write(ghr[3]); // DATA column 40
Wire.write(ghr[2]); // DATA column 39
Wire.write(ghr[1]); // DATA column 38
Wire.write(ghr[0]); // DATA column 37
Wire.write(0x00); // DATA column 36
Wire.write(fhr[4]); // DATA column 35
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x61); //device select
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(0x3C); // transmit to device
Wire.write(0x0A); //load x address
Wire.write(0x00); // DATA column 55
Wire.write(0x00); // DATA column 54
Wire.write(ihr[4]); // DATA column 53
Wire.write(ihr[3]); // DATA column 52
Wire.write(ihr[2]); // DATA column 51
Wire.write(ihr[1]); // DATA column 50
Wire.write(ihr[0]); // DATA column 49
Wire.write(0x00); // DATA column 48
Wire.write(hhr[4]); // DATA column 47
Wire.write(hhr[3]); // DATA column 46
Wire.endTransmission(); // stop transmitting
if(inputText_len > 9 && icolumn < inputText_len){
acolumn = (acolumn + 1);
bcolumn = (bcolumn + 1);
ccolumn = (ccolumn + 1);
dcolumn = (dcolumn + 1);
ecolumn = (ecolumn + 1);
fcolumn = (fcolumn + 1);
gcolumn = (gcolumn + 1);
hcolumn = (hcolumn + 1);
icolumn = (icolumn + 1);
delay(500);
}else{
acolumn = 0;
bcolumn = 1;
ccolumn = 2;
dcolumn = 3;
ecolumn = 4;
fcolumn = 5;
gcolumn = 6;
hcolumn = 7;
icolumn = 8;
}
}
//I don`t get this part fully.
void getColumns(char c, uint8_t columns[numColumns]) {
switch (c) {
case 'A'...'Z':
memcpy_P(&columns[0], &upperCase[c - 'A'][0], numColumns); //I think that this "A" changes depending if it`s case A or B or C ... something like if it`s "A" do that, if it`s "B" do that...
break;
case 'a'...'z':
memcpy_P(&columns[0], &lowerCase[c - 'a'][0], numColumns);
break;
case '0'...'9':
memcpy_P(&columns[0], &numerals[c - '0'][0], numColumns);
break;
case ' ':
memcpy_P(&columns[0], &space[0], numColumns);
break;
case '!'...'/':
memcpy_P(&columns[0], &symbolsa[c - '!'][0], numColumns);
break;
case '['...'`':
memcpy_P(&columns[0], &symbolsb[c - '['][0], numColumns);
break;
case '{'...'~':
memcpy_P(&columns[0], &symbolsc[c - '{'][0], numColumns);
break;
case '=':
memcpy_P(&columns[0], &equalSymbol[0], numColumns);
break;
case '@':
memcpy_P(&columns[0], &afnaSymbol[0], numColumns);
break;
default:
memcpy_P(&columns[0], &unknown[0], numColumns);
break;
}
}
```
Учусь. Учителя хорошие ![]()
Молодец!
Спасибо. Решил проблему
Удали это пост (простыня мешает)
Новичкам вроде редактирование и удаление постов недоступно
Вроде удалил. Будьте добрее друг к другу, вы ведь на этом форуме именно друг для друга. И для таких, как я…..
Молодец. Смышленный малый, так то!
Посмотрел твой код (скорее всего не твой, так?).
Слишком много всего для «проверить». Начинать нужно с малого - попытаться зажечь один пиксель (символ).
Конечно код не мой. Я абсолютно не претендую на авторство, взял его с форума (см.выше).
И что Вы намерены делать с этой 400-строчной портянкой?
Если хотите научиться работать, начните с того, что
- выведите на экран букву А кодом в 10 строк.
- потом выведите слово “Кака” опять же кодом в 10 строк.
- наконец, выведите значение какой-нибудь переменной (числовой) – и снова кодом в 10 строк.
И только когда Вы научитесь писать коды в 10 строк, можете попробовать писать что-то большее.
А сразу хвататься за 400 строк – так это не работает.
Если я увижу здесь ВАШ код для вывода буквы “А”, я готов впрячься и помогать. А нет … ну, на нет и суда нет.
Евгений Петрович, я бы все таки добавил 0 (нулевой) пункт - попытаться зажечь один пиксель. Если и оно не сработает, все остальные пункты бессмысленны.
@SP634
Посмотрел ваш так называемый код - выкиньте его в помойку.
Не знаю, где вы его нашли, но писал его явно новичок, не имеющий представления не только о том, как делается пиксельных вывод на экран, но и просто о массивах и циклах.
Для краткости, данный код можно охарактеризовать фразой “закат Солнца вручную”.
С учётом квалификации автора кода, никакой гарантии, что он выводит пиксели на экран правильно, в этом коде нет. Поэтому я бы поискал что то другое, чтобы борясь с дисплеем, вы хотя бы были уверены в коде.
Евгений, вы будете смеяться, но вся эта портянка в 400 строк написана, чтобы вывести на экран первые 9 букв текста :
String inputText = "The lonely Shepherd (Der einsame Hirte) - Hardstyle Bootleg (Mixed By Lowwalker)";
Хорошо что автор кода остановился на первых буквах и не стал выводить всю фразу:)
Не буду.
Я просто попросил ТС ограничиться десятью строками СВОЕГО кода. При этом я согласен впрячься и помочь ему. У меня, правда, нет такого дисплея, но он, вроде, есть в “вовке”, так что попытаться помочь я бы, наверное, смог.
А что за дисплей? Где продаётся?
Другого готового кода в сети я не нашел. Этот еле-еле скачал (см.выше)
Возможно. Но думаю у меня уже не осталось времени для этого. Нужно было учиться лет 10-15 тому назад. А сейчас этот поезд уже не догнать, как не пытайся
