在电脑上显示Openmv查看图像信息特别麻烦,所以找了一块屏幕出来,准备用arduino接收openmv的数据,然后以坐标点的形式在LCD屏上显示出来。

工程及代码库:

  1. 将 Ucglib_Arduino-1.3.3 放 到 arduino 库 目 录 下 解 压
    在这里插入图片描述

  2. 打开 Ucglib_Arduino-1.3.3\examples\UcgLogo\UcgLogo.ino 文件
    将 Ucglib_ST7735_18x128x160_SWSPI ucg(/sclk=/ 13, /data=/ 11, /cd=/ 9 , /cs=/
    10, /reset=/ 8); 前 面 的 // 去 掉 ; 如 图 所 示
    在这里插入图片描述

  3. 编译下载程序
    看到效果:(后面代码加了背景和一条线。。。)在这里插入图片描述

  4. 接线说明:

  1. GND=GND
  2. VCC=5V
  3. SCL=13
  4. SDA=11
  5. CS=10
  6. DC=9
  7. RES=8
  8. BLK 默认可以不接 或者3.3V 接高电平有背光,低电平关灯(关屏)

代码是在淘宝和GitHub找了很久才找到的。

我的代码:


#include <SPI.h>
#include "Ucglib.h"

Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 9 , /*cs=*/ 10, /*reset=*/ 8);

void setup(void)
{
  delay(1000);
  //ucg.begin(UCG_FONT_MODE_TRANSPARENT); //字体模式透明
  ucg.begin(UCG_FONT_MODE_SOLID);     //立体字,有底字
  ucg.clearScreen();    //清除屏幕

 
  ucg.setColor(0, 120, 0, 0);
  ucg.setColor(2, 0, 120, 0);
  ucg.setColor(1, 120, 0, 120);
  ucg.setColor(3, 0, 120, 120);
  ucg.drawGradientBox(0, 0, ucg.getWidth(), ucg.getHeight());   //背景设置

  
}

void loop(void)
{
  ucg.setRotate90();    //旋转
  ucg.setFont(ucg_font_ncenR12_tr);   //字体
  ucg.setColor(255, 255, 0);        //颜色
  ucg.setColor(0, 255, 0);
  ucg.setColor(1, 255, 0,0);
  
  ucg.setPrintPos(0,24);    //设置显示的位置
  ucg.print("Hello World!");
  
  ucg.setColor(255, 0, 0); //红
  ucg.setPrintPos(36,48);
  ucg.print("adan666!");
  
  ucg.setColor(0, 255, 0); //绿
  ucg.setPrintPos(36,62);
  ucg.print("adan666!");  
  
  ucg.setColor(0, 0, 255); //蓝
  ucg.setPrintPos(36,86);
  ucg.print("six");
  
  ucg.setRotate90();    //旋转
  ucg.setColor(255, 255, 255); //白色
  ucg.setPrintPos(10,100);
  ucg.print("=。=");
  
  ucg.undoRotate();               //不旋转
  ucg.setColor(255, 255, 255); //白色
  ucg.setPrintPos(10,86);
  ucg.print("*+");

  for(int i=0;i<100;i++){
  ucg.drawPixel(i,20);    //画点
  delay(200);
  }                       //画线
  
  delay(500);  
}

官方字符处理代码:

#include <SPI.h>
#include "Ucglib.h" 
/*
  Hardware SPI Pins:
    Arduino Uno		sclk=13, data=11
    Arduino Due		sclk=76, data=75
    Arduino Mega	sclk=52, data=51
    
  >>> Please uncomment (and update) one of the following constructors. <<<  
*/

Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 9 , /*cs=*/ 10, /*reset=*/ 8);

/*
  Linear Congruential Generator (LCG) 线性同余发生器
  z = (a*z + c) % m;  
  m = 256 (8 Bit)
  
  for period:
  a-1: dividable by 2
  a-1: multiple of 4
  c: not dividable by 2
  
  c = 17
  a-1 = 64 --> a = 65
*/
uint8_t z = 127;	// start value
uint32_t lcg_rnd(void) //随机数
{
  z = (uint8_t)((uint16_t)65*(uint16_t)z + (uint16_t)17);
  return (uint32_t)z;
}


void setup(void)
{
  delay(1000);
  ucg.begin(UCG_FONT_MODE_TRANSPARENT);

  ucg.setColor(0, 120, 0, 0);
  ucg.setColor(2, 0, 120, 0);
  ucg.setColor(1, 120, 0, 120);
  ucg.setColor(3, 0, 120, 120);

  ucg.drawGradientBox(0, 0, ucg.getWidth(), ucg.getHeight());
}

