Recent Posts

Pages: [1] 2 3 ... 10
1
I recently purchased 3 each of the above units.  The X+,X-,Y+,Y- signals from the display are carried on the 40 pin conductor between the display and the NHD-5.0-800480TF-20 Controller Board.  There is no output of the  X+,X-,Y+,Y- signals on the NHD-5.0-800480TF-20 Controller Board.  How does one access those signals?
Kind regards,
David
2
TFTs / NHD-3.5-320240MF-ASXN-T touch pin mapping
« Last post by surya14 on May 18, 2017, 02:04:08 AM »
i am using NHD-3.5-320240MF-ASXN-T display with four wire resistive touch. NHD-3.5-320240MF-ASXN-T datasheet refers pins as X1,X2,Y1,Y2 while my touch screen controller (stmpe811) datasheet specifies pins as X+, X-, Y+, Y-.
Please tell me how to correctly map both.
3
OLEDs / Re: How work with NHD-0216AW-SB3
« Last post by Saurabh_B on May 17, 2017, 04:30:14 PM »
Hello Racurs,

The datasheet is set up properly. The D/C# and R/W# bits are set when sending the initial data.
The information for this can be found on page nine of the controller datasheet (LINK).

Please also note that when sending data to this display I you do need to break each byte into half and send 4 bits at a time. This is also explained on page ten of the controller datasheet linked above.
4
TFTs / NHD-3.5-320240MF-ASXN-T touch screen calibration
« Last post by surya14 on May 17, 2017, 08:23:36 AM »
I am using NHD-3.5-320240MF-ASXN-T with toradex apalis imx6 board which is using linux kernel 4.1.39. I am trying to get touch screen working , i tried modifying device tree but nothing seems like working for me. my touch screen controller is stmpe811.
l
5
OLEDs / How work with NHD-0216AW-SB3
« Last post by Racurs on May 17, 2017, 05:40:13 AM »
Good afternoon! I want to use the NHD-0216AW-SB3 display in my design, but having looked at the instruction set I do not understand how to form them. For example, D / C #, R / W # signals for displays with a SPI interface are not available at all. Is the correct datasheet posted on the site for this display? Is it necessary to somehow generate signals IS, RE, SD?
6
OLEDs / Re: NHD-0216AW-IB3 with Arduino Uno Code example?
« Last post by mprowe on May 11, 2017, 01:22:56 PM »
Oh, I'm really sorry Chris,

But it is still no-go for me! I've pasted the first few "red" lines below. Is there a more effective way to give you the compilation log?
The message in the Arduino IDE output window is "Error compiling for board Arduino/Genuino Uno"  - This is where I started?

