怎么样才能转动步进机电机同时支持12864屏刷新,不会让电机转得太慢呢?
怎么样才能转动步进机电机同时支持12864屏刷新,不会让电机转得太慢呢?#include <U8glib.h> //声明库U8GLIB_ST7920_128X64_4X u8g(12, 11, 10);
#include <HX711.h>
HX711 hx(8, 9,128,0.002347);
#include <EEPROM.h>
#include <EasyStepper.h>
// define the pins
#define STEP_PIN 6
#define DIR_PIN 7
#define EN_PIN 13
// define the inverted
#define DIR_PIN_INVERTED true
#define EN_PIN_INVERTED true
// the EasyStepper instance
EasyStepper stepper1(STEP_PIN, DIR_PIN, EN_PIN, DIR_PIN_INVERTED, EN_PIN_INVERTED);
// the stepps to rotate
int stepps = 200;
int times = 0;
float x,y;
const uint8_t L[] PROGMEM = {
0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,
0xC0,0x00,0x00,0x06,0x00,0x60,0x70,0x00,
0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,
0xC0,0x00,0x04,0x07,0x00,0x70,0x38,0x00,
0x00,0x01,0xF0,0x00,0x07,0xFE,0x00,0x00,
0xC0,0x00,0x07,0x07,0x00,0x30,0x30,0x00,
0x00,0x01,0xE0,0x00,0xFF,0x0E,0x00,0x00,
0xDC,0x00,0x1F,0x06,0x00,0x30,0x30,0x00,
0x00,0x01,0x84,0x00,0xC3,0x0C,0x00,0x03,
0xFC,0x00,0x38,0x06,0x00,0x30,0x30,0x00,
0x00,0x41,0xFF,0x00,0x63,0x0C,0x00,0x1F,
0xC0,0x00,0xDC,0x76,0x00,0x30,0x37,0x00,
0x00,0xFF,0x87,0x00,0x67,0xD8,0x00,0x01,
0xC0,0x00,0x08,0x36,0x00,0x30,0x7E,0x00,
0x00,0xE0,0x26,0x00,0x6F,0x98,0x00,0x01,
0x70,0x00,0x0B,0x06,0x00,0x7D,0xF0,0x00,
0x00,0xC7,0xE0,0x00,0x23,0x18,0x00,0x03,
0x38,0x00,0x1F,0x66,0x03,0xF0,0x20,0x00,
0x01,0x8F,0x00,0x00,0x23,0x38,0x00,0x06,
0x1B,0xE3,0xF8,0x76,0x01,0x30,0x20,0x00,
0x00,0x13,0x38,0x00,0x37,0xF0,0x00,0x0D,
0xFF,0xF7,0x98,0x16,0x00,0x30,0x3C,0x00,
0x00,0x3B,0x98,0x00,0x3E,0x30,0x03,0xFF,
0xF0,0x00,0x3F,0x06,0xF0,0x38,0xFE,0x00,
0x00,0x76,0xC0,0x00,0x00,0x03,0x83,0xC0,
0x18,0x00,0x3A,0x1F,0xF0,0x33,0x8C,0x00,
0x00,0xCC,0x70,0x01,0x03,0x01,0xC0,0x01,
0x18,0x00,0x69,0xFE,0x00,0xF1,0x98,0x00,
0x00,0x0C,0xFC,0x01,0x23,0x80,0xE0,0x3F,
0xD8,0x00,0xD8,0x06,0x03,0xA0,0xD8,0x00,
0x00,0x1F,0xFF,0x83,0x21,0xC8,0x40,0x31,
0x98,0x01,0x98,0x06,0x0F,0x30,0x78,0x00,
0x00,0x38,0x37,0xF3,0x30,0x8C,0x00,0x11,
0x18,0x03,0x18,0x06,0x0E,0x30,0x70,0x00,
0x00,0xFF,0xB1,0xE7,0x10,0x06,0x00,0x1F,
0x98,0x04,0x18,0x06,0x00,0x30,0x78,0x00,
0x01,0x9C,0x30,0x06,0x1C,0x07,0x00,0x18,
0x18,0x00,0x18,0x06,0x00,0x30,0xFC,0x00,
0x07,0x1F,0xB0,0x02,0x0F,0x0F,0x80,0x10,
0x18,0x00,0x18,0x06,0x00,0x37,0x8F,0x80,
0x00,0x1F,0x30,0x00,0x07,0xFF,0x00,0x00,
0x18,0x00,0x18,0x06,0x00,0xE6,0x07,0xF0,
0x00,0x18,0xF0,0x00,0x00,0x00,0x00,0x00,
0x18,0x00,0x18,0x06,0x00,0x60,0x01,0xC0,
0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,
0xF8,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
0x00,0x18,0x70,0x00,0x00,0x00,0x00,0x00,
0x78,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
0x00,0x60,0x00,0x01,0x00,0x00,0x08,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,
0x00,0x90,0x00,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,
0x00,0x8B,0x39,0xCD,0x72,0x80,0x01,0x60,
0x08,0xBA,0x56,0x00,0xB7,0x2C,0xD7,0x80,
0x01,0xE4,0xC6,0x33,0x8D,0x40,0x08,0x90,
0x08,0xC6,0x49,0x00,0xC8,0x93,0x38,0x00,
0x00,0x84,0x7B,0xD1,0x8D,0x40,0x08,0x90,
0x09,0xC6,0x48,0x00,0x8B,0x93,0x17,0x00,
0x00,0x84,0x42,0x13,0x8D,0x40,0x08,0x90,
0x06,0xC6,0x48,0x00,0x8C,0x93,0x30,0x80,
0x00,0x84,0x39,0xCD,0x75,0x40,0x08,0x90,
0x00,0xB9,0xA8,0x00,0x8B,0x52,0xDF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,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,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,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,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,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,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,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,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,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,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x1D,0x00,0x00,0x10,0x00,0x00,0x3C,0x04,
0x00,0x10,0x00,0x70,0x00,0x08,0x20,0x20,
0x23,0x00,0x00,0x10,0x00,0x00,0x22,0x04,
0x00,0x10,0x00,0x88,0x00,0x08,0x20,0x20,
0x21,0x67,0x5B,0xF6,0x75,0x80,0x22,0x0F,
0xB9,0xD6,0x00,0x83,0x80,0x08,0x7D,0xA0,
0x1D,0x98,0xA4,0x59,0x8A,0x40,0x3D,0xF4,
0x46,0x39,0x00,0x84,0x40,0x08,0x22,0x60,
0x03,0x1F,0x24,0x91,0xF2,0x40,0x28,0x04,
0x7A,0x11,0x00,0x84,0x40,0xC8,0x22,0x20,
0x23,0x18,0x25,0x11,0x82,0x40,0x24,0x04,
0xC2,0x11,0x00,0x8C,0x58,0x88,0x26,0x6C,
0x1D,0x17,0x27,0xF1,0x72,0x40,0x22,0x03,
0x39,0xD1,0x00,0x73,0x99,0x0F,0x99,0xAC,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
int hx711()
{
double sum = 0; // 为了减小误差,一次取出10个值后求平均值。
for (int i = 0; i < 10; i++) // 循环的越多精度越高,当然耗费的时间也越多
sum +=hx.bias_read();// 累加
return sum/10; // 求平均值进行均差
}
void motor()
{
if (times < 10)
{
stepper1.run();
if (stepper1.isDone())
{
// go back
stepps *= -1;
stepper1.rotate(2000.0, stepps);
times++;
if(times==10)times=0;
}
}
}
void setup()
{
hx.set_offset(5350);
hx.tare();
u8g.firstPage();
do {
u8g.drawBitmapP( 0, 0, 16, 64, L);
u8g.setFont(u8g_font_7x14);//写文字
u8g.drawStr(5,49,"E-cig Test Ver1.0");
} while( u8g.nextPage() );
delay(5000);
stepper1.debugMode(false);
stepper1.startup();
stepper1.rotate(800.0, stepps);
}
void loop()
{
u8g.firstPage( );
int data=hx711();
motor();
//delay(100);
do //显示
{
u8g.setFont(u8g_font_5x7);//写文字
u8g.drawStr(2,6,"Arduino Oscilloscope V0.1");
u8g.setFont(u8g_font_5x7);//写文字
u8g.drawStr(5,64,"Shenzhen R-tech Co.,Ltd.");
u8g.setPrintPos(50, 50);
{
u8g.setFont(u8g_font_9x18);
u8g.print(data);
}
//u8g.drawLine(64,0,64,63);// 画坐标轴
// u8g.drawLine(0,32,128,32);
//for(x=0;x<128;x+=8) //画坐标轴刻度
//u8g.drawLine(x,31,x,33);
// for(x=0;x<64;x+=8)
// u8g.drawLine(63,x,65,x);
// u8g.drawFrame(19,6,90,52); //画边框
}
while( u8g.nextPage( ));
} 有人支招吗?》 发现电机转得特别慢如何解决呀? 你确定如果将下面的代码去掉之后电机转速会变快么?
do //显示
{
u8g.setFont(u8g_font_5x7);//写文字
u8g.drawStr(2,6,"Arduino Oscilloscope V0.1");
u8g.setFont(u8g_font_5x7);//写文字
u8g.drawStr(5,64,"Shenzhen R-tech Co.,Ltd.");
u8g.setPrintPos(50, 50);
{
u8g.setFont(u8g_font_9x18);
u8g.print(data);
}
//u8g.drawLine(64,0,64,63);// 画坐标轴
// u8g.drawLine(0,32,128,32);
//for(x=0;x<128;x+=8) //画坐标轴刻度
//u8g.drawLine(x,31,x,33);
// for(x=0;x<64;x+=8)
// u8g.drawLine(63,x,65,x);
// u8g.drawFrame(19,6,90,52); //画边框
}
while( u8g.nextPage( )); 能确定!我试过了 fairsky 发表于 2014-1-9 13:55 static/image/common/back.gif
能确定!我试过了
那我的建议就是继续在这段代码中一直删除东西试试
看看是因为某条语句耗时太长导致的。
当然有可能有2个结果:1.是某条语句导致的 2.放在一起整体导致的
先试试看吧 我现在希望能找到能够电机和显示同时执行互不干扰的方法就好了 因为我还有一个HX711称重传感器。执行一次要105ms{:soso_e101:} 要不你试试多线程库?我没用过,但是有可能解决你的问题 我试了那个PT库。我1.05版本表示执行不了~{:soso_e101:} fairsky 发表于 2014-1-9 14:35 static/image/common/back.gif
我试了那个PT库。我1.05版本表示执行不了~
呃 我觉得那你的目标应该就是修改库,让他能在你的板子上运行啊~
这应该是最简单的方法了,特别是你还有一个耗时100多ms的传感器 我是用定时器产生脉冲来控制步进电机驱动器,再由驱动器驱动步进电机的,屏幕当时用的IIC通讯的1602,没有发生什么延迟,至少感觉不到。所以不清楚对你有没有帮助 用iic总线通讯连上几块板子,每块完成一个或者两个工作也行吧 步进电机是需要独占定时器或者时钟频率的。。多轴步进电机联动一直是个科研难题,更别提步进电机+屏幕刷新了。。。。最简单的方法就是用总线连接两个小的arduino,一个用来控制步进电机,另一个用来绘图。再把这些连接到一个控制器(主机)上……然后让两个从机根据主机发送的数据各自运转 friskit 发表于 2014-1-11 10:59 static/image/common/back.gif
步进电机是需要独占定时器或者时钟频率的。。多轴步进电机联动一直是个科研难题,更别提步进电机+屏幕刷新了 ...
那三D打印机四轴是怎么弄的~~~
页:
[1]
2