void loop(void)
{
  // 获取0到255之间的随机值
  uint8_t rnd = lcg_rnd();
  ucg_int_t y = 0;
  ucg_int_t h = 14;


  //您不能用透明字体覆盖前面的数字
  y += h;
  ucg.setColor(0, 255, 255, 255);		// 使用白色作为字体的主要颜色
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setPrintPos(4,y);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.print("Does not work:");
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.setColor(0, 255, 255, 255);		// 使用白色作为字体的主要颜色
  ucg.setPrintPos(80,y);
  ucg.print(rnd);

//在实体模式下使用相同的透明字体效果更好,
//但仍然有一些像素没有被覆盖
  y += h;
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setPrintPos(4,y);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.print("Pixel errors:");
  ucg.setFontMode(UCG_FONT_MODE_SOLID);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.setColor(0, 255, 255, 255);		// use white as main color for the font
  ucg.setColor(1, 64, 64, 255);			// 使用蓝色作为背景为固体模式
  ucg.setPrintPos(80,y);
  ucg.print(rnd);

//在实体模式下使用“h”或“m”类型的字体几乎可以工作
//但是,如果数字从100改变到99,最后一个数字
//将不会被覆盖。
  y += h;
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setPrintPos(4,y);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.print("Value errors:");
  ucg.setFontMode(UCG_FONT_MODE_SOLID);
  ucg.setFont(ucg_font_helvB08_hr);
  ucg.setColor(0, 255, 255, 255);		// use white as main color for the font
  ucg.setColor(1, 64, 64, 255);			// use blue as background for SOLID mode
  ucg.setPrintPos(80,y);
  ucg.print(rnd);
  
//在实体模式下使用“h”或“m”类型的字体会很好,如果
//字符串后面有额外的间隔来覆盖之前的值。
//只要使用“h”字体,空格的数量是不固定的。
//这意味着,即使是两倍间距的my也不够。最好使用单行字体。

  y += h;
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setPrintPos(4,y);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.print("Almost ok:");
  ucg.setFontMode(UCG_FONT_MODE_SOLID);
  ucg.setFont(ucg_font_helvB08_hr);
  ucg.setColor(0, 255, 255, 255);		// use white as main color for the font
  ucg.setColor(1, 64, 64, 255);			// use blue as background for SOLID mode
  ucg.setPrintPos(80,y);
  ucg.print(rnd);
  ucg.print("  ");  // two extra spaces (not sufficient here)

//透明字体和模式可以使用,如果前面的内容
//被完全删除或覆盖
  y += h;
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setPrintPos(4,y);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.print("Manual erase:");  
  ucg.setColor(0, 255, 40, 80);
  ucg.setColor(1, 0, 255, 0);
  ucg.setColor(2, 255, 0, 0);
  ucg.setColor(3, 65, 255, 40);
  ucg.drawGradientBox(80-2, y-10, 22, 12);  // red to green bar will erase the previous value
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.setColor(0, 255, 255, 255);		// use white as main color for the font
  ucg.setPrintPos(80,y);
  ucg.print(rnd);

// is将使用纯字体和额外的空格来擦除前面的值
//使用等宽的8x8像素字体(这里:ucg_font_amstrad_cpc_8r)。
  y += h;
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setPrintPos(4,y);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.print("8x8 font:");
  ucg.setFontMode(UCG_FONT_MODE_SOLID);
  ucg.setFont(ucg_font_amstrad_cpc_8r);
  ucg.setColor(0, 255, 255, 255);		// use white as main color for the font
  ucg.setColor(1, 64, 64, 255);			// use blue as background for SOLID mode
  ucg.setPrintPos(80,y);
  ucg.print(rnd);
  ucg.print("  ");  // extra spaces

// is将使用纯字体和额外的空格来擦除前面的值
//任何等宽字体都可以使用(这里:ucg_font_7x13_mr)。
  y += h;
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setPrintPos(4,y);
  ucg.setFont(ucg_font_helvB08_tr);
  ucg.print("_mr font:");
  ucg.setFontMode(UCG_FONT_MODE_SOLID);
  ucg.setFont(ucg_font_7x13_mr);
  ucg.setColor(0, 255, 255, 255);		// use white as main color for the font
  ucg.setColor(1, 64, 64, 255);			// use blue as background for SOLID mode
  ucg.setPrintPos(80,y);
  ucg.print(rnd);
  ucg.print("  ");  // extra spaces


  delay(100);  
}
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