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)
servo.attach(pin, min, max)
如果使用servo.attach(pin)
,其min
、max
对应的值分别是544
和2400
,所以与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);