如何主机向从机发送多字节的问题算是解决了,但是我想在从机中用这个数,但是出了问题。
主机
- #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[I2C_BUFFER_SIZE];
- 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[idx]);
- Serial.println("\n");
- dataPending = false;
- char c = 1000*i2cBuffer[0]+100*i2cBuffer[1]+10*i2cBuffer[2]+i2cBuffer[3];
- 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[i2cBufferCnt++] = Wire.read();
- }
- dataPending = true;
- }
复制代码
问题出现在这行,char c = 1000*i2cBuffer[0]+100*i2cBuffer[1]+10*i2cBuffer[2]+i2cBuffer[3];
Serial.println(c,DEC);
在主机串口输入4位数,如0546,从机串口上,接受并显示没有问题,但是从数组中提取,也就是这行,显示的C不是0546,是另外的一个数,输入其他的也是,C会变成另一个,求教这是哪里出错了? |