Проблема с дисплеем 1602

недоGeek
Offline
Зарегистрирован: 07.02.2019

Написал программу часов на ардуино, в качестве экрана использовал жк дисплей 1602 с шиной подключения i2c, при вращении потонциометра режим "часы" должен меняться на картинку. но видимо от большего кол-ва созданых символов у дисплея возникают какие то проблеммы.Картинка представляет из себя два больших пальца вверх по краям, смайлик в центре и надпись"ALL GOOD". Правильность кода я проверял неоднократно символы должны вставать в картинку, но в итоге я получаю надпись "ALL GOOD" и разбросаные по всему экрану неупорядоченные символы. Объясните, пожалуйста, в чем проблема, заранее большое спасибо.

 

Вот код:

#include <Time.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
///////////////
byte p20[8] = {
  B00100,
  B00100,
  B00100,
  B00100,
  B00100,
  B00100,
  B00100,
  B00100,
};
/////////////////
 
////ALL GOOD////
byte c1[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00110,
  B00110,
};
 
byte c2[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B01100,
  B01100,
};
 
byte c3[8] = {
  B00000,
  B00000,
  B10000,
  B11000,
  B01100,
  B00111,
  B00011,
  B00000,
};
 
byte c4[8] = {
  B00000,
  B00000,
  B00001,
  B00011,
  B00110,
  B11100,
  B11000,
  B00000,
};
//****рука****//
byte r1[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
  B00000,
};
 
byte r2[8] = {
  B00000,
  B00100,
  B01010,
  B01010,
  B01010,
  B01010,
  B10011,
  B00000,
};
 
byte r3[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11100,
  B00010,
};
 
byte r4[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00111,
  B01000,
};
byte r5[8] = {
  B00000,
  B00100,
  B01010,
  B01010,
  B01010,
  B01010,
  B11001,
  B00000,
};
 
byte r6[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
};
 
byte r7[8] = {
  B00000,
  B00001,
  B00000,
  B00000,
  B00001,
  B00000,
  B00000,
  B11111,
};
 
byte r8[8] = {
  B00010,
  B11100,
  B00010,
  B00010,
  B11100,
  B00010,
  B00010,
  B11100,
};
 
byte r9[8] = {
  B01000,
  B00111,
  B01000,
  B01000,
  B00111,
  B01000,
  B01000,
  B00111,
};
 
byte r10[8] = {
  B00000,
  B10000,
  B00000,
  B00000,
  B10000,
  B00000,
  B00000,
  B11111,
};
//***********//
///////////////
 
void setup(){
    lcd.init(); 
    lcd.backlight();
    setTime(17,3,0,7,2,2019);
    lcd.createChar(0, p20);
    lcd.createChar(1, c1);
    lcd.createChar(2, c2);
    lcd.createChar(3, c3);
    lcd.createChar(4, c4);
    lcd.createChar(5, r1);
    lcd.createChar(6, r2);
    lcd.createChar(7, r3);
    lcd.createChar(8, r4);
    lcd.createChar(9, r5);
    lcd.createChar(10, r6);
    lcd.createChar(11, r7);
    lcd.createChar(12, r8);
    lcd.createChar(13, r9);
    lcd.createChar(14, r10);   
        
}
 
void loop(){  
int p =analogRead(A0);
lcd.clear();
if (p>=1000)
//////ALL GOOD///////////
    lcd.setCursor(0,0);
    lcd.write(5);
    lcd.setCursor(1,0);
    lcd.write(6);
    lcd.setCursor(2,0);
    lcd.write(7);
    lcd.setCursor(3,0);        
    lcd.print("ALL ");
    lcd.setCursor(7,0);
    lcd.write(1);
    lcd.setCursor(8,0);
    lcd.write(2);    
    lcd.setCursor(9,0);        
    lcd.print("GOOD");
    lcd.setCursor(13,0);
    lcd.write(8);
    lcd.setCursor(14,0);
    lcd.write(9);
    lcd.setCursor(15,0);
    lcd.write(5);
    lcd.setCursor(0,1);
    lcd.write(10);
    lcd.setCursor(1,1);
    lcd.write(11);
    lcd.setCursor(2,1);
    lcd.write(12);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.setCursor(8,1);
    lcd.write(4);
    lcd.setCursor(13,1);
    lcd.write(13);
    lcd.setCursor(14,1);
    lcd.write(14);
    lcd.setCursor(15,1);
    lcd.write(10);     
    delay(1000);
/////////////////////////
}
else {
/////////ЧАСЫ///////////
    lcd.clear();
    lcd.setCursor(3,0);
    lcd.write(0);
    lcd.setCursor(4,0);
    lcd.print( day() );
    lcd.print( "." );
    lcd.print( month() );
    lcd.print( "." );
    lcd.print( year() );
    lcd.setCursor(12,0);
    lcd.write(0);
 
    lcd.setCursor(4,1);
    lcd.write(0);
    lcd.setCursor(5, 1);
    lcd.print( hour() );
    lcd.print( ":" );
    lcd.print( minute() );
    lcd.setCursor(10,1);
    lcd.write(0);
    delay(1000);
//////////////////////////
}
}
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ошибка в строке #ХЗ.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

недоGeek,

топайте в тему "ПЕСОЧНИЦА. ДЛЯ ВСЕХ НОВИЧКОВ", и не вылазьте из неё пока не научитесь правильно постить свои вопросы.

bwn
Offline
Зарегистрирован: 25.08.2014

А я подмогну и перемещу.
То ТС, а вас не смущает, что одновременно может быть создано только восемь символов?