add drawText
This commit is contained in:
parent
37163f6339
commit
fde95b88a8
92
MikuOled.cpp
92
MikuOled.cpp
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
21
MikuPi.cpp
21
MikuPi.cpp
@ -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);
|
||||
|
||||
2
MikuPi.h
2
MikuPi.h
@ -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] ;
|
||||
|
||||
|
||||
@ -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
BIN
examples/oled_text
Executable file
Binary file not shown.
45
examples/oled_text.cpp
Executable file
45
examples/oled_text.cpp
Executable 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
BIN
fonts/mikupi.font
Executable file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user