Code: [Select]
Linking everything together...
"/home/mprowe/.arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/bin/avr-gcc"  [... truncated ...]
/tmp/ccnQrlgR.ltrans0.ltrans.o: In function `__static_initialization_and_destruction_0':
/home/mprowe/Arduino/nhd-i2c/oled-example/oled-example.ino:11: undefined reference to `OLedI2C::OLedI2C()'
/tmp/ccnQrlgR.ltrans0.ltrans.o: In function `setup':

Regards, Martin
7
OLEDs / Re: NHD-0216AW-IB3 with Arduino Uno Code example?
« Last post by Chris O. on May 10, 2017, 06:20:20 PM »
Whoops it appears I have more than one of these libraries all over in different Arduino installations  :-[.
Well this time I did test it and it compiles, i hate to do this to you but you have to try again with these files.

keywords.txt / OLedI2C.cpp / OLedI2C.h
The 3 files should be in %your arduino dir%\libraries\OLedI2C\
The directory name must match the library name for libraries to work.

OLedI2C.cpp
Code: [Select]
// 1602-OLED-Arduino-Library/OLedI2C.cpp
// keywords.txt / OLedI2C.cpp / OLedI2C.h
// The 3 files should be in %your arduino dir%\libraries\OLedI2C\
// The directory name must match the library name for libraries to work.

/*
This is my first Library to make writing to the OLED 1602
 Display much easier, the display is based on the SSD1311.
 The display has 16 characters and 2 lines.
 The library is far from complete and may be prone to errors.
 Feedback welcome, visit www.gadjet.co.uk
 Phil Grant 2013
 Scrolling contributed by Nathan Chantrell http://nathan.chantrell.net/
 Updated 06/11/2013 to include the cursPos data in the sendString function
 sendString("string", col, row)
 */
#include "OLedI2C.h"

#if (ARDUINO <  100)
#include <WProgram.h>
#else
#include <Arduino.h>
#endif

#include "Wire.h"
////////////////#define OLED_Address 0x3c
#define OLED_Command_Mode 0x80
#define OLED_Data_Mode 0x40

OLedI2C::OLedI2C(){
}
OLedI2C::~OLedI2C(){
}

uint8_t _OLED_Address; //global variable initialization

void OLedI2C::init(uint8_t OLED_Address) {

  _OLED_Address = OLED_Address;

  // *** I2C initial *** //
  delay(100);
  sendCommand(0x2A); //function set (extended command set)
  sendCommand(0x71); //function selection A
  sendData(0x00); // disable internal VDD regulator (2.8V I/O). data(0x5C) = enable regulator (5V I/O)
  sendCommand(0x28); //function set (fundamental sendCommand set)
  sendCommand(0x08); //display off, cursor off, blink off
  sendCommand(0x2A); //function set (extended command set)
  sendCommand(0x79); //OLED command set enabled
  sendCommand(0xD5); //set display clock divide ratio/oscillator frequency
  sendCommand(0x70); //set display clock divide ratio/oscillator frequency
  sendCommand(0x78); //OLED command set disabled
  sendCommand(0x09); //extended function set 4 line
  sendCommand(0x06); //COM SEG direction
  sendCommand(0x72); //function selection B
  sendData(0x00); //ROM CGRAM selection
  sendCommand(0x2A); //function set (extended command set)
  sendCommand(0x79); //OLED command set enabled
  sendCommand(0xDA); //set SEG pins hardware configuration
  sendCommand(0x10); //set SEG pins hardware configuration
  sendCommand(0xDC); //function selection C
  sendCommand(0x00); //function selection C
  sendCommand(0x81); //set contrast control
  sendCommand(0x7F); //set contrast control
  sendCommand(0xD9); //set phase length
  sendCommand(0xF1); //set phase length
  sendCommand(0xDB); //set VCOMH deselect level
  sendCommand(0x40); //set VCOMH deselect level
  sendCommand(0x78); //OLED command set disabled
  sendCommand(0x28); //function set (fundamental command set)
  sendCommand(0x01); //clear display
  sendCommand(0x80); //set DDRAM address to 0x00
  sendCommand(0x0C); //display ON

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

// void OLedI2C::cursPos(uint8_t col, uint8_t row)
// {
// int row_offsets[] = { 0x00, 0x40 };
// sendCommand(0x80 | (col + row_offsets[row]));
// }

void OLedI2C::cursPos(uint8_t col, uint8_t row)
{
  int row_offsets[] = {
    0x00, 0x20, 0x40, 0x60   };// **************THIS WAS THE CHANGE FOR 4 LINES
  sendCommand(0x80 | (col + row_offsets[row])); //was 0x80
}

// NEW 03-23-2015
// cloumn, row / setCursor
void OLedI2C::setCursor(uint8_t col, uint8_t row)
{
  int row_offsets[] = {
    0x00, 0x20, 0x40, 0x60   };// **************
  sendCommand(0x80 | (col + row_offsets[row]));
}

void OLedI2C::clearLcd()
{
  sendCommand(0x01);
}

// arduino com.
void OLedI2C::clear() // *********Compatible with LiquidCrystal lib.
{
  sendCommand(0x01);
}

void OLedI2C::home()
{
  sendCommand(0x02);
}

void OLedI2C::lcdOff()
{
  sendCommand(0x08);  // **** Turn on Off
}

void OLedI2C::lcdOn()
{
  sendCommand(0x0C);  // **** Turn on On
}

void OLedI2C::noDisplay() // *********Compatible with LiquidCrystal lib.
{
  sendCommand(0x08);  // **** Turn on Off
}

void OLedI2C::display() // *********Compatible with LiquidCrystal lib.
{
  sendCommand(0x0C);  // **** Turn on On
}

// Turns the underline cursor on/off
void OLedI2C::noCursor() {
  sendCommand(0x0C);   // **** Turn Off underline cursor
}
void OLedI2C::cursor() {
  sendCommand(0x0E);  // **** Turn On underline cursor
}

// Turn on and off the blinking cursor
void OLedI2C::noBlink() {
  sendCommand(0x0C);  // **** Turn Off blinking cursor
}
void OLedI2C::blink() {
  sendCommand(0x0D);  // **** Turn On blinking cursor
}


void OLedI2C::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
}

// ARDUINO 0.23 ~ ARDUINO 1.0.0 and Up ======= Print ==============================================
#if (ARDUINO <  100)
inline void OLedI2C::write(uint8_t value) {
  sendData(value);
}
#else
inline size_t OLedI2C::write(uint8_t value) {
  sendData(value);
}
#endif

void OLedI2C::setDoubleH(uint8_t MODE) // 09-19-2015 / Double Height Display MODE 0~4
// MODE: "0"=Normal 4-line, "1"=Bottom half Double Height, "2"=Middle Double Height, "3"=Top/Bottom Double Height, "4"=Top Double Height
{
  sendCommand(0x2A);// Function Set  (extended command set / Extension register, RE ("1")set) B00101010
  sendCommand(B00001001);//Extended Function Set (FW = "0": 5-dot font width, black/white invert cursor DIS,NW = "1": 3-line or 4-line display mode)
  switch (MODE) {
  case 0:    //MODE 0 4x20-line
    sendCommand(0x28);// Function Set (Go Back to Fundamental Command Set)//101000
    break;
  case 1:    //MODE 1 0x10 / Double Height (4-line)/Display-dot shift
    sendCommand(B00010000); //MODE 2
    sendCommand(0x2C);//101100 Function Set ( when (N=1 :4-line )and(NW=1), Double height =1 Enable, Extension register, RE"0", Extension register, IS"0" )
    break;
  case 2:    //MODE 2 0x14 / Double Height (4-line)/Display-dot shift
    sendCommand(B00010100);   //MODE 2 0x14 / Double Height (4-line)/Display-dot shift
    sendCommand(0x2C);//101100 Function Set ( when (N=1 :4-line )and(NW=1), Double height =1 Enable, Extension register, RE"0", Extension register, IS"0" )
    break;
  case 3:    //MODE 3 0x18 / Double Height (4-line)/Display-dot shift (DH’ = "0": dot scroll enable (POWER UP))
    sendCommand(B00011000);
    //sendCommand(B00011001); //MODE 3 0x19 / Double Height (4-line)/Display-dot shift (DH’ = "1": display shift enable)
    sendCommand(0x2C);//101100 Function Set ( when (N=1 :4-line )and(NW=1), Double height =1 Enable, Extension register, RE"0", Extension register, IS"0" )
    break;
  case 4:
    sendCommand(B00011100);  //MODE 4 0x1C / Double Height (4-line)/Display-dot shift(DH’ = "0": display shift DIS)
    sendCommand(0x2C);//101100 Function Set ( when (N=1 :4-line )and(NW=1), Double height =1 Enable, Extension register, RE"0", Extension register, IS"0" )
    break;
  }
}

void OLedI2C::sendFloat(float digit, uint8_t dec, uint8_t nad, uint8_t col, uint8_t row)
{
  char line[10];//Ten characters, I hope that's enough
  dtostrf(digit,dec,nad,line);//Convert the float value to a string
  sendString(line, col, row);
}

void OLedI2C::setContrast(unsigned char contrast) // contrast as 0x00 to 0xFF
{
  //Set OLED Command set
  sendCommand(0x2A);        //Function Set  N = 1, BE = 0, RE = 1 Set, REV = "0": normal display (POR)  B00101010
  sendCommand(0x79);        //OLED Characterization / 0x79 B1111001 =  OLED command set is enabled
  sendCommand(0x81);  // Set Contrast
  sendCommand(contrast); // send contrast value
  sendCommand(0x78);  // OLED Characterization / 0x78 B1111000 =Exiting Set OLED Command set disabled (POR)
  sendCommand(0x28);       // Function Set / B101000 (Go Back to Fundamental Command Set)
}

void OLedI2C::sendString(const char *String, uint8_t col, uint8_t row)
{
  cursPos(col, row);
  unsigned char i=0;
  while(String[i])
  {
    sendData(String[i]);      // *** Show String to OLED
    i++;
  }
}

void OLedI2C::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 OLedI2C::scrollString(char* message, byte row, unsigned int time)//written by Nathan Chantrell http://nathan.chantrell.net/
{
  char buffer[16];
  for (byte i=0;i<strlen(message)+16;i++) {
    byte pos = i+1;
    for (byte j=0;j<16;j++) {
      if ((pos<16)||(pos>strlen(message)+15)) { // pad and trail with blank spaces
        buffer[j]=' ';
      }
      else buffer[j]=message[pos-16];
      pos++;
    }
    //cursPos(0,row); removed by PG
    sendString(buffer, 0, row); //Edited by PG tho include the cursor pos within the sendString command
    delay(time);
  }
}




//#define OLED_Command_Mode 0x80
//#define OLED_Data_Mode 0x40
// NEW 03-23-2015
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void OLedI2C::createChar(uint8_t location, uint8_t charmap[])
{
  location &= 0x7; // we only have 8 locations 0-7
  //Wire.beginTransmission(_OLED_Address);
  //Wire.write(OLED_Data_Mode | (location << 3)); // SETCGRAMADDR 0x40  [ Wire.write(B01000000); ]
  //Wire.endTransmission();

  Wire.beginTransmission(_OLED_Address); // **** Start I2C
  Wire.write(OLED_Command_Mode); // 0x80
  Wire.write(0x40 | (location << 3));      // **** Set OLED Command mode
  Wire.endTransmission();                  // **** End I2C
 

  for (uint8_t i = 0 ; i < 8 ; i++) {
    Wire.beginTransmission(_OLED_Address); // **** Start I2C
    Wire.write(OLED_Data_Mode);      // **** Set OLED Data mode
    Wire.write(charmap[i]);
    Wire.endTransmission();                     
  }
}
 
/*
// NEW 03-31-2015
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void OLedI2C::createChar(uint8_t location, uint8_t charmap[])
{
  location &= 0x7;            // we only have 8 locations 0-7

    sendCommand(0x40 | (location << 3));

  for (int i=0; i<8; i++)
  {
    sendData(charmap[i]);      // call the virtual write method
  }
}
*/

OLedI2C.h
Code: [Select]
// 1602-OLED-Arduino-Library/OLedI2C.h

/*
OLedI2C.h
OLED 1602 Library for the I2C
OLED display from WIDE.HK
Also my first attempt at a Library
Phil Grant Sept 2013
www.gadjet.co.uk
Scrolling contributed by Nathan Chantrell http://nathan.chantrell.net/
Updated 06/11/2013 to include the cursPos data within the sendString function.
*/
#ifndef OLedI2C_h
#define OLedI2C_h
#include "Arduino.h"
#include "Wire.h" // NEED FIX
//#include <i2c_t3.h> //Enhanced I2C library for Teensy 3.0/3.1/LC devices

#include "Print.h"


class OLedI2C : public Print {
public:
OLedI2C();
~OLedI2C();
// void init(); // OLD
            void init(uint8_t OLED_Address);
void sendCommand(unsigned char command);
void sendString(const char *String, uint8_t col, uint8_t row);
void sendFloat(float digit, uint8_t dec, uint8_t nad, uint8_t col, uint8_t row);
void sendData(unsigned char data);
void clearLcd();
            void clear();
            void home();
            void noDisplay();
            void display();
            void noCursor();
            void cursor();
            void noBlink();
            void blink();
void cursPos(uint8_t, uint8_t); // cloumn, row
            void setCursor(uint8_t, uint8_t); // *********Compatible with LiquidCrystal lib.
            void setCursor2(uint8_t, uint8_t); // 03-23-2015 / cloumn, row / setCursor
void scrollString(char* message, byte row, unsigned int time); //written by Nathan Chantrell http://nathan.chantrell.net/
void lcdOff();
void lcdOn();
            void setDoubleH(uint8_t); // 09-19-2015 / Double Height Display MODE 0~4
void setContrast(uint8_t contrast); // contrast should be the hex value between 0x00 and 0xFF
            void createChar(uint8_t, uint8_t[]); // NEW 03-23-2015 / Allows us to fill the first 8 CGRAM locations with custom characters

            // Compatible = ARDUINO= 0.23 = 1.6.5 ================
            #if (ARDUINO <  100)
            virtual void write(uint8_t);
            #else
            virtual size_t write(uint8_t);
            #endif // my code ==========================
};
#endif

keywords.txt
Code: [Select]
#######################################
# Syntax Coloring Map For OLedI2C
#######################################

#######################################
# Datatypes (KEYWORD1)
#######################################

OLedI2C KEYWORD1

#######################################
# Methods and Functions (KEYWORD2)
#######################################

init KEYWORD2
sendCommand KEYWORD2
sendData KEYWORD2
sendString KEYWORD2
sendFloat KEYWORD2
clearLcd KEYWORD2
clear KEYWORD2
home KEYWORD2
noDisplay KEYWORD2
display KEYWORD2
noCursor KEYWORD2
cursor KEYWORD2
noBlink KEYWORD2
blink KEYWORD2
cursPos KEYWORD2
setCursor KEYWORD2
createChar KEYWORD2
scrollString KEYWORD2
lcdOn KEYWORD2
lcdOff KEYWORD2
setContrast KEYWORD2
setDoubleH KEYWORD2

#######################################
# Constants (LITERAL1)
#######################################

Another example
Code: [Select]
/*
  Example sketch to display Strings and float values on the OLED
  1602 display  from Wide.HK. This uses a Lbrary that I've
  put together containing some basic functions.
  The I2C Address is set to 0x3C in OLedI2C.cpp
  Phil Grant 2013 www.gadjet.co.uk  07/11/13
*/

#include "Wire.h"
#include "OLedI2C.h"
OLedI2C LCD;
#define I2C_ADDR 0x3c  // Define I2C Address, 0x3c or 0x3d

float digit; //Variable to hold sample temperature value

void setup()
{
  Wire.begin();
  LCD.init(I2C_ADDR); // initialize the lcd with I2C Address
  digit = 21.6; //This would normally be the float value returned from a temp sensor or other sensor
}
void loop()
{
  LCD.sendString("Temp", 0, 0); //Now includes the cursor position data (col, row)
  LCD.sendFloat(digit, 5, 2, 7, 0); //Send the float value to the display starting
  //at col 7 row 1 with 5 digits and 2 decimal places
  while (1);
}


Also the I2C address 0x3c may need to be edit for the screen you use.
Just run this and open the serial monitor it should show you the correct address.
 i2c_scanner
Code: [Select]
// i2c_scanner
 //
 // This program (or code that looks like it)
 // can be found in many places.
 // For example on the Arduino.cc forum.
 // The original author is not know.
 //
 // This sketch tests the standard 7-bit addresses
 // from 0 to 127. Devices with higher bit address
 // might not be seen properly.
 //
 // Adapted to be as simple as possible by Arduino.cc user Krodal
 //
 // June 2012
 // Using Arduino 1.0.1
 //
#include <Wire.h>
void setup()
 {
   Wire.begin();
 
  Serial.begin(9600);
   Serial.println("\nI2C Scanner");
 }
void loop()
 {
   byte error, address;
   int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
   for(address = 0; address <= 127; address++ )
  {
     // The i2c_scanner uses the return value of
     // the Write.endTransmisstion to see if
     // a device did acknowledge to the address.
     Wire.beginTransmission(address);
     error = Wire.endTransmission();
 
    if (error == 0)
     {
       Serial.print("I2C device found at address 0x");
       if (address<16)
        Serial.print("0");
       Serial.print(address,HEX);
       Serial.println(" !");
 
      nDevices++;
     }
     else if (error==4)
    {
       Serial.print("Unknow error at address 0x");
       if (address<16)
        Serial.print("0");
       Serial.println(address,HEX);
     }   
   }
   if (nDevices == 0)
     Serial.println("No I2C devices found\n");
   else
     Serial.println("done\n");
 
  delay(8000);           // wait 8 seconds for next scan
 }

8
Evaluation Tools / Re: NHD-7.0CTP-CAPE-N Picture offset
« Last post by Paul_B on May 10, 2017, 08:06:32 AM »
Not a problem, you should receive the patch files via eamil shortly  ;)
9
OLEDs / Re: NHD-0216AW-IB3 with Arduino Uno Code example?
« Last post by mprowe on May 10, 2017, 04:49:03 AM »
Thank you Chris,

Think I have installed the libraries & example correctly. But....

Isn't there always? Anyway, this is what I get (abridged) when I try to compile:
Code: [Select]

/home/mprowe/Arduino/libraries/OLedI2C/OLedI2C.h:22:8: note: void OLedI2C::init()
   void init();
        ^
/home/mprowe/Arduino/libraries/OLedI2C/OLedI2C.h:22:8: note:   candidate expects 0 arguments, 1 provided

This is the faulting line (should I2C_ADDR be there?):
Code: [Select]
  LCD.init(I2C_ADDR); // initialize the lcd with I2C AddressThere is also a call to LCD.print (line 98)  which is not in the library.

Regards, Martin
10
OLEDs / Re: NHD-0216AW-IB3 with Arduino Uno Code example?
« Last post by Chris O. on May 09, 2017, 09:57:30 PM »
Edit:
Please do not use this use the one on Reply #5

library by Phil Grant 2013  www.gadjet.co.uk
OLedI2C library http://gadjetsblog.blogspot.com/2013/09/oled-1602-display-and-library-for.html

Perhaps this will be of help.
Been long time since I used this Library, createChar function contributed by me.

keywords.txt / OLedI2C.cpp / OLedI2C.h
The 3 files should be in %your arduino dir%\libraries\OLedI2C\
The directory name must match the library name for libraries to work.

NOTE: this is set up for 04x20 oled now.
Look for this in OLedI2C.cpp perhaps you can edit that line for 02x16.
 int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };// **************THIS WAS THE CHANGE FOR 4 LINES.

keywords.txt
Code: [Select]
#######################################
# Syntax Coloring Map For OLedI2C
#######################################

#######################################
# Datatypes (KEYWORD1)
#######################################

OLedI2C KEYWORD1

#######################################
# Methods and Functions (KEYWORD2)
#######################################

init KEYWORD2
sendCommand KEYWORD2
sendString KEYWORD2
sendData KEYWORD2
clearLcd KEYWORD2
cursPos KEYWORD2
setCursor KEYWORD2
createChar KEYWORD2

#######################################
# Constants (LITERAL1)
#######################################


OLedI2C.cpp
Code: [Select]
// 1602-OLED-Arduino-Library/OLedI2C.cpp
// keywords.txt / OLedI2C.cpp / OLedI2C.h
// The 3 files should be in %your arduino dir%\libraries\OLedI2C\
// The directory name must match the library name for libraries to work.

/*
This is my first Library to make writing to the OLED 1602
Display much easier, the display is based on the SSD1311.
The display has 16 characters and 2 lines.
The library is far from complete and may be prone to errors.
Feedback welcome, visit www.gadjet.co.uk
Phil Grant 2013
Scrolling contributed by Nathan Chantrell http://nathan.chantrell.net/
Updated 06/11/2013 to include the cursPos data in the sendString function
sendString("string", col, row)
*/
#include "OLedI2C.h"

// NEW
//#include <stdio.h>
//#include <string.h>
//#include <inttypes.h>
//#include "Arduino.h"

#include "Wire.h"
#define OLED_Address 0x3c
#define OLED_Command_Mode 0x80
#define OLED_Data_Mode 0x40

OLedI2C::OLedI2C(){}
OLedI2C::~OLedI2C(){}


void OLedI2C::init() {
   // *** I2C initial *** //
 delay(100);
 sendCommand(0x2A); // **** Set "RE"=1 00101010B
 sendCommand(0x71);
 sendCommand(0x5C);
 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  01111000B

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

 sendCommand(0x06); // **** Set Com31-->Com0  Seg0-->Seg99

 // original:
 // **** 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

 // **** CGROM/CGRAM Management *** //
 sendCommand(0x72);     // **** Set ROM
 sendData(B00000011);     // **** Set ROM A and 8 CGRAM This selects CGROM A, 00000000 selects CGROM C
 // **** Set OLED Characterization *** //
 sendCommand(0x2A);     // **** Set "RE"=1
 sendCommand(0x79);     // **** Set "SD"=1

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

 sendCommand(0x81);  // **** Set Contrast
 sendCommand(0xFF);

 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
 sendCommand(0x06); // **** Set Entry Mode
 sendCommand(0x08); 
 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
 }
 
 // void OLedI2C::cursPos(uint8_t col, uint8_t row)
 // {
 // int row_offsets[] = { 0x00, 0x40 };
 // sendCommand(0x80 | (col + row_offsets[row]));
 // }

 void OLedI2C::cursPos(uint8_t col, uint8_t row)
 {
 int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };// **************THIS WAS THE CHANGE FOR 4 LINES
 sendCommand(0x80 | (col + row_offsets[row])); //was 0x80
 }
 
 // NEW 03-23-2015
 // cloumn, row / setCursor
  void OLedI2C::setCursor(uint8_t col, uint8_t row)
 {
  int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };// **************
 sendCommand(0x80 | (col + row_offsets[row]));
 }
 
void OLedI2C::clearLcd()
{
sendCommand(0x01);
}

void OLedI2C::lcdOff()
{
sendCommand(0x08);  // **** Turn on Off
}

void OLedI2C::lcdOn()
{
sendCommand(0x0C);  // **** Turn on On
}

 void OLedI2C::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 OLedI2C::sendFloat(float digit, uint8_t dec, uint8_t nad, uint8_t col, uint8_t row)
{
char line[10];//Ten characters, I hope that's enough
dtostrf(digit,dec,nad,line);//Convert the float value to a string
sendString(line, col, row);

}

 void OLedI2C::setContrast(unsigned char contrast) // contrast as 0x00 to 0xFF
{
     //Set OLED Command set
sendCommand(0x2A);
sendCommand(0x79);

sendCommand(0x81);  // Set Contrast
sendCommand(contrast); // send contrast value
sendCommand(0x78);  // Exiting Set OLED Command set
   sendCommand(0x28);

}

void OLedI2C::sendString(const char *String, uint8_t col, uint8_t row)
{
  cursPos(col, row);
  unsigned char i=0;
  while(String[i])
  {
    sendData(String[i]);      // *** Show String to OLED
    i++;
  }
}
void OLedI2C::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 OLedI2C::scrollString(char* message, byte row, unsigned int time)//written by Nathan Chantrell http://nathan.chantrell.net/
{
 char buffer[16];
 for (byte i=0;i<strlen(message)+16;i++) {
  byte pos = i+1;
  for (byte j=0;j<16;j++) {
   if ((pos<16)||(pos>strlen(message)+15)) { // pad and trail with blank spaces
     buffer[j]=' ';
   }
   else buffer[j]=message[pos-16];
   pos++;
  }
 //cursPos(0,row); removed by PG
 sendString(buffer, 0, row); //Edited by PG tho include the cursor pos within the sendString command
 delay(time);
 }
}

// NEW 03-31-2015
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void OLedI2C::createChar(uint8_t location, uint8_t charmap[])
{
   location &= 0x7;            // we only have 8 locations 0-7
   
   sendCommand(0x40 | (location << 3));
   delayMicroseconds(30);
   
   for (int i=0; i<8; i++)
   {
      sendData(charmap[i]);      // call the virtual write method
      delayMicroseconds(40);
   }
}

OLedI2C.h
Code: [Select]
// 1602-OLED-Arduino-Library/OLedI2C.h

/*
OLedI2C.h
OLED 1602 Library for the I2C
OLED display from WIDE.HK
Also my first attempt at a Library
Phil Grant Sept 2013
www.gadjet.co.uk
Scrolling contributed by Nathan Chantrell http://nathan.chantrell.net/
Updated 06/11/2013 to include the cursPos data within the sendString function.
*/
#ifndef OLedI2C_h
#define OLedI2C_h
#include "Arduino.h"
#include "Wire.h"

class OLedI2C {
public:
OLedI2C();
~OLedI2C();
void init();
void sendCommand(unsigned char command);
void sendString(const char *String, uint8_t col, uint8_t row);
void sendFloat(float digit, uint8_t dec, uint8_t nad, uint8_t col, uint8_t row);
void sendData(unsigned char data);
void clearLcd();
void cursPos(uint8_t, uint8_t); // cloumn, row
void setCursor(uint8_t, uint8_t); // NEW 03-23-2015 / cloumn, row / setCursor
void scrollString(char* message, byte row, unsigned int time); //written by Nathan Chantrell http://nathan.chantrell.net/
void lcdOff();
void lcdOn();
void setContrast(unsigned char contrast); // contrast should be the hex value between 0x00 and 0xFF
void createChar(uint8_t, uint8_t[]); // NEW 03-23-2015 / Allows us to fill the first 8 CGRAM locations with custom characters
};
#endif

Example
Code: [Select]
// I2C Wire Library Newhaven Display NHD-0420CW OLED TEST

// Wire Library, This library allows you to communicate with I2C / TWI devices
// Board           I2C / TWI pins
// Uno, Ethernet   A4 (SDA), A5 (SCL)
// Mega2560        20 (SDA), 21 (SCL)
// Leonardo         2 (SDA),  3 (SCL)
// Due             20 (SDA), 21 (SCL), SDA1, SCL1
//Teensy 3.0/3.1   18 (SDA), 19 (SCL),Back Side 30 (SDA1), 29 (SCL1)

#include <Wire.h> 

#define I2C_ADDR 0x3c  // Define I2C Address, 0x3c or 0x3d
#include <OLedI2C.h> 
OLedI2C LCD;

// custom font arrays
byte newChar1[8] = {
  B11011,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B10101
};

byte newChar2[8] = {
  B10000,
  B01000,
  B00101,
  B00100,
  B00100,
  B00101,
  B01000,
  B10000
};

byte newChar3[8] = {
  B10001,
  B01010,
  B01110,
  B00100,
  B00100,
  B01110,
  B01010,
  B10001
};

byte newChar4[8] = {
  B11111,
  B11111,
  B11111,
  B00100,
  B00100,
  B11111,
  B11111,
  B11111
};

byte newChar5[8] = { // 5TH custom font
  B10101,
  B10000,
  B10110,
  B00001,
  B00000,
  B10001,
  B01010,
  B00000
};

void setup() {
  Wire.begin(); // Start Wire Library
  LCD.init(I2C_ADDR); // initialize the lcd with I2C Address
//delay(1000);
  // Store custom font data in 420CW Oled
  LCD.createChar(0, newChar1);
  LCD.createChar(1, newChar2);
  LCD.createChar(2, newChar3);
  LCD.createChar(3, newChar4);
  LCD.createChar(4, newChar5);
  LCD.createChar(5, newChar5);
  LCD.createChar(6, newChar5);
  LCD.createChar(7, newChar5);

   
   LCD.sendString("SETUP ()", 0, 0);    //("String", col, row)
   delay(1000);
}

void loop() {
  //////////// set Contrast test 1 ////////////////
  LCD.sendString("set Contrast test DW", 0, 0);    //("String", col, row)
    for (int Contrast = 255; Contrast > 0; Contrast = Contrast-- / 2 ) {
    LCD.setContrast(Contrast); // Set Contrast (Minimum allowed 0) 0~255
    LCD.setCursor(9,1); //(col,row)
    LCD.print(Contrast);
    LCD.print("    "); //clear
    delay(300); //delay not necessary as its sending a lot of Commands wich has delay inside the lib.
   
  }
  delay(2000); // 2sec. delay
 
  LCD.clearLcd();
  LCD.sendString("set Contrast test UP", 0, 0);    //("String", col, row)
  for (int Contrast = 0; Contrast < 510; Contrast = Contrast++ * 2 ) {
    LCD.setContrast(Contrast); // Set Contrast (Minimum allowed 0) 0~255
    LCD.cursPos(9,1); //(col,row)
    LCD.print(Contrast);
    LCD.print("    "); //clear
    delay(300); //delay not necessary as its sending a lot of Commands wich has delay inside the lib.
  }
  delay(2000); // 2sec. delay
  LCD.clearLcd();
 
  // Double Height(4-line) Test
  LCD.sendString("Double Height(4x20)", 0, 0);
  LCD.sendString("Test", 8, 1);
  delay(2000); // 2sec. delay
  LCD.setDoubleH(1);
  LCD.sendString("MODE 1", 0, 2);
  delay(1000); // 1sec. delay
  LCD.setDoubleH(2);
  LCD.sendString("MODE 2", 0, 2);
  delay(1000); // 1sec. delay
  LCD.setDoubleH(3);
  LCD.sendString("MODE 3", 0, 1);
  delay(1000); // 1sec. delay
  LCD.sendString("      ", 0, 1); // clear MODE 3 from Oled
 
  LCD.setDoubleH(4);
  LCD.sendString("MODE 4", 0, 2);
  delay(1000); // 1sec. delay
  LCD.setDoubleH(0); //back to 4x20
  LCD.sendString("MODE 0 (4-line)", 0, 2);
  delay(3000); // 3sec. delay
  LCD.clearLcd();

  //////////// Print custom font Using Wire.h Library test 2 ////////////////
  LCD.setDoubleH(3); // MODE 1
  LCD.sendString("Print custom font / Wire Library", 0, 0);    //("String", col, row)
  LCD.sendString("custom font -->", 0, 3);
  delay(3000); // 1sec. delay
  LCD.setDoubleH(0);
  delay(1000); // 1sec. delay
  LCD.cursPos(16,3); //(col,row) / set up position 
  // Test  / Print custom font 5 using Wire.h Library
  Wire.beginTransmission(I2C_ADDR); // start condition + Define I2C Address where the US2066 is, and set  R/W# bit to logic “0” write mode.
  // Print custom font
  Wire.write(B01000000); // control byte or the data byte, Co and D/C# bits following by six “0”’s.
  //Wire.write(B00000011); //DEC 3 // print custom font 4  [8bit (hi bit 0000/low bit 0011
  Wire.write(4); //DEC 4 / 5th custom font (Zero based array indexing.....)
  Wire.endTransmission(); // stop condition / 7) The write mode will be finished when a stop condition is applied.
  delay(3000); // 3sec. delay
  LCD.clearLcd();
  delay(1000); //1sec. delay

  //////////// Print 2 custom font Using LCD.sendData test 3 ////////////////
  LCD.sendString(" Print two custom   fonts / LCD.sendData", 0, 0);    //("String", col, row)
  LCD.cursPos(2,2); //(col,row)
  LCD.print("---> ");
  delay(1000); // 1sec. delay
  LCD.sendData(0); //Print custom font 1 (Zero based array indexing.....)
  LCD.print(" <---> ");
  delay(1000); // 1sec. delay
  LCD.sendData(char(1)); //Print custom font 2
  delay(3000); // 3sec. delay
  LCD.clearLcd();
  delay(1000);
 
  //LCD.scrollString("test", 2, 100);

  //////////// command test ////////////////
  /*
  sendCommand(0x2A);//function set (extended command set)
  sendCommand(0x71); //function selection A
  sendData(0x00);    //disable internal VDD regulator (2.8V I/O). data(0x5C) = enable regulator (5V I/O)
  sendCommand(0x28); //function set (fundamental sendCommand set)
  sendCommand(0x08); //display off, cursor off, blink off
  sendCommand(0x2A); //function set (extended command set)
  sendCommand(0x79); //OLED command set enabled
  sendCommand(0xD5); //set display clock divide ratio/oscillator frequency
  sendCommand(0x70); //set display clock divide ratio/oscillator frequency
  sendCommand(0x78); //OLED command set disabled
  sendCommand(0x09); //extended function set (4-lines) / last bit=1 : 3-line or 4-line display mode
  sendCommand(0x06); //COM SEG direction
  sendCommand(0x72); //function selection B
  sendData(B00000000);   //ROM CGRAM selection
  sendCommand(0x2A); //function set (extended command set)
  sendCommand(0x79); //OLED command set enabled
  sendCommand(0xDA); //set SEG pins hardware configuration
  sendCommand(0x10); //set SEG pins hardware configuration
  sendCommand(0xDC); //function selection C
  sendCommand(0x00); //function selection C
  sendCommand(0x81); //set contrast control
  sendCommand(0x7F); //set contrast control
  sendCommand(0xD9); //set phase length
  sendCommand(0xF1); //set phase length
  sendCommand(0xDB); //set VCOMH deselect level
  sendCommand(0x40); //set VCOMH deselect level
  sendCommand(0x78); //OLED command set disabled
  sendCommand(0x28); //function set (fundamental command set)
  sendCommand(0x01); //clear display
  sendCommand(0x80); //set DDRAM address to 0x00
  sendCommand(0x0C); //display ON

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

 
 
 
 
}
Pages: [1] 2 3 ... 10