Arduino- 机械手臂篇-实现OLED液晶显示

目 录

第 1 课 认识机械臂结构…2
第 2 课 舵机的结构和原理…4
第 3 课 总线舵机的介绍…7
第 4 课 总线舵机的调试…8
第 5 课 总线舵机控制器…15
第 6 课 Arduino 拓展板…18
第 7 课 动作调试上位机软件…21
第 8 课 机械臂的组装…30
第 9 课 控制系统的安装…42
第 10 课 蓝牙驱动软件的安装和使用… 45
第 11 课 机械臂动作组及手柄控制指令的配置… 46
第 12 课 机械臂的操作…49
第 13 课 常用指令详解…53
第 14 课 机械臂手动回读编程…56
第 15 课 机械臂手动按钮编程…59
高级篇
第 1 课 认识 Arduino…62
第 2 课 单个舵机的控制…66
第 3 课 多个舵机的控制…68
第 4 课 机械臂手指触摸传感器的应用… 70
第 5 课 机械臂震动传感器的应用… 73
第 6 课 机械臂光敏传感器的应用… 76
第 7 课 机械臂声音传感器的应用… 80
第 8 课 机械臂热敏传感器的应用… 84
第 9 课 机械臂红外传感器的应用… 87
第 10 课 机械臂三轴加速度传感器的应用… 91
第 11 课 Arduino 实现 OLED 液晶显示…95
第 12 课 温湿度传感器的应用… 103
第 13 课 超声波传感器的应用… 109
第 14 课 APDS9960 传感器的应用——颜色… 113
第 15 课 APDS9960 传感器的应用——手势… 117
项目篇
项目 1 机械臂定距夹取实验…122
项目 2 机械臂定位夹取实验…133
项目 3 机械臂手势夹取实验…138
项目 4 机械臂颜色识别夹取实验… 142

机械手臂全套教学:百度云盘密码:加微信Zero903828673

OLED 液晶在显示设备中得以青睐,具有低功耗,显示方便清晰等特色。另外 Arduino 中也有其对应的库文件,所以为开发者提供了一个很好的平台。

工 具:
I2C通信OLED屏 x1
arduino nano x1
中文字取模软件(zimo221.exe) x1
取模软件: 1、打开字模提取软件,输入要显示的汉字,按 Cral+Enter 键确定;
2、点开【点阵生成区】,点击左列取模方式【C51 格式】,即可生成。
在这里插入图片描述

实例代码: 实现轻触按钮,OLED 屏幕显示计数功能。

/******************************************************************************
*程序功能:显示汉字和英文及符号
******************************************************************************/
#include <Wire.h> //I2C 头文件
#include <Adafruit_GFX.h> //OLED 液晶头文件
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4

boolean buttonUp = true;//flag旗标-之前被按下过为true,按钮又弹起来
int count;   //计 数

Adafruit_SSD1306 display(OLED_RESET);
void display_println(); //显示函数
/******************************************************************************
中文字符
******************************************************************************/
/*--  文字:  一  --*/
static const unsigned char PROGMEM str_1[] =  { 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x06,0xE7,0x06,0xEE,0xEE,0xEE,
0x6E,0xFC,0x7E,0xFC,0x3C,0xEE,0x1C,0xE7,0x3C,0xE7,0x3E,0xE3,0x77,0xE7,0xE7,0xFE,
0xC0,0xE0,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00

}; 
/*--  文字:  二  --*/
static const unsigned char PROGMEM str_2[] =  { 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x30,0x70,0x70,0x7F,0xFE,0x0E,0xF6,
0xCE,0xDE,0xEE,0xCE,0x7E,0xFE,0x0E,0xC0,0x7E,0xFF,0x7F,0x87,0x7D,0xFF,0xE0,0x07,
0xE0,0x07,0xE0,0x7E,0x00,0x00,0x00,0x00,0x00,0x00
}; 

