add drawText

This commit is contained in:
MikuQ.com 2016-07-02 11:52:59 +08:00
parent 37163f6339
commit fde95b88a8
9 changed files with 161 additions and 5 deletions

View File

@ -1,4 +1,4 @@
#include<string.h>
#include <string.h>
#include "MikuDuino.h"
#include "Wire.h"
@ -103,7 +103,6 @@ Wire.begin();
Wire.beginTransmission(0x3c);
Wire.write(initcode,29);
Wire.endTransmission();
}
@ -141,6 +140,8 @@ void Miku_Oled::shift()
void Miku_Oled::clearDisplay(void)
{
memset(buffer, 0, 1024);
xpos=0;
ypos=0;
}
void Miku_Oled::showLogo(void)
@ -152,3 +153,90 @@ void Miku_Oled::showBMP(uint8 *bmp)
{
memcpy(buffer, bmp, 1024);
}
void Miku_Oled::setPos(uint8 x,uint8 y)
{
if ((x>128)||(y>64))
return;
xpos=x;
ypos=y;
}
void Miku_Oled::drawPoint(uint8 x,uint8 y,uint8 c)
{
if ((x>128)||(y>64))
return;
int p=y/8;
p=p*128+x;
int m=y%8;
if (c==0)
buffer[p]&=~(uint8)(1<<m);
else
buffer[p]|=(uint8)(1<<m);
}
void Miku_Oled::drawText(const char* txt)
{
FILE *fphzk;
fphzk=fopen("/usr/share/fonts/mikupi.font","rb");
int i,r,rr;
uint8 out[32];
for(i=0;i<strlen(txt);i++)
{
uint8 x=*(txt+i);
if (x<161)
{
if (x==10)
{
xpos=0;
ypos+=16;
continue;
}
if (x==13)
{
xpos=0;
continue;
}
if (xpos+8>128)
{
xpos=0;
ypos+=16;
}
fseek(fphzk, x*16, SEEK_SET);
r=fread(out,1,16,fphzk);
for(r=0;r<16;r++)
{
uint8 xxx=*(out+r);
for(rr=0;rr<8;rr++)
drawPoint(xpos+rr,ypos+r,xxx&(1<<(7-rr)));
}
xpos+=8;
continue;
}
if (xpos+16>128)
{
xpos=0;
ypos+=16;
}
long p=(((*(txt+i))-161)*94+(*(txt+i+1))-161)*32+4096;
i++;
fseek(fphzk, p, SEEK_SET);
r=fread(out,1,32,fphzk);
for(r=0;r<16;r++)
{
uint8 xxx=*(out+r*2);
for(rr=0;rr<8;rr++)
drawPoint(xpos+rr,ypos+r,xxx&(1<<(7-rr)));
xxx=*(out+r*2+1);
for(rr=0;rr<8;rr++)
drawPoint(xpos+8+rr,ypos+r,xxx&(1<<(7-rr)));
}
xpos+=16;
}
fclose(fphzk);
}

View File

@ -74,10 +74,14 @@ class Miku_Oled {
void showLogo(void);
void clearDisplay(void);
void showBMP(uint8*);
void setPos(uint8,uint8);
void drawPoint(uint8,uint8,uint8);
void drawText(const char*);
private:
void oled_sendCommand(int);
static uint8 buf[];
uint8 *buffer;
uint8 xpos,ypos;
};

View File

@ -21,6 +21,8 @@
char *i2cDevice;
int hasRoot = TRUE;
const char *i2cDevices[3] =
{
"/dev/i2c-0",
@ -217,8 +219,10 @@ void mikuPiSetup (void)
unsigned int addr_start, addr_offset;
unsigned int PageSize, PageMask;
if (geteuid () != 0)
piBoardRevOops("MikuPiSetup: Must be root. (Did you forget sudo?)");
if (geteuid () != 0) {
hasRoot = FALSE;
//piBoardRevOops("MikuPiSetup: Must be root. (Did you forget sudo?)");
}
int model, mem;
piBoardId (&model, &mem);
@ -246,6 +250,8 @@ void mikuPiSetup (void)
i2cDevice=(char *)i2cDevices[2];
}
if (hasRoot)
{
fd = open("/dev/mem", O_RDWR);
PageSize = sysconf(_SC_PAGESIZE);
@ -266,10 +272,16 @@ void mikuPiSetup (void)
SUNXI_PIO_LM_BASE += addr_offset;
close(fd);
}
}
void pinMode(int pin, int mode)
{
if (!hasRoot)
{
printf ("Warning! If u want control GPIO. Must be root. (Did you forget sudo?)\n") ;
return;
}
pin=wPinToGpio[pin];
unsigned int val = mode;
unsigned int cfg;
@ -295,6 +307,11 @@ void pinMode(int pin, int mode)
void digitalWrite(int pin, int value)
{
if (!hasRoot)
{
printf ("Warning! If u want control GPIO. Must be root. (Did you forget sudo?)\n") ;
return;
}
pin=wPinToGpio[pin];
unsigned int val = value;
unsigned int bank = GPIO_BANK(pin);

View File

@ -30,7 +30,7 @@
extern char *i2cDevice;
extern const int bPinTowPin[41];
#define VERSION "0.25"
#define VERSION "0.30"
extern const char *piModelNames [7] ;

View File

@ -47,6 +47,7 @@ sudo ./blink
4.(2016-06-05) add Wire & SHT2x
5.(2016-06-24) add MikuOLED
6.(2016-06-25) modify Uncle Li's BadApple
7.(2016-07-02) add oled.drawText support ascii & gb2312
upload

BIN
examples/oled_text Executable file

Binary file not shown.

45
examples/oled_text.cpp Executable file
View File

@ -0,0 +1,45 @@
#include "MikuDuino.h"
#include "MikuOled.h"
/*
* oled_test.cpp:
*
* Welcome to MikuQ.com! MikuDuino for BananaPi
*
* modify MikuQ(i@mikuq.com) 2016-7-2
*
* https://github.com/bpiq/MikuPi
*
*/
Miku_Oled oled;
char buf[20];
int c=0;
void setup()
{
sayHello();
oled.begin();
oled.display();
delay(1000);
}
void loop()
{
oled.clearDisplay();
oled.drawText(">>MikuOLED¼ÆÊý<<");
sprintf(buf,"λÖãº%d",c+1);
oled.setPos(28,28);
oled.drawText(buf);
oled.drawPoint(c,60,1);
oled.drawPoint(c+2,60,1);
oled.drawPoint(c+1,61,1);
oled.drawPoint(c,62,1);
oled.drawPoint(c+2,62,1);
c++;
if (c>125)
c=0;
oled.display();
delay(10);
}

BIN
fonts/mikupi.font Executable file

Binary file not shown.

View File

@ -2,6 +2,7 @@ libMikuDuino.so : MikuPi.cpp MikuDuino.cpp MikuRelay.cpp MikuSHT2x.cpp Wire.cpp
@gcc $^ -fPIC -shared -o $@
@install $@ /usr/lib/
@install *.h /usr/include/
@install fonts/mikupi.font /usr/share/fonts
@rm -f *.so
@echo 'install OK!'
.PHONY : clean