Сбой при формировании своих символов на LCD 1602
- Войдите на сайт для отправки комментариев
Вс, 24/11/2013 - 11:33
В общем всё работает нормально, но...
Часто (в 50% случаев) при старте или перезагрузке в памяти дисплея оказываются не нужные мне символы букв а их смесь. В данном случае например буква П сверху и буква У снизу. Код такой:
// include the library code: #include <LiquidCrystal.h> #include <EEPROM.h> uint8_t temp_cel_0[8] = { B01010, B10101, B10011, B10101, B11001, B10001, B10001 }; //закодировано в двоичной системе знак Й uint8_t temp_cel_1[8] = { B10001, B10001, B10011, B10101, B11001, B10001, B10001 }; //закодировано в двоичной системе знак И uint8_t temp_cel_2[8] = { B11110, B00001, B00001, B01110, B00001, B00001, B11110 }; //закодировано в двоичной системе знак З uint8_t temp_cel_3[8] = { B10101, B10101, B01110, B00100, B01110, B10101, B10101 }; //закодировано в двоичной системе знак Ж uint8_t temp_cel_4[8] = { B01111, B10001, B10001, B01111, B00101, B01001, B10001 }; //закодировано в двоичной системе знак Я uint8_t temp_cel_5[8] = { B11111, B10001, B10001, B10001, B10001, B10001, B10001 }; //закодировано в двоичной системе знак П uint8_t temp_cel_6[8] = { B10001, B10001, B01010, B00110, B00100, B01000, B10000 }; //закодировано в двоичной системе знак У uint8_t temp_cel_7[8] = { B11110, B00001, B00001, B01111, B00001, B00001, B11110 }; //закодировано в двоичной системе знак З int tok = 0; //сварочный ток, % импульсов сети int time = 0; //время сварки, основной параметр int rezhim = 1; //режим однократный или многократный int pauza = 0;// задержка перед отключением пневмоклапана int menu = 0; //активный пункт меню int addres_eeprom_tok=0; int addres_eeprom_time=2; int addres_eeprom_rezhim=4; int addres_eeprom_pauza=6; // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int a=0; void setup() { lcd.createChar(1, temp_cel_0);//Й lcd.createChar(2, temp_cel_1);//И lcd.createChar(3, temp_cel_2);//З lcd.createChar(4, temp_cel_3);//Ж lcd.createChar(5, temp_cel_4);//Я lcd.createChar(6, temp_cel_5);//П lcd.createChar(7, temp_cel_6);//У lcd.createChar(8, temp_cel_7);//З // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print(" KOHTAKTHA\5"); lcd.setCursor(5, 1); lcd.print("CBAPKA"); pinMode (A5, INPUT); } void loop() { a = analogRead (5); // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): // print the number of seconds since reset: if (a < 896 && a> 894) { EEPROM.write(addres_eeprom_tok, tok); EEPROM.write(addres_eeprom_time, time); EEPROM.write(addres_eeprom_rezhim, rezhim); EEPROM.write(addres_eeprom_pauza, pauza); lcd.clear (); lcd.print(" COXPAHEHO"); lcd.setCursor(3, 1); lcd.print("B \6AM\5T\2"); delay(2000); edit(); } if (a> 765 && a < 769 ) { tok = EEPROM.read(addres_eeprom_tok); time = EEPROM.read(addres_eeprom_time); rezhim = EEPROM.read(addres_eeprom_rezhim); pauza = EEPROM.read(addres_eeprom_pauza); lcd.clear (); lcd.print(" BO\3BPAT"); lcd.setCursor(3, 1); lcd.print("HACTPOEK"); delay(2000); menu=1; edit(); } if (a> 124 && a < 128 ) { ++menu; if (menu==5) { menu=1; } delay(200); edit(); } if (a> 637 && a < 641 ) { if (menu==1) { if (time>0) { --time; } } if (menu==2) { if (tok>0) { --tok; } } if (menu==3) { if (rezhim>0) { --rezhim; } } if (menu==4) { if (pauza>0) { --pauza; } } delay(200); edit(); } if (a> 380 && a < 384 ) { if (menu==1) { ++time; } if (menu==2) { ++tok; } if (menu==3) { ++rezhim; } if (menu==4) { ++pauza; } delay(200); edit(); } if (a> 252 && a < 256 ) { --menu; if (menu==0) { menu=4; } if (menu<0) { menu=4; } delay(200); edit(); } if (a> 506 && a < 514 ) { // } } void edit() { if (menu==1) { lcd.clear (); lcd.print(" HACTPO\1K\2"); lcd.setCursor(0, 1); lcd.print("BPEM\5 :"); lcd.print(time); // } if (menu==2) { lcd.clear (); lcd.print(" HACTPO\1K\2"); lcd.setCursor(0, 1); lcd.print("TOK :"); lcd.print(tok); // } if (menu==3) { lcd.clear (); lcd.print(" HACTPO\1K\2"); lcd.setCursor(0, 1); lcd.print("PE\4\2M CBAPK\2 :"); lcd.print(rezhim); // } if (menu==4) { lcd.clear (); lcd.print(" HACTPO\1K\2"); lcd.setCursor(0, 1); lcd.print("\6A\7\3A"); lcd.print(" :"); lcd.print(pauza); // } }
Как избавиться от этой досадной мелочи?
Напряжение питания на дисплее измерьте. Какое напряжение?
Не успевает при инициализации, попробуй по играться с задержками
Мне помогло в такой же ситуации
Не успевает при инициализации, попробуй по играться с задержками
Мне помогло в такой же ситуации
Большое спасибо всем ответившим за помощь. Введение задержки по совету Iona кажется помогло.
Во всяком случае за 15 перезагрузок, такой проблемы более не обнаружено.