[BPI-M3] BPI RGB&1602 Module and how to use

OS: BPI-M3 Ubuntu15.10 (Kernel3.4) Version: 1.0 HDMI


Step 1: Download WiringPI

$ git clone https://github.com/BPI-SINOVOIP/BPI-WiringPi.git1 -b BPI_M3 $ cd BPI-WiringPi $ chmod +x ./build $ sudo ./build

Step 2 : Copy smaple code to 1602.c file

$ sudo vi 1602.c

Step 3 : Compile 1602.c

$ gcc -o 1602 1602.c -l wiringPi -lpthread -lwiringPiDev

Step 4: Run 1602

$ sudo ./1602


Video Demo:


Sample Code:

#include <stdio.h>
#include <wiringPi.h>
#include <pthread.h>
#include <mcp23017.h>
#include <lcd.h>
#include <time.h> 

int page=3;  
int select=1;  
int display;  
int color=0;  
pthread_t id;  
void show()  
{  
    time_t timep;  
    struct tm *ptm;  
    digitalWrite ( 113, LOW);  
    digitalWrite ( 114, LOW);  
    digitalWrite ( 115, LOW);  
    lcdPosition(display,0,0);  
    switch(page)  
    {  
        case 0:  
            if (select==1)  
            {  
                lcdPrintf(display,">>1.System Time ");  
                lcdPrintf(display,"  2.LED RGB ");  
            }  
            else  
            {  
                lcdPrintf(display,"  1.System Time ");  
                lcdPrintf(display,">>2.LED RGB ");  
            }  
            break;  
        case 1:  
            time(&timep);  
            ptm=localtime(&timep);  
            lcdPrintf(display,"   %04d/%02d/%02d   ",1900+ptm->tm_year, 1+ptm->tm_mon, ptm->tm_mday);  
            lcdPrintf(display,"    %02d:%02d:%02d    ",ptm->tm_hour, ptm->tm_min, ptm->tm_sec);  
            break;  
        case 2:  
            lcdPrintf(display," **LED RGB**");  
            lcdPrintf(display,"     Color: %d   ",color);  
            digitalWrite ( 113, color&0x01);  
            digitalWrite ( 114, color&0x02);  
            digitalWrite ( 115, color&0x04);  
            color=(color+1)%8;  
            delay(400);  
            break;  
        case 3:  
              lcdPrintf(display,"RGB&1602 Module ");    
              lcdPrintf(display,"for BPI-M3 ");  
            break;  
    }  
    delay(100);  
}  
void key(void)  
{  
    int i;  
    while(1)  
    {  
        for(i=108;i<113;i++)  
        {  
            if (digitalRead(i)>0)  
            {  
                switch(i)  
                {  
                    case 108:  
                        page=0;  
                        break;  
                    case 109:  
                        select=select%2+1;  
                        break;  
                    case 110:  
                        page=3;  
                        break;  
                    case 111:  
                        page=select;  
                        break;  
                    case 112:  
                        select=select%2+1;  
                        break;  
                }  
                delay(400);  
            }  
        }  
        delay(100);  
    }  
}  
int main()  
{  
    wiringPiSetup();  
    mcp23017Setup (100, 0x20);  
    pthread_create(&id,NULL,(void *)key,NULL);  
    digitalWrite(107,1);  
    digitalWrite(101,0);  
    display=lcdInit(2,16,4,100,102,103,104,105,106,0,0,0,0);  
    lcdHome(display);
      for(int i=0;i<16;i++)                                                      
          pinMode(100+i,OUTPUT);  
    while(1)   
        show();  
}

more information:

https://bananapi.gitbooks.io/bpi-accessories/content/lcd1602displaymodule.html

I have just bought the RGB&1602 module and tested the above c program on my BPI-M3 running on Ubuntu 16.04. It does not work, the LCD kept showing garbages and the RGB light keep changing colors. Is there any wrong there ?