开发日志 170424

今天把船拿到启真湖跑了跑测试,下午回来分析数据。本打算把数据在本地分析的,但无意中发现phpMyAdmin居然集成了GIS系统,MySQL本身也可以处理地理数据,那不妨就试一试。

使用INSERT INTO Table VALUES (PointFromText('Point(latitude longtitued)'));可以插入坐标点,坐标点查询时会以二进制数据的形式显示,需要用AsText()函数转换回人类友好的文本格式。哦,对了,别忘了把表的存储引擎改为MyISAM。

继续阅读“开发日志 170424”

开发日志 170421

昨天3D打印了一个安放电路板的结构件,然后发现没有树莓派用的M2.5的螺丝,赶紧网上下单然后开始码别的。

想了一下,人家MPU9250明明是有GPIO中断输出的,干啥要用延迟呢,改个中断吧,于是今天基本就折腾了一天中断。

其实中断也不是很难,用wiringPi这个库就可以了,或者BCM的那套也行。不过用了wiringPi之后执行需要root权限,让我不太高兴。Linux不是一切皆文件吗?Linux不是有GPIO子系统吗?借助这个子系统不就好了?

别说,还真有,用/sys/class/gpio/这个目录就可以了。这个要求编译内核时开启Device Drivers -> GPIO Support -> /sys/class/gpio/… (sysfs interface) 这个选项,树莓派官方镜像的内核已经开启了。

然后echo 端口号(BCM) > /sys/class/gpio/export来将这个接口从内核中暴露出来,接下来就可以通过/sys/class/gpio/gpio*/下的direction value edge这几个文件来进行输入输出和中断触发边沿选择了。

最后怎么用作中断呢?select/poll/epoll都可以了,它们会挂起线程知道文件内容改变。

另外这是我的参考文章:http://blog.sina.com.cn/s/blog_7880d3350102w2um.html

另外MPU9250还总是有零漂,我前几周调好了,今天上电一看飘了0.4dps,纠正过来后一看又漂了0.1dps,根本不知道该怎么处理。这倒还好,大不了系统启动时纠偏,但它要是走着走着飘起来了该咋办?

继续阅读“开发日志 170421”

开发日志 170415

今天处理了一下配置文件的问题,毕竟不能啥都往程序里写对吧……其实我以前一直是记好了第几行是啥,然后直接读进来。不过这样显然不太优雅,所以要用点啥格式。本来是想用GKeyFile来处理的,然后它要include一个glib.h的头文件,大蜥蜴里面这个文件有点问题,路径各种不对。JSON吧,按说不错,但是手写的话格式不是那么友好,XML就更别提了。加上之前被安利过一波YAML,就决定用它了。

YAML,说来也简单,直接安装yaml-cpp-devel就可以了,封装的很好,很方便。没用什么高级的配置,看着代码自己悟吧(滑稽

嗯……话说昨天不小心暴露了我的数据库密码,应该没关系吧?

继续阅读“开发日志 170415”

考研回顾

这篇文章,其实写的有点晚,主要是一直也懒,就拖到现在了。

我觉得,首先要感谢我的三个室友。本来我们寝室是晚睡晚起的那种,然后每天七点半闹钟响,十一点半要熄灯睡觉啥的,也是不容易。

然后还有翔哥、小机智、WHT和JPY同学,以及码龙和小郭,经常去找他们问问题。哦,对了,还有展展和田神,大作业和毕设啥的帮着顶了一堆锅……临去考试小凤还借了电动车,直接给+1s。

总的来说,一份付出一份收获,单纯指望RP大爆发啥的,基本不靠谱。当然调节RP的小技巧应该是有用的,大概……

反正也没人看,我就随便写吧……

继续阅读“考研回顾”

开发日志 170411

之前一周一直在弄I2C和UART,感觉也没做太多的东西,就没单独写,今天算是一起记了。另外今天“海试”,遥控方面没啥大毛病,船也不漏水。不过就是一次下水被水草缠住了;清理了水草第二次下水,L298N驱动芯片过热保护了,船途中失控,差点被水浇了,也挺惊险的。

看到左侧那个喷水的玩意了吗?失控后,不偏不倚就从那个水柱下面钻过去了。三个人差点吓尿了,也没想起来拍照片,可惜了xD

简单来说,树莓派的I2C和UART要用raspi-config打开,或者直接编辑/boot/config.txt也可以,然后就可以用了。然后在程序中作为文件打开,使用ioctl设定了模式,就可以简单的用read(), write()这两个函数读写了。

哦,对了,还修复了一个安卓遥控器在热点模式下不能遥控船的bug。热点模式下,受限广播似乎不会发到热点下面那个子网,而是会发到4G那边,组播224.0.0.1似乎也是。因此需要用Multicast::setNetworkInterface指定要用的网络接口,然后向224.0.0.1发送组播。

继续阅读“开发日志 170411”