最近做一个项目需要用树莓派做主控,树莓派提供了两种开发语言,一种是Python ,另一种你猜是什么?呵呵 当然是 C 啦,由于之前都是用C开发,对C是那是爱不释手啊,呵呵。可是问题来了,我需要用树莓派通过spi与arduino通信,新手没做过,整么办呢?当然是万能的网络了,那就是个宝库啊!然而,当我在网上浪里淘沙般搜索需要的材料时,哎,简直就是凤毛麟角,做过相应的就是那么一两个。。。树莓派和arduino在中国不是很风靡了么??没办法,只能硬着头皮看国外论坛了(不怕笑话,我四级都考了三次才过,呜呜),虽然单词十之八九不相识,还好能理解,代码是我们的共同语言,O(∩_∩)O,问题接着又来找我拉,例程是有些,至少比过内的多,可是用的是Python 写,呜呜,之前都没听说过,其实他是很强大的脚本语言,怪我孤陋寡闻。好头痛啊,为了达到目标,呵呵只能硬着头皮上了,看了一天的基础语法配合一些例程,算是对基本语法格式熟悉了,与C最大的特别之处就是,他是通过缩进来表示不同的代码块,而C用的是{}。有很多体会,挑感触最深的说吧。。毕竟时间宝贵。
碰到最头疼的就是数据格式的处理了,这让我好几天没吃好饭!
好不容易通过arduino能向pi发数据了,看到接收到数据那一刻,我眼泪都镖出来了,哎问题总是如影随形,什么?一串数字,我发的不是字符么?第一反应是找百度了,呵呵,这是个不整么好的习惯,容易产生依赖心理,最好先自己想想,分析分析,即使分析不出原因,但你会越来越独立,哈哈,当然这会很痛苦,常言道:天将降大任余斯人也。。。。
原来并没有乱码,只是那是ASCII码,怪我与你不熟,没认出你来,给我的惩罚就是花了好多精力去查东东,什么波特率啊,时序啊,接收函数有没有逻辑问题。。。哎最后也不知道整的就脑子一闪,是不是ASCII,呜呜,一定的量才会导致质的变化,真是至理名言呀。
只要将ASCII转换为字符就行啦。就是这句data=chr(get_data),好神奇啊,困扰几天的问题就这样解决了。
还有一个更神奇的问题,就是pi是能接收arduino发过来的数据,而且能正确显示出来,我需要根据这个数据进行的相应的判断,就需要用到 if get_string == “ID1”,天哪,他就是不相等,我用
print get_string,结果就是”ID1”,呜呜,见鬼了么?Python 这么神奇,也不用这么怪吧!自己想呀想,实在是头疼啊。网上搜啊搜,没有遇到相同坑的兄弟啊,几天过去了,呜呜,难道就这样判了死刑了,这么神奇的问题实在是太蹊跷了,感觉无从下手啊。就在鬼使神差间,我将数据格式转啊转,字符串转换为列表再判断,不行。字符串转换为ASCII,不行。字符串转换为HEX,不行,不过在转换输出十六进制数据时,我瞧见了狐狸的尾巴,呵呵。就是我接收的是一个字符,转换为十六进制显示时前面就多出了”00“,这就隐藏在深处的鬼啊,查查他什么来历,ASCII表显示他的身份是空字符,呜呜,什么鬼?空字符?将数据字符形式显示时根本看不见他,十六进制才让他现出了真身。。当初我将他与字符串相比较,呵呵,他死活不认,看来是我不了解他。。。接收的字符串为什么会多出个空字符呢?哎不管了,可能是接收函数逻辑有问题吧。。吃到苦果子了。。解决问题最重要的就是要找到问题的原因,找到他的根本原因。当然这是最难的,其实解决问题要比发现问题的原因要难的多。。。问题找着了,解决就是分分钟的事,前面不是无缘无故多了个空字符么?其实天下没有无缘无故的事,只是你没有发现他出现的原因而已!解决方法就是将这个空字符去掉就ok了!没错,就是这样轻而易举的解决了。
本事是靠磨练出来的,是靠苦逼苦出来的,要想提高自己的本事,就得去挑战更高难度的东西。