/*--  文字:  三  --*/
static const unsigned char PROGMEM str_3[] =  {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0xFF,0xFF,0x01,0x80,
0x01,0x80,0x01,0x80,0x7F,0xFE,0x00,0x00,0x00,0x00,0x3F,0xFC,0x30,0x0C,0x30,0x0C,
0x30,0x0C,0x3F,0xFC,0x30,0x0C,0x00,0x00,0x00,0x00
}; 
/*--  文字:  创  --*/
static const unsigned char PROGMEM str_4[] =  {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x07,0x1F,0xB7,0x3B,0xF7,
0xE0,0xF7,0xFF,0xB7,0x71,0xB7,0x73,0xB7,0x73,0xB7,0x73,0xB7,0x7F,0x37,0x71,0xC7,
0x71,0xC6,0x3F,0xBE,0x00,0x00,0x00,0x00,0x00,0x00

}; 
/*--  文字:  发  --*/
static const unsigned char PROGMEM str_5[] =  {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x30,0x77,0x7C,0x67,0x1C,0xFF,0xFF,
0x0E,0x00,0x0E,0x00,0x0F,0xFE,0x1E,0x0C,0x1F,0x1C,0x3B,0xB8,0x39,0xB8,0x70,0xF0,
0xE3,0xF0,0xCF,0x3C,0x3C,0x07,0x00,0x00,0x00,0x00

}; 
/*--  文字:  学  --*/
static const unsigned char PROGMEM str_6[] =  {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x0C,0x3B,
0x9C,0x19,0xF8,0xFF,0xFF,0xE0,0x07,0xE0,0x07,0x3F,0xF8,
0x00,0xF0,0x01,0xC0,0xFF,0xFF,0x01,0xC0,0x01,0xC0,0x01,
0xC0,0x0F,0x80
}; 
/*--  文字:  习
static const unsigned char PROGMEM str_7[] =  {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xFC,0x70,0xFF,0xFF,0xFF,0x07,
0xF8,0x00,0xFB,0xFE,0xF8,0x00,0xF8,0x00,0xFF,0xFF,0xFD,0xF8,0xFD,0xF8,0xFD,0xFB,
0xFB,0xBB,0xE7,0x3B,0xEE,0x3F,0x00,0x00,0x00,0x00
};  --*/

/*-- 文字: 计 --*/
static const unsigned char PROGMEM str_7[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x70,0xF0,0x70,0x70,0x70,0x38,0x70,
0x00,0x70,0xFF,0xFF,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x36,0x70,
0x3E,0x70,0x3C,0x70,0x70,0x70,0x00,0x00,0x00,0x00
};

/*-- 文字:  --*/
static const unsigned char PROGMEM str_8[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/*-- 文字: 数 --*/
static const unsigned char PROGMEM str_9[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x30,0xFF,0xF0,0x7F,0x70,0x1C,0x7F,
0xFF,0xE6,0x3E,0xE6,0x7F,0xEE,0xDF,0xFE,0x38,0x7E,0xFF,0xBC,0x73,0x3C,0xF7,0x3C,
0x1E,0x7E,0x7F,0xEF,0xE1,0xC3,0x00,0x00,0x00,0x00
};


/******************************************************************************
液晶初始化
******************************************************************************/
void OLED_init(void){
  //液晶 128*64 I2C 初始化地址 0X3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay(); //清屏
}
/*****************************************************************************
初始化 setup()函数
*****************************************************************************/
void setup() {
  OLED_init(); //液晶初始化
  

  pinMode(7,INPUT);
  digitalWrite(7,HIGH);//初始化为HIGH,上拉电阻为“1”
  count = 0;
}
/******************************************************************************
主循环 loop()函数
******************************************************************************/
void loop() {

  display_println(); //调用屏幕显示字符子函数


  if(digitalRead(7) == LOW && buttonUp == true)//按钮按下的一瞬间
    //digitalRead(7)!= HIGH && buttonUp ==true
  {
    count++;
  Serial.println(digitalRead(7));
  Serial.println(count);
  //===========//
  display.clearDisplay(); //清屏
  display.println(count);//输出字符并换行
  //===========//
  digitalWrite(13,!digitalRead(13));//测试点亮LED灯
  buttonUp = false;
  }
  
  else if(digitalRead(7)== HIGH && buttonUp == false)//按钮没有按下
    //digitalRead(7)== HIGH && buttonUp !=true
  {
     //Serial.println(digitalRead(7));
    buttonUp = true;
  }
  
  delay(100);
}
/******************************************************************************
显示函数
******************************************************************************/
void display_println(){
//中文字符显示 :某某某
//在坐标 X:18 Y:0 的位置显示中文字符杭
//第一个 16 为软件取模的高度//第二个 16 为软件取模的宽度
display.drawBitmap(18, 0, str_1, 16, 16, 1);
display.drawBitmap(34, 0, str_2, 16, 16, 1);
display.drawBitmap(50, 0, str_3, 16, 16, 1);
display.drawBitmap(66, 0, str_4, 16, 16, 1);
display.drawBitmap(82, 0, str_5, 16, 16, 1);
//display.drawBitmap(98, 0, str_6, 16, 16, 1);
display.drawBitmap(0, 24, str_7, 16, 16, 1);
display.drawBitmap(16, 24, str_8, 16, 16, 1);
display.drawBitmap(32, 24, str_9, 16, 16, 1);

//中文字符显示 :液晶显示程序测试


/*//英文字符显示 Length:
display.setTextSize(1); //设置字体大小
display.setTextColor(WHITE); //设置字体颜色白色
display.setCursor(5,48); //设置字体的起始位置
display.println("It's a test for oled");//输出字符并换行
display.display(); //显示所有缓存的
*/
  display.setTextSize(5); //设置字体大小
  display.setTextColor(WHITE); //设置字体颜色白色
  display.setCursor(66,24); //设置字体的起始位置
  
  display.display(); //显示所有缓存的
  
}

猜你喜欢

转载自blog.csdn.net/Naiva/article/details/89329092