OLED 1602 with encoder

zmike77
Offline
Зарегистрирован: 06.10.2019

Добрый день всем!!!

Помогите исправить программу.

На цифровые входы (2,4,7) заведен энкодер.

Программа все правильно читает и выводит на дисплей, но он моргает примерно с интервалом в 1 секунду.

Что подправить, чтобы он горел постоянно?

 

 

Moderator : пожалуйста, вставьте код правильно, как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
 
 
 
 
zmike77
Offline
Зарегистрирован: 06.10.2019
[code]
//***************************************//
// --- WIDE.HK---//
// --- Revised Date : 02/05/2014
// --- I2C Arduino - Arduino UNO Demo ---//
// --- SSD131x PMOLED Controller      ---//
// --- SCL, SDA, GND, VCC(3.3v -5v)   ---//
//***************************************//

#include <Wire.h>          // *** I2C Mode
#define OLED_Address 0x3c
#define OLED_Command_Mode 0x80
#define OLED_Data_Mode 0x40
const int ENC1=2;
const int ENC2=4;
const int ENC4=7;

void setup()
{
  pinMode (ENC1, INPUT);
  pinMode (ENC2, INPUT);
  pinMode (ENC4, INPUT);   
  Wire.begin();
}

void loop()
{
  {
int i;
// *** I2C initial *** //
delay(100);
sendCommand(0x80);
sendCommand(0x2A); // **** Set "RE"=1 00101010B
sendCommand(0x71);
sendCommand(0xC0);
sendCommand(0x00);
sendCommand(0x28);

sendCommand(0x08); // **** Set Sleep Mode On
sendCommand(0x2A); // **** Set "RE"=1 00101010B
sendCommand(0x79); // **** Set "SD"=1 01111001B

sendCommand(0xD5);
sendCommand(0x70);
sendCommand(0x78); // **** Set "SD"=0

sendCommand(0x08);
//sendCommand(0x09); // **** Set 5-dot, 3 or 4 line(0x09), 1 or 2 line(0x08)


sendCommand(0x06); // **** Set Com31-->Com0  Seg0-->Seg99
sendCommand(0x72);
  sendCommand(0xC0);
   sendCommand(0x01);
// **** Set OLED Characterization *** //
sendCommand(0x2A);   // **** Set "RE"=1
sendCommand(0x79);   // **** Set "SD"=1

// **** CGROM/CGRAM Management *** //
// sendCommand(0x72);   // **** Set ROM
// sendCommand(0x00);   // **** Set ROM A and 8 CGRAM

sendCommand(0xDC);   // **** Set ROM
sendCommand(0x00);   // **** Set ROM A and 8 CGRAM

sendCommand(0xDA); // **** Set Seg Pins HW Config
sendCommand(0x10);  

sendCommand(0x81);   // **** Set Contrast
sendCommand(0xD9);   //
  sendCommand(0x8F);   // **** Set Contrast

sendCommand(0xF1);

sendCommand(0xDB);   // **** Set VCOM deselect level
sendCommand(0x30);   // **** VCC x 0.83

sendCommand(0xDC);   // **** Set gpio - turn EN for 15V generator on.
sendCommand(0x03);

sendCommand(0x78);   // **** Exiting Set OLED Characterization
sendCommand(0x28);
//sendCommand(0x2A);
//sendCommand(0x05); // **** Set Entry Mode (invert)
sendCommand(0x06); // **** Set Entry Mode

sendCommand(0x28); // **** Set "IS"=0 , "RE" =0 //28
sendCommand(0x01);
sendCommand(0x80); // **** Set DDRAM Address to 0x80 (line 1 start)

delay(100);
sendCommand(0x0C);   // **** Turn on Display


}
 
  {
  if ((digitalRead(ENC1) == LOW) && (digitalRead(ENC2) == LOW) && (digitalRead(ENC4) == LOW))
     {
     send_string("1");
     sendCommand(0xC0);    // **** New Line
     send_string("---WIDE.HK---");
     }
     
  else if ((digitalRead(ENC1) == HIGH) && (digitalRead(ENC2) == LOW) && (digitalRead(ENC4) == LOW))
    {
    send_string("2");
    sendCommand(0xC0);    // **** New Line
    send_string("---WIDE.HK---"); 
    //sendCommand(0x01); // **** Clear display
    }

  else if ((digitalRead(ENC1) == LOW) && (digitalRead(ENC2) == HIGH) && (digitalRead(ENC4) == LOW))
    {
    send_string("3");
    sendCommand(0xC0);    // **** New Line
    send_string("---WIDE.HK---"); 
    //sendCommand(0x01); // **** Clear display
    }

  else if ((digitalRead(ENC1) == HIGH) && (digitalRead(ENC2) == HIGH) && (digitalRead(ENC4) == LOW))
    {
    send_string("4");
    sendCommand(0xC0);    // **** New Line
    send_string("---WIDE.HK---"); 
    //sendCommand(0x01); // **** Clear display
    }

 else if ((digitalRead(ENC1) == LOW) && (digitalRead(ENC2) == LOW) && (digitalRead(ENC4) == HIGH))
    {
    send_string("5");
    sendCommand(0xC0);    // **** New Line
    send_string("---WIDE.HK---"); 
    //sendCommand(0x01); // **** Clear display
    }

 else if ((digitalRead(ENC1) == HIGH) && (digitalRead(ENC2) == LOW) && (digitalRead(ENC4) == HIGH))
    {
    send_string("6");
    sendCommand(0xC0);    // **** New Line
    send_string("---WIDE.HK---"); 
    //sendCommand(0x01); // **** Clear display
    }

 else if ((digitalRead(ENC1) == LOW) && (digitalRead(ENC2) == HIGH) && (digitalRead(ENC4) == HIGH))
    {
    send_string("7");
    sendCommand(0xC0);    // **** New Line
    send_string("---WIDE.HK---"); 
    //sendCommand(0x01); // **** Clear display
    }


  else
    {
    send_string("8");
    sendCommand(0xC0);    // **** New Line
    send_string("---WIDE.HK---"); 
    //sendCommand(0x01); // **** Clear display
    }
    
//while(0);
  }
  }






void sendData(unsigned char data)
{
    Wire.beginTransmission(OLED_Address);   // **** Start I2C
    Wire.write(OLED_Data_Mode);     // **** Set OLED Data mode
    Wire.write(data);
    Wire.endTransmission();                     // **** End I2C
}

void sendCommand(unsigned char command)
{
    Wire.beginTransmission(OLED_Address); // **** Start I2C
    Wire.write(OLED_Command_Mode);     // **** Set OLED Command mode
    Wire.write(command);
    Wire.endTransmission();                 // **** End I2C
      delay(10);
}

void send_string(const char *String)
{
    unsigned char i=0;
    while(String[i])
    {
        sendData(String[i]);      // *** Show String to OLED
        i++;
    }
   // while(0);
}
[/code]

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

zmike77 пишет:

Что подправить, чтобы он горел постоянно?

Перенести инициализацию дисплея в setup()

zmike77
Offline
Зарегистрирован: 06.10.2019

Работает!

Большое спасибо!!!