hanchristmas 发表于 2012-12-5 22:42:31

wudan3551 发表于 2012-7-16 19:36 static/image/common/back.gif
为什么我编译的时候会报错,说:
error: 'class TwoWire' has no member named 'send'
C:\Users\Wu Dan\D ...

请问1.0以上版本具体如何改库?

hanchristmas 发表于 2012-12-7 18:42:18

楼主,我用0023版本测试你的程序,但是报错'HMC5883L does not name a type' ,请问如何修改?

zjhyhky 发表于 2013-1-22 22:46:18

1.0以上版本具体如何改库

没有人解答,我自己百度百度,终于解决了。方法如下:
打开库里的cpp文件,找到错误提示的行号所在,把 send 改为 write,把 receive 改为read,就好了。

供参考。

bijibenbenq 发表于 2013-1-28 10:56:10

谢谢:):):)

cosailer 发表于 2013-2-16 06:14:36

本帖最后由 cosailer 于 2013-2-16 06:53 编辑

wudan3551 发表于 2012-8-16 14:14 static/image/common/back.gif
我也是小车,具体怎么八字校正呢?给我讲一讲吧

最近实在太忙,就先单独把我的八字校准程序贴上来。
其实很简单,我没去管Z轴,如果想要更高的精度,需要加一个加速度传感器,我刚好没有。

我的整个校准分2个子函数:calibRead() 和 calibration()

参照官方HMC5883L的程序先把该定义的变量定义好。


HMC5883L digicomp;

float X_max = 0.0;//X轴最大读数
float X_min = 0.0;//X轴最小读数

float Y_max = 0.0;//Y轴最大读数
float Y_min = 0.0;//Y轴最小读数

float X_offset = 0.0;//X轴偏移
float Y_offset = 0.0;//Y轴偏移

void calibRead() //指南针读数
{
      MagnetometerScaled scaled2 = digicomp.ReadScaledAxis();
      
      if ((abs(scaled2.XAxis) < 500) && (abs(scaled2.YAxis) < 500) && (abs(scaled2.ZAxis) < 500)) //这行对于我很重要,能过滤掉很多干扰,增加校准的精度。
      {//下面几行就是读取到每个轴的最大值和最小值,然后算出相应的偏移量
            if(scaled2.XAxis > X_max) {X_max = scaled2.XAxis;}
            if(scaled2.YAxis > Y_max) {Y_max = scaled2.YAxis;}
            
            if(scaled2.XAxis < X_min) {X_min = scaled2.XAxis;}
            if(scaled2.YAxis < Y_min) {Y_min = scaled2.YAxis;}

            X_offset = (X_max + X_min) / 2.0;
            Y_offset = (Y_max + Y_min) / 2.0;
      }
}
   
void calibration()
{
      int i = 0;
      digitalWrite(motor1EnPin, 0);// 定义转弯方向,对于我的小车来说是左转,逆时针方向
      digitalWrite(motor2EnPin, 1);
            
      analogWrite(motor1, 80);// 启动马达开始转动
      analogWrite(motor2, 80);
      
      while(i < 1000)// 逆时针方向循环读取XY轴每个方向的值,然后算出相应的偏移量
      {calibRead();
            delay(10);
            i++;
      }
      
      i = 0;
      digitalWrite(motor1EnPin, 1);// 右转小车,顺时针方向
      digitalWrite(motor2EnPin, 0);
      
      while(i < 1000)// 再顺时针方向方向旋转测算偏移量
      {calibRead();
            delay(10);
            i++;
      }
      
      analogWrite(motor1, 0);// 停止小车,校准完成
      analogWrite(motor2, 0);
}

float readCompass()//得到偏移了就可以读数了
{
      MagnetometerScaled scaled = digicomp.ReadScaledAxis();
   
      float heading = atan2(scaled.YAxis - Y_offset, scaled.XAxis - X_offset);// 读数的时候直接减掉偏移量就可以了

      //float declinationAngle = 36.36/1000.0;[这几行是考虑磁偏角的,除非真的是想
      //heading = heading + declinationAngle;    找地理北极,不然对方向判断用处不大]

      if(heading < 0)heading += 2*PI;
      if(heading > 2*PI)heading -= 2*PI;
   
      float headingDegrees = heading * 180/M_PI;
   
      return headingDegrees;
}


严格来说这个传感器读出来的仅仅是三轴方向磁场强度而已,角度是算出来的。另外他对磁场感应很灵敏,周围有金属就会有干扰,拿块金属在他周围转转就能看到读数很大的变化,所以校准还是很有必要的。

手机的话因为画8字能很快测得XY的偏移,所以方法就叫8字校准。小车的话因为可以旋转,就没必要真的去走8字,直接转圈就可以了。这是我的理解。

nick_zm 发表于 2013-2-26 13:34:38

wudan3551 发表于 2012-7-16 19:36 static/image/common/back.gif
为什么我编译的时候会报错,说:
error: 'class TwoWire' has no member named 'send'
C:\Users\Wu Dan\D ...

将 该函数里的Wire.send 改为 Wire.write 就可以了,下面的错误同理

瘦网虫 发表于 2013-3-18 15:18:14

本帖最后由 瘦网虫 于 2013-3-18 15:23 编辑

arduino mega 2560接线不是a4,a5,是接20,21,上面标注了sda,scl。提个醒哈。

yangfanconan 发表于 2013-3-29 16:06:34

请问楼主,为什么在arduino1.52中使用您的库文件,会出现以下错误?

C:\Users\Yang\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp: In member function 'void HMC5883L::Write(int, int)':
C:\Users\Yang\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:110: error: 'class TwoWire' has no member named 'send'
C:\Users\Yang\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:111: error: 'class TwoWire' has no member named 'send'
C:\Users\Yang\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp: In member function 'uint8_t* HMC5883L::Read(int, int)':
C:\Users\Yang\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:118: error: 'class TwoWire' has no member named 'send'
C:\Users\Yang\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:129: error: 'class TwoWire' has no member named 'receive'

北斗 发表于 2013-5-5 20:20:35

yangfanconan 发表于 2013-3-29 16:06 static/image/common/back.gif
请问楼主,为什么在arduino1.52中使用您的库文件,会出现以下错误?

试试33楼的方法

dearxiner 发表于 2013-5-6 17:53:52

楼主,为什么我的角度一直不变化?一直是89.92,270.00,273.5;我用的是GY-86集成的HMC5883

枫叶 发表于 2013-5-12 21:11:24

编译后出现error: 'class TwoWire' has no member named 'receive'
请问什么情况呀

小人 发表于 2013-5-28 08:58:19

既然电子罗盘能测旋转,那陀螺仪有啥意义呢?

robotStudio 发表于 2013-6-8 17:44:47

有意思,回头买一块玩玩。。。

woolf24 发表于 2013-6-17 02:21:24

谢谢。宝贵的资料。

Dmonke 发表于 2013-7-15 10:26:37

zhangzhe0617 发表于 2012-9-20 10:08 static/image/common/back.gif
楼主,请问F:\arduino-1.0.1-windows\arduino-1.0.1\arduino-1.0.1\libraries\HMC5883L\HMC5883L.cpp: In m ...

可以到libraries下的HMC5883L.cpp文件中把wire.receive改成wire.read,把wire.send改成wire.write就可以了~
页: 1 2 [3] 4 5 6 7 8
查看完整版本: Arduino学习笔记A3 - Arduino连接HMC5883L三轴电子罗盘传感器