soolge 发表于 2016-5-8 20:25:45

上一个代码问题解决了,现在提取数组中的数出了问题

如何主机向从机发送多字节的问题算是解决了,但是我想在从机中用这个数,但是出了问题。
主机
#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会变成另一个,求教这是哪里出错了?

soolge 发表于 2016-5-8 21:44:29

做个测试,如图 主机先输了1234结果c=-10974,故意调小点 主机0023,结果c=-12185

zjz5717 发表于 2016-5-9 18:33:42

你看看多字符发过去的是什么类型的,有可能是按照ascii码发过去的,你检查一下

soolge 发表于 2016-5-9 21:00:19

zjz5717 发表于 2016-5-9 18:33 static/image/common/back.gif
你看看多字符发过去的是什么类型的,有可能是按照ascii码发过去的,你检查一下

已经解决了是这个原因谢谢了
页: [1]
查看完整版本: 上一个代码问题解决了,现在提取数组中的数出了问题