ZYB ARTICLES REPOS

Arduino操作外设示例程序

SG90舵机

转动角度不正确

如果遇到转动角度不对,一般是高电平部分时长不对。

对于SG90来说,高电平时长对应的转动角度关系如下:

时长(ms) 转动角度
500 0
1000 45
1500 90
2000 135
2500 180

平常写的控制代码如下

#include 

Servo s;

void setup() {
  s.attach(9);
}

void loop() {
  s.write(0);
  delay(2000);
  s.write(180);
  delay(2000);
}

而Arduino的Servo库的attach函数有两个定义

如果使用servo.attach(pin),其minmax对应的值分别是5442400,所以与SG90舵机不匹配。因此只需要将上述代码中的s.attach(9);改成s.attach(9, 500, 2500);即可。

舵机抖动

在控制舵机的时候转到一些角度,舵机会明显的抖动,这一般有两个原因。

第一个原因,是供电不足,不能用Arduino UNO开发板来给舵机供电,应该用额外的电源供电。用非板载电源供电的时候要共地。

第二个原因,是买到垃圾的舵机。目前遇到的TOWER PRO的就是垃圾,TIANKONGRC的相对好一点。

U8g2驱动SSD1306 OLED屏幕

#include 
#include 
#include 

U8G2_SSD1306_128X64_NONAME_1_HW_I2C  u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA);

void setup(void) {
  u8g2.begin();
  u8g2.enableUTF8Print();
}

void loop(void) {
  u8g2.setFont(u8g2_font_unifont_t_chinese2);
  u8g2.setFontDirection(0);
  u8g2.firstPage();
  do {
    u8g2.setCursor(0, 15);
    u8g2.print("Hello World!");
    u8g2.setCursor(0, 30);
    u8g2.print("你好世界");
  } while ( u8g2.nextPage() );
  delay(1000);
}

如果出现显示字符在纵向(y轴)太长,也就是每个点之间都有间隔,原因是把屏幕的参数搞错了,把128x64写成128x32了。

U8G2_SSD1306_128X64_NONAME_1_HW_I2C  u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA);

改成如下即可

U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA);