本帖最后由 jxyzw 于 2016-11-11 14:18 编辑
我想自己设计一个电控滑轨的控制器,用的stepper库文件和L298N驱动四线两相步进电机,然后用一块12864显示屏显示状态,用的是U8glib作为显示屏的库,但是 我在写程序中发现 主要我在void loop() { } 中加入U8glib的显示格式
u8g.firstPage();
do
{
draw();
}
while( u8g.nextPage() );
我的步进电机转动就有明显的卡顿,非常不利于后续的滑轨的稳定性,求大神帮忙诊断程序,看看问题是出在那个地方。
另外,本人是文科出身,对于程序的逻辑性都很差,下面这段程序也是学了很长一段时间才会的,如果里面很多逻辑性的代码看不懂,还请认真研读,感谢大家!
附代码:
/*
此程序是用Arduino uno控制器, L298N步进电机驱动器控制步进电机的电控滑轨程序
程序:1.0 作者:有一个梦想的杨志文 修改日期:2016-11-09 IDE版本号:Arduono 1.7.11
需逐步实现的功能:
1、实时控制步进电机的速度
2、实时控制步进电机的转动方向
3、实时控制步进电机的启动暂停
4、实时LED显示电控滑轨状态
*/
#include <Stepper.h>
#include <U8glib.h>
U8GLIB_ST7920_128X64_4X u8g(4,3,2); //声明OLED显示屏接口SCLK = pin 4, SID = pin 3,CS = pin 2
const float stepsPerRevolution =12.5; //声明步进电机为1.8度两相四线电机,需要给200个脉冲才能转动一圈, 我细分为1/16
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); //定义L298N驱动器连接的针脚
int startstopPin =5; //定义开始/暂停按键
int directionPin =6; //定义方向按键
int analogPin = A0; //定义调速按键
boolean startstop =true; //定义开始/暂停按键初始值
boolean direction_i = false; //定义方向按键初始值
int sd; //定义转速值
char string[25]; //定义转换字符串
unsigned long m; //定义初始时间值
#include "utility\u8g.h"
/* 开机屏幕显示 汉字二进制取模 */
const uint8_t bitmap_0 [] U8G_PROGMEM ={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,
0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; //"一"
const uint8_t bitmap_1 [] U8G_PROGMEM ={
0x00,0x00,0x01,0x80,0x01,0x80,0x03,0xC0,0x06,0x60,0x0C,0x30,0x19,0x9C,0x71,0x86,
0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80 }; //"个"
const uint8_t bitmap_2 [] U8G_PROGMEM ={
0x00,0x00,0x08,0x10,0x08,0x10,0x7F,0xFE,0x18,0x38,0x1E,0x58,0x2B,0xD6,0x48,0x92,
0x03,0x00,0x07,0xF8,0x08,0x18,0x33,0x30,0x01,0xE0,0x01,0xC0,0x3F,0x00,0x20,0x00 }; //"梦"
const uint8_t bitmap_3 [] U8G_PROGMEM ={
0x00,0x00,0x08,0x00,0x08,0xFC,0x7E,0x84,0x18,0xFC,0x18,0x84,0x2E,0xFC,0x6A,0x84,
0x48,0x84,0x08,0xFC,0x00,0x80,0x14,0x8C,0x34,0x44,0x24,0x1A,0x67,0xF0,0x00,0x00 }; //"想"
const uint8_t bitmap_4 [] U8G_PROGMEM ={
0x00,0x00,0x0C,0xC0,0x08,0x80,0x19,0x80,0x11,0xFE,0x33,0x40,0x36,0x40,0x50,0x7C,
0x50,0x40,0x10,0x40,0x10,0x40,0x10,0x7E,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40 }; //"作"
const uint8_t bitmap_5 [] U8G_PROGMEM ={
0x00,0x00,0x00,0x00,0x0F,0xF0,0x08,0x10,0x08,0x10,0x08,0x10,0x0F,0xF0,0x00,0x00,
0x7E,0x7E,0x62,0x46,0x62,0x46,0x62,0x46,0x62,0x46,0x7E,0x7E,0x62,0x46,0x00,0x00 }; //"品"
const uint8_t bitmap_a1 [] U8G_PROGMEM ={ 0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x4A,0x26,0x1C,0x02,0x00 }; //"Q"
const uint8_t bitmap_a2 [] U8G_PROGMEM ={ 0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x4A,0x26,0x1C,0x02,0x00 }; //"Q"
const uint8_t bitmap_a3 [] U8G_PROGMEM ={ 0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00 }; //":"
const uint8_t bitmap_a4 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x42,0x02,0x1C,0x02,0x02,0x02,0x42,0x42,0x3C,0x00,0x00 }; //"3"
const uint8_t bitmap_a5 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3E,0x02,0x02,0x42,0x3C,0x00,0x00 }; //"9"
const uint8_t bitmap_a6 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x42,0x02,0x1C,0x02,0x02,0x02,0x42,0x42,0x3C,0x00,0x00 }; //"3"
const uint8_t bitmap_a7 [] U8G_PROGMEM ={ 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00 }; //"1"
const uint8_t bitmap_a8 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x40,0x40,0x7C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00 }; //"6"
const uint8_t bitmap_a9 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00 }; //"0"
const uint8_t bitmap_a10 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00 }; //"0"
const uint8_t bitmap_a11 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x42,0x42,0x42,0x3C,0x42,0x42,0x42,0x42,0x3C,0x00,0x00 }; //"8"
const uint8_t bitmap_a12 [] U8G_PROGMEM ={ 0x00,0x3C,0x42,0x42,0x02,0x1C,0x02,0x02,0x02,0x42,0x42,0x3C,0x00,0x00 }; //"3"
/* 内容屏幕显示工作状态 汉字二进制取模 */
const uint8_t bitmap_b1 [] U8G_PROGMEM ={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; //"一"0
const uint8_t bitmap_b2 [] U8G_PROGMEM ={ 0x00,0x00,0x03,0x00,0x04,0x80,0x08,0x40,0x12,0x20,0x22,0x18,0xC2,0x0C,0x02,0x00,
0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,}; //"个"1
const uint8_t bitmap_b3 [] U8G_PROGMEM ={ 0x00,0x00,0x10,0x20,0x7F,0xF8,0x18,0x60,0x74,0xB8,0x53,0x20,0x10,0x20,0x0F,0xF0,
0x10,0x18,0x78,0x10,0x06,0x20,0x01,0xC0,0x7E,0x00,0x00,0x00,}; //"梦"2
const uint8_t bitmap_b4 [] U8G_PROGMEM ={ 0x00,0x00,0x11,0xF8,0x7D,0x08,0x19,0xF8,0x19,0x08,0x35,0xF8,0x53,0x08,0x11,0xF8,
0x02,0x00,0x29,0x10,0x49,0x30,0x48,0x28,0x8F,0xE8,0x00,0x00,}; //"想"3
const uint8_t bitmap_b5 [] U8G_PROGMEM ={ 0x00,0x00,0x02,0x00,0x02,0x00,0x3F,0xF0,0x22,0x10,0x22,0x10,0x3F,0xF0,0x22,0x10,
0x22,0x10,0x1F,0xE8,0x02,0x08,0x02,0x08,0x01,0xF0,0x00,0x00,}; //"电"4
const uint8_t bitmap_b6 [] U8G_PROGMEM ={ 0x00,0x00,0x20,0x80,0x27,0xF8,0x74,0x08,0x25,0x28,0x22,0x10,0x34,0x08,0x38,0x10,
0x67,0xF8,0x20,0x80,0x20,0x80,0x20,0x80,0x6F,0xF8,0x00,0x00,}; //"控"5
const uint8_t bitmap_b7 [] U8G_PROGMEM ={ 0x00,0x00,0x43,0xF0,0x24,0x10,0x17,0x90,0x44,0x90,0x2B,0x68,0x2B,0xE8,0x14,0x18,
0x27,0xF0,0x24,0x10,0x27,0xF0,0x44,0x10,0x44,0xF0,0x00,0x00,}; //"滑"6
const uint8_t bitmap_b8 [] U8G_PROGMEM ={ 0x01,0x00,0x11,0x00,0x7D,0x00,0x23,0xE0,0x51,0x20,0x51,0x20,0x7D,0x20,0x11,0x20,
0x11,0x20,0x1D,0x20,0x71,0x28,0x12,0x28,0x12,0x38,0x00,0x00,}; //"轨"7
const uint8_t bitmap_b9 [] U8G_PROGMEM ={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; //"横杠"0
/* 内容屏幕显示工作状态 汉字二进制取模 */
const uint8_t bitmap_t1 [] U8G_PROGMEM ={ 0x00,0x00,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,
0x04,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00, }; //"工",
const uint8_t bitmap_t2 [] U8G_PROGMEM ={ 0x13,0x00,0x12,0x00,0x27,0xE0,0x25,0x00,0x69,0x00,0xE1,0xE0,0x21,0x00,0x21,0x00,
0x21,0xE0,0x21,0x00,0x21,0x00,0x00,0x00, }; //"作",
const uint8_t bitmap_t3 [] U8G_PROGMEM ={ 0x11,0x00,0x11,0x40,0x51,0x20,0x51,0x00,0x37,0xE0,0x11,0x00,0x31,0x80,0x52,0x80,
0x12,0x40,0x14,0x60,0x1C,0x20,0x00,0x00, }; //"状",
const uint8_t bitmap_t4 [] U8G_PROGMEM ={ 0x04,0x00,0x04,0x00,0x7F,0xE0,0x09,0x00,0x18,0x80,0x34,0x40,0x40,0x20,0x4A,0x40,
0x4A,0x20,0x48,0xA0,0x4F,0x80,0x00,0x00, }; //"态",
const uint8_t bitmap_t5 [] U8G_PROGMEM ={ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x20,0x00,0x00, }; //":",
const uint8_t bitmap_t6 [] U8G_PROGMEM ={ 0x02,0x00,0x02,0x00,0x3D,0xC0,0x20,0x40,0x3F,0xC0,0x20,0x00,0x20,0x00,0x3F,0xC0,
0x30,0x40,0x5F,0xC0,0x50,0x40,0x00,0x00,}; //"启"0
const uint8_t bitmap_t7 [] U8G_PROGMEM ={ 0x00,0x80,0x00,0x80,0x7C,0x80,0x03,0xE0,0x7C,0xA0,0x20,0xA0,0x29,0x20,0x25,0x20,
0x7D,0x20,0x02,0x20,0x06,0x60,0x00,0x00,}; //"动"1
const uint8_t bitmap_t8 [] U8G_PROGMEM ={ 0x10,0x00,0x7D,0xC0,0x21,0x00,0x7D,0xE0,0x0A,0x80,0x7E,0x80,0x00,0x00,0x3F,0xC0,
0x3F,0xC0,0x20,0x40,0x3F,0xC0,0x00,0x00,}; //"暂"2
const uint8_t bitmap_t9 [] U8G_PROGMEM ={ 0x31,0x00,0x2F,0xE0,0x20,0x00,0x67,0xC0,0x67,0xC0,0x20,0x00,0x2F,0xE0,0x27,0xC0,
0x21,0x00,0x21,0x00,0x23,0x00,0x00,0x00,}; //"停"3
/* 内容屏幕显示滑动方向 汉字二进制取模 */
const uint8_t bitmap_h1 [] U8G_PROGMEM ={ 0x07,0xC0,0x28,0x40,0x07,0x40,0x49,0x40,0x7F,0xE0,0x17,0xC0,0x24,0x40,0x27,0xC0,
0x47,0xC0,0x44,0x40,0x04,0xC0,0x00,0x00,}; //"滑"0
const uint8_t bitmap_h2 [] U8G_PROGMEM ={ 0x00,0x80,0x00,0x80,0x7C,0x80,0x03,0xE0,0x7C,0xA0,0x20,0xA0,0x29,0x20,0x25,0x20,
0x7D,0x20,0x02,0x20,0x06,0x60,0x00,0x00,}; //"动"1
const uint8_t bitmap_h3 [] U8G_PROGMEM ={ 0x04,0x00,0x06,0x00,0x00,0x00,0x3F,0xC0,0x08,0x00,0x0F,0xC0,0x08,0x40,0x10,0x40,
0x10,0x40,0x20,0x80,0x43,0x80,0x00,0x00,}; //"方"2
const uint8_t bitmap_h4 [] U8G_PROGMEM ={ 0x08,0x00,0x08,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x4F,0x20,0x49,0x20,0x49,0x20,
0x46,0x20,0x40,0x20,0x40,0x60,0x00,0x00,}; //"向"3
const uint8_t bitmap_h5 [] U8G_PROGMEM ={ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x20,0x00,0x00,}; //":"4
const uint8_t bitmap_h6 [] U8G_PROGMEM ={ 0x04,0x00,0x04,0x00,0x7F,0xE0,0x08,0x00,0x08,0x00,0x18,0x00,0x17,0xC0,0x30,0x40,
0xD0,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00,}; //"右"0
const uint8_t bitmap_h7 [] U8G_PROGMEM ={ 0x21,0x80,0x21,0x00,0x7F,0xE0,0x41,0x00,0x57,0xE0,0x7A,0x00,0x13,0xE0,0x18,0x40,
0xF2,0x80,0x11,0x00,0x10,0xC0,0x00,0x00,}; //"转"1
const uint8_t bitmap_h8 [] U8G_PROGMEM ={ 0x04,0x00,0x04,0x00,0x7F,0xE0,0x08,0x00,0x08,0x00,0x18,0x00,0x17,0x80,0x22,0x00,
0x62,0x00,0x42,0x00,0x3F,0xE0,0x00,0x00,}; //"左"0
const uint8_t bitmap_h9 [] U8G_PROGMEM ={ 0x21,0x80,0x21,0x00,0x7F,0xE0,0x41,0x00,0x57,0xE0,0x7A,0x00,0x13,0xE0,0x18,0x40,
0xF2,0x80,0x11,0x00,0x10,0xC0,0x00,0x00,}; //"转"3
/* 内容屏幕显示转动速度 汉字二进制取模 */
const uint8_t bitmap_l1 [] U8G_PROGMEM ={ 0x21,0x80,0x21,0x00,0x7F,0xE0,0x41,0x00,0x57,0xE0,0x7A,0x00,0x13,0xE0,0x18,0x40,
0xF2,0x80,0x11,0x00,0x10,0xC0,0x00,0x00, }; //"转",
const uint8_t bitmap_l2 [] U8G_PROGMEM ={ 0x00,0x80,0x00,0x80,0x7C,0x80,0x03,0xE0,0x7C,0xA0,0x20,0xA0,0x29,0x20,0x25,0x20,
0x7D,0x20,0x02,0x20,0x06,0x60,0x00,0x00,}; //"动"1
const uint8_t bitmap_l3 [] U8G_PROGMEM ={ 0x01,0x00,0x4F,0xE0,0x21,0x00,0x0F,0xE0,0x09,0x20,0x2F,0xE0,0x23,0x80,0x25,0x40,
0x29,0x20,0x31,0x00,0x4F,0xE0,0x00,0x00,}; //"速"2
const uint8_t bitmap_l4 [] U8G_PROGMEM ={ 0x02,0x00,0x02,0x20,0x3D,0xC0,0x24,0x80,0x3F,0xE0,0x24,0x80,0x43,0x00,0x5F,0x80,
0x44,0x80,0x43,0x00,0x7C,0xE0,0x00,0x00,}; //"度"3
const uint8_t bitmap_l5 [] U8G_PROGMEM ={ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x20,0x00,0x00,}; //":"4
/* 一个梦想的标志LOGO 汉字二进制取模 */
const uint8_t bitmap_m1 [] U8G_PROGMEM ={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,
0x06,0x70,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x3F,
0x80,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0xFE,0x40,0x00,0x00,0x01,0xFC,0xC0,
0x3C,0x00,0x03,0xF9,0xC0,0x3E,0x00,0x07,0xF3,0xC0,0x3F,0x00,0x0F,0xE7,0xC0,0x3F,
0x80,0x1F,0xC7,0xC0,0x1F,0xC0,0x3F,0x87,0xC0,0x0F,0xE0,0x7F,0x07,0xC0,0x27,0xF0,
0xFE,0x07,0xC0,0x33,0xFB,0xFC,0x07,0xC0,0x39,0xFF,0xF8,0x07,0xC0,0x3C,0xFF,0xF0,
0x07,0xC0,0x3E,0x7F,0xE0,0x07,0xC0,0x3E,0x3F,0xC0,0x07,0xC0,0x3E,0x1F,0x80,0x07,
0xC0,0x3E,0x0F,0x00,0x07,0xC0,0x3E,0x06,0x00,0x07,0xC0,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,}; //一个梦想LOGO标志
// 自定义步进电机调速按钮
void lev(){
int n=analogRead(analogPin); // 读取电位计值
int sd=map(n,0,1023,1,500); // 转变成步进电机的转速(经测速,步进电机在60转以上就会出现断续的丢步)
myStepper.setSpeed(sd); // 提取步进电机库函数类
delay(1); // 延迟1ms
itoa(sd,string,10); // 将整型变量转换成字符串,以便于后续在OLED屛上输出显示
}
void setup() {
Serial.begin(9600); // 声明串口
pinMode(startstopPin,INPUT); // 定义startstopPin为开始暂停的输入端
pinMode(directionPin,INPUT); // 定义directionPin为方向的输入端
}
// 自定义开机显示屛
void lcdlogo(void) {
u8g.firstPage();
do {
u8g.setColorIndex(1);
int a=16;
int b=12;
u8g.drawBitmapP ( 0*16+a , b , 2 , 16 , bitmap_0);
u8g.drawBitmapP ( 1*16+a , b , 2 , 16 , bitmap_1);
u8g.drawBitmapP ( 2*16+a , b , 2 , 16 , bitmap_2);
u8g.drawBitmapP ( 3*16+a , b , 2 , 16 , bitmap_3);
u8g.drawBitmapP ( 4*16+a , b , 2 , 16 , bitmap_4);
u8g.drawBitmapP ( 5*16+a , b , 2 , 16 , bitmap_5);
u8g.drawBitmapP ( 0*8+a , 25+b , 1 , 14 , bitmap_a1);
u8g.drawBitmapP ( 1*8+a , 25+b , 1 , 14 , bitmap_a2);
u8g.drawBitmapP ( 2*8+a , 25+b , 1 , 14 , bitmap_a3);
u8g.drawBitmapP ( 3*8+a , 25+b , 1 , 14 , bitmap_a4);
u8g.drawBitmapP ( 4*8+a , 25+b , 1 , 14 , bitmap_a5);
u8g.drawBitmapP ( 5*8+a , 25+b , 1 , 14 , bitmap_a6);
u8g.drawBitmapP ( 6*8+a , 25+b , 1 , 14 , bitmap_a7);
u8g.drawBitmapP ( 7*8+a , 25+b , 1 , 14 , bitmap_a8);
u8g.drawBitmapP ( 8*8+a , 25+b , 1 , 14 , bitmap_a9);
u8g.drawBitmapP ( 9*8+a , 25+b , 1 , 14 , bitmap_a10);
u8g.drawBitmapP ( 10*8+a , 25+b , 1 , 14 , bitmap_a11);
u8g.drawBitmapP ( 11*8+a , 25+b , 1 , 14 , bitmap_a12);
}
while( u8g.nextPage() );
}
//自定义显示控制内容和参数
void draw(void) {
int a=4;
int b=23;
//内容标题
u8g.setColorIndex(1);
u8g.drawBitmapP ( 0*14+9 , 1 , 2 , 14 , bitmap_b1);
u8g.drawBitmapP ( 1*14+9 , 1 , 2 , 14 , bitmap_b2);
u8g.drawBitmapP ( 2*14+9 , 1 , 2 , 14 , bitmap_b3);
u8g.drawBitmapP ( 3*14+9 , 1 , 2 , 14 , bitmap_b4);
u8g.drawBitmapP ( 4*14+9 , 1 , 2 , 14 , bitmap_b5);
u8g.drawBitmapP ( 5*14+9 , 1 , 2 , 14 , bitmap_b6);
u8g.drawBitmapP ( 6*14+9 , 1 , 2 , 14 , bitmap_b7);
u8g.drawBitmapP ( 7*14+9 , 1 , 2 , 14 , bitmap_b8);
for(int i=0;i<=8;i++)
{
u8g.drawBitmapP ( i*13+5 , 13 , 2 , 12 , bitmap_b9);
}
//工作状态:启动/暂停
u8g.setColorIndex(1);
u8g.drawBitmapP ( 0*12+a , b , 2 , 12 , bitmap_t1);
u8g.drawBitmapP ( 1*12+a , b , 2 , 12 , bitmap_t2);
u8g.drawBitmapP ( 2*12+a , b , 2 , 12 , bitmap_t3);
u8g.drawBitmapP ( 3*12+a , b , 2 , 12 , bitmap_t4);
u8g.drawBitmapP ( 4*12+a , b , 1 , 12 , bitmap_t5);
if(startstop == 1)
{
u8g.drawBitmapP ( 5*12+a-8 , b , 2 , 12 , bitmap_t6);
u8g.drawBitmapP ( 6*12+a-8 , b , 2 , 12 , bitmap_t7);
}
else
{
u8g.drawBitmapP ( 5*12+a-8 , b , 2 , 12 , bitmap_t8);
u8g.drawBitmapP ( 6*12+a-8 , b , 2 , 12 , bitmap_t9);
}
//滑动方向:左转/右转
u8g.drawBitmapP ( 0*12+a , b+14 , 2 , 12 , bitmap_h1);
u8g.drawBitmapP ( 1*12+a , b+14 , 2 , 12 , bitmap_h2);
u8g.drawBitmapP ( 2*12+a , b+14 , 2 , 12 , bitmap_h3);
u8g.drawBitmapP ( 3*12+a , b+14 , 2 , 12 , bitmap_h4);
u8g.drawBitmapP ( 4*12+a , b+14 , 1 , 12 , bitmap_h5);
if(direction_i == 1)
{
u8g.drawBitmapP ( 5*12+a-8 , b+14 , 2 , 12 , bitmap_h6);
u8g.drawBitmapP ( 6*12+a-8 , b+14 , 2 , 12 , bitmap_h7);
}
else
{
u8g.drawBitmapP ( 5*12+a-8 , b+14 , 2 , 12 , bitmap_h8);
u8g.drawBitmapP ( 6*12+a-8 , b+14 , 2 , 12 , bitmap_h9);
}
//转动速度:读取lev值
u8g.drawBitmapP ( 0*12+a , b+28 , 2 , 12 , bitmap_l1);
u8g.drawBitmapP ( 1*12+a , b+28 , 2 , 12 , bitmap_l2);
u8g.drawBitmapP ( 2*12+a , b+28 , 2 , 12 , bitmap_l3);
u8g.drawBitmapP ( 3*12+a , b+28 , 2 , 12 , bitmap_l4);
u8g.drawBitmapP ( 4*12+a , b+28 , 1 , 12 , bitmap_l5);
u8g.setFont(u8g_font_freedoomr10r); //设置在12864屏幕上显示的字体
u8g.setPrintPos(58,64); //设置转速在12864屏幕上显示的坐标值
u8g.print(string); //设置在12864屏幕上显示的开始/暂停状态;
// 显示一个梦想标志LOGO;
u8g.drawFrame(84,25,39,38);
u8g.drawBitmapP ( 84 , 25 , 5 , 38 , bitmap_m1);
}
void loop() {
// 屏幕显示电机相关性能参数
u8g.firstPage();
do
{
m=millis(); // 记录开机时间
if(m<=10000) // 判断开机时间如果大于10ms ,
lcdlogo(); // 就让其显示开机显示屛
else
draw(); // 否则就让其显示内容参数
}
while( u8g.nextPage() );
/* 开始/暂停按键消抖和更改状态 */
if(digitalRead(startstopPin) == LOW) //判断开始/暂停按键是否按下
{
delay(6); //延时10ms作为按键消抖处理
if(digitalRead(startstopPin) == LOW) //如果经过前期10ms的消抖处理,按键状态依然改变,就改变其状态
{
startstop =!startstop; //那么就让按键的初始值取反状态
while(1) //判断开始/暂停按键是否松开
{
if(digitalRead(startstopPin) == HIGH) // 直到下一次按下状态改变为止
{
delay(6);
if(digitalRead(startstopPin) == HIGH)
{
break;
}
}
}
}
}
/* 方向按键消抖和更改状态 */
if(digitalRead(directionPin) == LOW) // 判断方向按键是否按下
{
delay(10); // 延时10ms作为按键消抖处理
if(digitalRead(directionPin) == LOW) //如果经过前期10ms的消抖处理,按键状态依然改变,就改变其状态
{
direction_i =!direction_i; // 那么就让按键的初始值取反状态
while(1) // 判断方向按键是否松开
{
if(digitalRead(directionPin) == HIGH)
{
delay(10);
if(digitalRead(directionPin) == HIGH) // 直到下一次按下状态改变为止
{
break;
}
}
}
}
}
/* 判断按钮状态,驱动步进电机程序 */
if (startstop == false && direction_i == false ) //如果开始按键和方向按键没按,就让步进电机不动
{
myStepper.step(stepsPerRevolution);
lev();
}
else if(startstop == false && direction_i ==true ) //如果仅按下方向按键,就让方向改变成相反的方向转动
{
myStepper.step(-stepsPerRevolution);
lev();
}
else if(startstop == true && direction_i == false ) //如果仅按下开始/暂停按键,就让步进电机停止转动
{
myStepper.step( 0 );
lev();
}
else if(startstop == true && direction_i == true ) //如果仅按下开始/暂停按键,就让步进电机停止转动
{
myStepper.step( 0 );
lev();
}
}
|