
arduino通过I2C通信控制4路步进电机master.pdf
3页//输入格式采用 485 转串口通信,所以 a[0]代表串口地址, a[1]-a[4]代表四个电机的方向,a[5]-a[8]代表电机速度 #include "Wire.h" String data=""; long a[9]; //速度值 1250-500001, int数据类型不能满足实际需求 int j=0; int b=0; //b,c,d,e,f 分别提取速度值的各位数值 int c=0; int d=0; int e=0; int f=0; int mark; //判断串口发送指令标志 位 void setup() { Serial.begin(9600); Wire.begin(); for (int i=0;i 0) { data += char(Serial.read()); delay(2); //稳定时间 mark=1; for (int i=0;i<=8;i++) {a[i]=0;} } if(mark==1) { // Serial.println(data); for (int i=0;i c=(a[5]-b*100000)/10000; d=(a[5]-b*100000-c*10000)/1000; e=(a[5]-b*100000-c*10000-d*1000)/100; f=a[5]-b*100000-c*10000-d*1000-e*100; Wire.write(a[1]); Wire.write(b); Wire.write(c); Wire.write(d); Wire.write(e); Wire.write(f); delay(2); Wire.endTransmission(); // Serial.println(a[5]); // Serial.print("b: "); // Serial.println(b); // Serial.print("c: "); // Serial.println(c); // Serial.print("d: "); // Serial.println(d); // Serial.print("e: "); // Serial.println(e); // Serial.print("f: "); // Serial.println(f); Wire.beginTransmission(2); //传入电机 2的方向和速度信息 b=a[6]/100000; c=(a[6]-b*100000)/10000; d=(a[6]-b*100000-c*10000)/1000; e=(a[6]-b*100000-c*10000-d*1000)/100; f=a[6]-b*100000-c*10000-d*1000-e*100; Wire.write(a[2]); Wire.write(b); Wire.write(c); Wire.write(d); Wire.write(e); Wire.write(f); delay(2); Wire.endTransmission(); Wire.beginTransmission(3); //传入电机 3的方向和速度信息 b=a[7]/100000; c=(a[7]-b*100000)/10000; d=(a[7]-b*100000-c*10000)/1000; e=(a[7]-b*100000-c*10000-d*1000)/100; f=a[7]-b*100000-c*10000-d*1000-e*100; Wire.write(a[3]); Wire.write(b); Wire.write(c); Wire.write(d); Wire.write(e); Wire.write(f); delay(2); Wire.endTransmission(); Wire.beginTransmission(4); //传入电机 4的方向和速度信息 b=a[8]/100000; c=(a[8]-b*100000)/10000; d=(a[8]-b*100000-c*10000)/1000; e=(a[8]-b*100000-c*10000-d*1000)/100; f=a[8]-b*100000-c*10000-d*1000-e*100; Wire.write(a[4]); Wire.write(b); Wire.write(c); Wire.write(d); Wire.write(e); Wire.write(f); delay(2); Wire.endTransmission(); } mark=0; } } 。
