上一个代码问题解决了,现在提取数组中的数出了问题
如何主机向从机发送多字节的问题算是解决了,但是我想在从机中用这个数,但是出了问题。主机
#include <Wire.h>
#define SLAVE_ADDRESS 0x12
#define SERIAL_BAUD 9600
void setup()
{
Wire.begin();
Serial.begin(SERIAL_BAUD);
Serial.println("I2C Master.02 started");
Serial.println();
}
void loop()
{
if (Serial.available()) {
Wire.beginTransmission(SLAVE_ADDRESS);
while(Serial.available()) {
Wire.write(Serial.read());
delay(50);
}
Wire.endTransmission();
}
}
从机
#include <Wire.h>
#include <HX711.h>
#include <Stepper.h>
#define SLAVE_ADDRESS 0x12
#define SERIAL_BAUD 9600
#define STEPS 100// 这里设置步进电机旋转一圈是多少步
Stepper stepper(20, 10, 11);// attached to设置步进电机的步数和引脚
HX711 hx(6, 7, 128,0.00237642);
#define I2C_BUFFER_SIZE 32
uint8_t i2cBuffer;
uint8_t i2cBufferCnt = 0;
boolean dataPending = false;
void setup() {
Wire.begin(SLAVE_ADDRESS); // join I2C bus as a slave with address 1
Wire.onReceive(receiveEvent); // register event
Serial.begin(SERIAL_BAUD);
Serial.println("I2C Slave.03 started\n");
stepper.setSpeed(5000); // 设置电机每分钟的转速为5000步
hx.set_offset(390800);
}
void loop() {
if (dataPending) {
Serial.println("Receive Data:");
for (int idx = 0; idx < i2cBufferCnt; idx++) Serial.print((char) i2cBuffer);
Serial.println("\n");
dataPending = false;
char c = 1000*i2cBuffer+100*i2cBuffer+10*i2cBuffer+i2cBuffer;
Serial.println(c,DEC);
Serial.println("measure Data:");
int sum0 = 0;
int sum1 = 0;
for (int i = 0; i < 10; i++) {
sum0 += hx.read();
sum1 += hx.bias_read();
}
Serial.print(sum0/10);
Serial.print(" ");
Serial.println(sum1/10);
stepper.step(sum1/10-c);
Serial.println("\n");
}
}
void receiveEvent(int count) {
i2cBufferCnt = 0;
while(Wire.available()) {
i2cBuffer = Wire.read();
}
dataPending = true;
}
问题出现在这行,char c = 1000*i2cBuffer+100*i2cBuffer+10*i2cBuffer+i2cBuffer;
Serial.println(c,DEC);
在主机串口输入4位数,如0546,从机串口上,接受并显示没有问题,但是从数组中提取,也就是这行,显示的C不是0546,是另外的一个数,输入其他的也是,C会变成另一个,求教这是哪里出错了? 做个测试,如图 主机先输了1234结果c=-10974,故意调小点 主机0023,结果c=-12185 你看看多字符发过去的是什么类型的,有可能是按照ascii码发过去的,你检查一下 zjz5717 发表于 2016-5-9 18:33 static/image/common/back.gif
你看看多字符发过去的是什么类型的,有可能是按照ascii码发过去的,你检查一下
已经解决了是这个原因谢谢了
页:
[1]