极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13430|回复: 1

求助 - 使用U8glib驱动12864屛之后,我的步进电机转动卡顿,如何解决! ----附程序

[复制链接]
发表于 2016-11-11 14:16:34 | 显示全部楼层 |阅读模式
本帖最后由 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();
             }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-17 04:03 , Processed in 0.040902 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表