OLED 1602 with encoder
- Войдите на сайт для отправки комментариев
Вс, 06/10/2019 - 19:43
Добрый день всем!!!
Помогите исправить программу.
На цифровые входы (2,4,7) заведен энкодер.
Программа все правильно читает и выводит на дисплей, но он моргает примерно с интервалом в 1 секунду.
Что подправить, чтобы он горел постоянно?
Moderator : пожалуйста, вставьте код правильно, как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
[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]Что подправить, чтобы он горел постоянно?
Перенести инициализацию дисплея в setup()
Работает!
Большое спасибо!!!