超级quhaihua
超级quhaihua
关注数: 10
粉丝数: 86
发帖数: 995
关注贴吧数: 39
关于类的super()的同属理解 类可以继承,上一级的叫父类,parent,继承的小子就叫child,下面我们定义一个父类先: class parent: def pay(self): paymoney 老子里面定义了一个方法叫买单:pay() 然后我们再定义一个儿子: class child(parent): def buycar(self): 让老子买单 小子里面有个行为叫买车,怎么买呢,当然是让老子掏钱,调用老子的买单方法,那有两种方法 这里是第一种 def buycar(self): parent.pay() 这种方法就是,儿子叫张三,老子叫张二,这个行为就是让张二买单,下面还有另一种方法: def buycar(self): super(child,self).pay() 这种方法就是,儿子叫张三,让张三的老子买单! 看到这里大家就知道, 有时候老子万一躲情人或者躲债,把名字换了,那第一种方法中让张二买单,就找不到张二这个人,但是不管他怎么改,他总归是张三的儿子,所以用super()还是有效的。 除了这个区别,其实还有一点区别,我扯不下去了,直接复制黏贴别人的代码大家研究一下吧: 代码一: class A: def __init__(self): print("Enter A") print("Leave A") class B(A): def __init__(self): print("Enter B") A.__init__(self) print("Leave B") class C(A): def __init__(self): print("Enter C") A.__init__(self) print("Leave C") class D(A): def __init__(self): print("Enter D") A.__init__(self) print("Leave D") class E(B, C, D): def __init__(self): print("Enter E") B.__init__(self) C.__init__(self) D.__init__(self) print("Leave E") E() 结果: Enter E Enter B Enter A Leave A Leave B Enter C Enter A Leave A Leave C Enter D Enter A Leave A Leave D Leave E 执行顺序很好理解,唯一需要注意的是公共父类A被执行了多次。 代码二: class A: def __init__(self): print("Enter A") print("Leave A") class B(A): def __init__(self): print("Enter B") super(B, self).__init__() print("Leave B") class C(A): def __init__(self): print("Enter C") super(C, self).__init__() print("Leave C") class D(A): def __init__(self): print("Enter D") super(D, self).__init__() print("Leave D") class E(B, C, D): def __init__(self): print("Enter E") super(E, self).__init__() print("Leave E") E() 结果: Enter E Enter B Enter C Enter D Enter A Leave A Leave D Leave C Leave B Leave E 在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照mro进行的(E.__mro__)。
CHECKIO练习:House password 斯蒂芬和索菲亚对于一切都使用简单的密码,忘记了安全性。请你帮助尼古拉开发一个密码安全检查模块。如果密码的长度大于或等于10个符号,至少有一个数字,一个大写字母和一个小写字母,该密码将被视为足够强大。密码只包含ASCII拉丁字母或数字。 输入: 密码 (str, unicode)。 输出: 密码的安全与否,作为布尔值(bool),或者任何可以转换和处理为布尔值的数据类型。你会在结果看到转换后的结果(True 或 False)。 Example: checkio('A1213pokl') == False checkio('bAse730onE') == True checkio('asasasasasasasaas') == False checkio('QWERTYqwerty') == False checkio('123456123456') == False checkio('QwErTy911poqqqq') == True 如何使用: 如果你担心你的应用或服务的安全性,您可以检查用户密码的复杂性。你可以使用这些技巧要求你的用户的密码符合多个条件(标点符号或unicode)。
CHECKIO练习:Median 中位数是一个可将数值集合划分为相等的上下两部分的一个数值。如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位数。在这个任务里,你将得到一个含有自然数的非空数组(X)。你必须把它分成上下两部分,找到中位数。 输入: 一个作为数组的整数(int)列表(list)的。 输出: 数组的中位数(int, float). 范例: checkio([1, 2, 3, 4, 5]) == 3 checkio([3, 1, 2, 5, 3]) == 3 checkio([1, 300, 2, 200, 1]) == 2 checkio([3, 6, 20, 99, 10, 15]) == 12.5 如何使用: 中位数在概率论和统计学中得到应用,它偏态分布中有显著的价值。例如:我们想从一组数据中知道人们的平均财富 -- 100人一个月收入100美元,10人一个月收入1,000,000美元。如果我们算平均值,得到的是91000美元。这是一个完全没有向我们展示真实情况的奇怪的值。所以在这种情况下,中位数会给我们更有用的值和较好的描述。
CHECKIO练习:Non-unique Elements 你将得到一个含有整数(X)的非空列表。在这个任务里,你应该返回在此列表中的非唯一元素的列表。要做到这一点,你需要删除所有独特的元素(这是包含在一个给定的列表只有一次的元素)。解决这个任务时,不能改变列表的顺序。例如:[1,2,3,1,3] 1和3是非唯一元素,结果将是 [1, 3, 1, 3]。输入: 一个含有整数的列表。 输出: 一个含有不唯一元素的整数列表。 范例: checkio([1, 2, 3, 1, 3]) == [1, 3, 1, 3] checkio([1, 2, 3, 4, 5]) == [] checkio([5, 5, 5, 5, 5]) == [5, 5, 5, 5, 5] checkio([10, 9, 10, 10, 9, 8]) == [10, 9, 10, 10, 9] 如何使用: 这个任务将帮助您了解如何操作数组,这是解决更复杂的任务的基础。这个概念可以很容易地推广到真实世界的任务。例如你需要通过删除低频的元素(噪声)来使统计数据更清楚。
推荐新手看的第二本书,head first python http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1nt2DCoD&urlrefer=61d90fd2b3ddc727d5d261516c3b57b2 这是我看的第二本书,循序渐进,比第一本范围多一点
大家好,我是PYTHON新手自学吧的吧主 大家好,我是PYTHON新手自学吧的吧主。 由于我在学习的过程中需要一个记录自己学习过程的地方我就创建了新手自学吧,本来想在这里学习的,后来发现这里水贴和各种广告贴实在太多所以自创了一个。 贴吧的内种是介绍一些基本知识,后期我有能力的话也会解答各位吧友的问题,过几天我打算把我在CHECKIO上做的一些算法有空就贴上来,权当是玩游戏了,边玩边学习 python新手自学吧是一个偏向于自学的吧,希望各位能够和我一起成长。 PS:吧主请收下留情留下此贴,谢谢! http://tieba.baidu.com/f?kw=python%D0%C2%CA%D6%D7%D4%D1%A7&fr=home
记录一下我学习中理解的类 类是什么,类是生产毛坯的磨具或者生产线,一条生产线就是一个类,车子就是生产出来的实例,但是车子可以有不同的颜色。不同的颜色就代表车子不同的属性,那方法就是你怎么玩车,比如说你可以开,你愿意你也可以推 class classname (): 这里定义了一个类,然后里面应该有些属性和方法 def __init__(self,a,b): a.self=a b.self=b 这里是一个默认初始化的方法,a和b就是属性,就像你告诉生产线,你要黄颜色的车子,你要真皮座椅等等,利用__init__() 函数就可以在出厂的时候就把车子的这些属性搞定。 下面我们造车了: mycar=classname() 这样生长线就给你造了mycar这辆车,并且颜色和真皮座椅都帮你搞定了 那我们如果定义类的时候忘了告诉厂家我要电加热后视镜呢,没关系,车子到手,慢慢改: mycar.c=c 这实际上是在现成的车子上添加了一个新的属性 方法其实就是怎么玩车的函数: def drive(self,d): pass 比如说d就是油门,踩到油门车子就开动了
Python print 输出到文件 Python3.x [python] view plaincopyprint? #!/usr/bin/env python3 #coding:utf-8 year = 1 years = 5 bj = 10000 rate = 0.05 f = open("./source/interest.bak", 'w+') while year < years: bj = bj * (1 + rate) print("第{0}年,本金息总计{1}".format(year, bj), file=f) year += 1 Python2.x[python] view plaincopyprint? #!/usr/bin/env python #coding:utf-8 year = 1 years = 15 bj = 10000 rate = 0.05 f = open("./source/interest.bak", 'w+') while year < years: bj = bj * (1 + rate) print >> f, "第%d年,本金息总计%0.2f" % (year, bj) year += 1
本吧QQ群: 115491494 本吧已开通QQ群: 115491494,欢迎各位的加入
用序列来理解Python里的多重赋值 了解过 Python 的序列,特别是 list 和 tuple 之后,我们就可以解释一些 Python 里特有的一些编程技巧,额……比如多重赋值。 我们先来看看这么一段代码: 01 >>> t = 1,2,3 02 >>> t 03 (1, 2, 3) 04 >>> a,b,c = t 05 >>> a 06 1 07 >>> b 08 2 09 >>> c 10 3 在其它语言里,很不可思议吧,但在 Python 却是可运行的。 多重赋值 多重赋值就是这样的赋值表达式: 1 t = a,b,c 2 a,b,c = t 有前面的基础,你应该可以看出来,多重赋值本质就是 tuple packing (元组打包)和 Sequence unpacking(序列解包)。 >>> t = a, b, c#这就是tuple packing,按照tuple的构建的语法,我们知道这里t肯定是个tuple。 >>> a, b, c = t#这就是Sequence unpacking,这里t只要是三元的Sequence就可以了,不一定是tuple,如果t不是三元的,会抛出一个ValueError异常。 t = 1,2,3 就相当于把 1,2,3 打包到一个元组里面,a,b,c = t 则是把 list t 里的元素分给 a,b,c 。所以 list t 需要有3个元素。 Python 的多重赋值是个很好用的语法糖,比如能让一行中完成一次交换: 1 >>> a = 2 2 >>> b = 3 3 >>> a,b = b,a 4 >>> a 5 3 6 >>> b 7 2 8 >>> 这样就实现了 a 和 b 的交换,这就是 Python 简洁高效的地方。
加深对.split()的理解和用法 Man : Is this the right room for an argument? Other Man : I've told you once. Man : No you haven't! Other Man : Yes I have. Man : When? Other Man : Just now. 这段文字要用.split()分割,':'就做分割点,代码如下: for each_line in data: (role,line_spoken)=each_line.split(':') print role, print 'said:', print line_spoken 显示如下: Man said: Is this the right room for an argument? Other Man said: I've told you once. Man said: No you haven't! Other Man said: Yes I have. Man said: When? Other Man said: Just now. 到这里没有问题,我当时的疑问是 (role,line_spoken)=each_line.split(':'),左边用的是圆括号,不是用的方括号,我就想圆括号代表元组,那我用方括号‘[]‘ 难道不行吗,抱着试试看的心态尝试了一下,结果不出意外一样可以运行 下面问题来了,我分别用了一下代码: a=(role,line_spoken)=each_line.split(':')和b=[role,line_spoken]=each_line.split(':') 然后type(a)和type(b)居然都得到list类型,真奇怪!
题目:分别打印出列表的元素,碰到列表中的列表分别打印 已有列表: movies=['The Holy Grail',1975,'Terry Jones & Gilliam',91,['Graham Chapman',['Michael Palin','John Cleese','Terry Gilliam','Eric Idel','Terry Jones']]] 要求打印成这样: The Holy Grail 1975 Terry Jones & Gilliam 91 Graham Chapman Michael Palin John Cleese Terry Gilliam Eric Idel Terry Jones
尝试用python读取和解析STL格式文件 吧友绝世阿帅在QQ里告诉我他想明白 Python从stl的格式里提取对应的信息和建立新的模型的机制。 想正好在学习PYTHON,那就不管成不成,试试看再说。 要读取SLT文件,首先百度一下STL文件是什么:
零基础入门学习Python(全42集) http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1kTs70sn&urlrefer=344aaf7b4d98398c46e3aea6ed39e5c1
Python: 什么是*args和**kwargs 先说答案: *args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1,b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keywordarg after keyword arg”。 呵呵,知道*args和**kwargs是什么了吧。还有一个很漂亮的用法,就是创建字典: defkw_dict(**kwargs): return kwargs printkw_dict(a=1,b=2,c=3) == {'a':1, 'b':2, 'c':3}其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。 先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------'if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo('a', 1, None, a=1, b='2', c=3)输出结果如下:args = (1, 2, 3, 4) kwargs = {} --------------------------------------- args = () kwargs = {'a': 1, 'c': 3, 'b': 2} --------------------------------------- args = (1, 2, 3, 4) kwargs = {'a': 1, 'c': 3, 'b': 2} --------------------------------------- args = ('a', 1, None) kwargs = {'a': 1, 'c': 3, 'b': '2'}
求1-100的素数 def f(x): n=2 while x%n!=0 and n<x: n+=1 if n==x: return x l=range(2,101) print filter(f,l)
利用map()函数,规范列表名字(首字母大写后字母小写) http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.liaoxuefeng.com%2Fwiki%2F001374738125095c955c1e6d8bb493182103fac9270762a000%2F00141861202544241651579c69d4399a9aa135afef28c44000&urlrefer=2c47765e5486873fe516ea5a9a81e27e 这里的第一题,自己写了一下: def f(x): x=x.lower() return x[0].upper()+x[1:] print map(f,['adam', 'LISA', 'barT'])
str()和repr的区别 纠结了两天,没搞明白str()和erpr()的区别, 官方的解释是这样的: The str() function is meant to return representations of values which are fairly human-readable, while repr() is meant to generate representations which can be read by the interpreter (or will force a SyntaxError if there is not equivalent syntax). For objects which don't have a particular representation for human consumption, str() will return the same value as repr(). Many values, such as numbers or structures like lists and dictionaries, have the same representation using either function. Strings and floating point numbers, in particular, have two distinct representations. 翻译过来就是: str()一般是将数值转成字符串。 repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。 我尝试了一下str(['1','2']) 结果是可以打印出:"['1', '2']" 但是用repr()可以得出想通的区别, 试验了一下eval(repr(list)) 按照希望得到了原来的LIST,又想把str(list) ,发现变不回去了,难道这就是区别??? 还有: a='hello' str(a) 显示'hello' len一下是5 但是 repr(a) 显示“‘hello'" len下是7 还是没看明白区别是什么…………
今天在群里看到有人问了一个问题:他问:各位大神,我的dens是float类型了怎么还是提示出错呢 其实当时我也不懂,我就看了一下错误信息,估计是不能乘以浮点数,自己开了IDLE模拟了一遍过程:之后我估计了提问者的意图,想到了昨天晚上刚看到了内容,模拟了一遍,应该是解决问题了:
如何判断一个对象是可迭代对象? 方法是通过collections模块的Iterable类型判断: >>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False
增强赋值语句 等价于语句 x+=y x = x+y x-=y x = x-y x*=y x = x*y x/=y x = x/y 其它类似结构:x&=y x|=y x^=y x%=y x>>=y x<<=y x**=y x//=y 这就是增强赋值。为什么用增强赋值?因为i +=2,比i = i+2计算更快,后者右边还要拷贝一个i。
变量的赋值 python中的变量不需要先声明,在使用的过程中貌似系统可以自动识别 我在玩C++的时候,可能先要 int c ,先声明一个int类型的是变量C,才能使用这个变量 但是在python中,可以直接使用a=1,这样系统就知道a是int类型的变量, 还能这样玩a=b=1 ,连续赋值。 如果这样呢 : a=b=1 b=b+1 这个时候b=2了,那么a等于几呢 其实a还是等于1 我的理解就是,系统先分配了一个空间存储了数值1,然后把标签a贴上去,再把标签b也贴上去,但是当b+1的时候,系统就另外开辟了一个空间存储了b+1这个值 还能这样玩: a,b=1,2 这个就相当于a=1,b=2 系统会按照对应的位置会自动赋值 这样的话就可以得出: a,b=b,a 的意思就是等号右边的b的数值赋值给等号左边的a,等号右边的a的数值赋值给等号左边的b,简单的说a、b数值对换,哈,居然可以这样简单!
推荐第一本适合新手真正0基础学习python的书 这本是我看下来最浅显的书籍 《与孩子一起学编程_中文版_详细书签》 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1r3ATw&urlrefer=6560239f903813e40c42a071bf060e5f 介绍得比较浅显易懂,个人建议图形那块可以先不用看……
本吧针对的是python2.x版本 因为据说2.X的资料比较多,我看各种书也是推荐先从2.X开始学起,所以默认本吧是讨论学习2.X版本的python,发的学习资料应该也是以2.X为主,但是不排斥其他版本的资料,请各位见谅。
K800安装记录,arduino吧移植过来,原帖已被删 第一个是要准备的工具: 我用到了一套L形内六角螺丝刀,一个尖嘴钳,一瓶502,一瓶AB胶,一把镊子,电烙铁(焊接探温排针); 安装过程中,我发现4个步进电机,除了挤出机线序是对的,其他三个线序是反的,按照说明书的话,黑线在最右边,实际使用过程中,如果这样安装的话,所有的电机都是反向的,X轴,Y轴,Z轴,包括调试的时候HOME按键,直接往下砸,所以需要把黑线放左边,旋转180度插进去,大家可以试试,因为我实验了两个固件,LZ的打印版和官方版都有这个问题。 4899的散热片一定要安装,而且要散热良好,如果过烫的话,会导致1:步进电机声音响,2:步进电机速度慢,3:步进电机失步。我在安装的时候,开着空调和风扇,连续运行3小时就烫得不行,手摸两秒都受不住,不要的时候调整一下4899的电流。 LZ发的是一面毛一面光的玻璃,安装的时候光面先往上,别学我毛面直接向上,导致调试过程中喷头直接砸下来移动,把喷嘴磕坏了。。。。 rep软件是不能直接用的,要设置打印平台,默认是正方形的XY_z形,不设置的话,会导致打印到边上去,而且可能会打出半个零件。。
【arduino】安装K800中的问题和总结,希望可以和大家一起完善 第一个是要准备的工具: 我用到了一套L形内六角螺丝刀,一个尖嘴钳,一瓶502,一瓶AB胶,一把镊子,电烙铁(焊接探温排针); 安装过程中,我发现4个步进电机,除了挤出机线序是对的,其他三个线序是反的,按照说明书的话,黑线在最右边,实际使用过程中,如果这样安装的话,所有的电机都是反向的,X轴,Y轴,Z轴,包括调试的时候HOME按键,直接往下砸,所以需要把黑线放左边,旋转180度插进去,大家可以试试,因为我实验了两个固件,LZ的打印版和官方版都有这个问题。 4899的散热片一定要安装,而且要散热良好,如果过烫的话,会导致1:步进电机声音响,2:步进电机速度慢,3:步进电机失步。我在安装的时候,开着空调和风扇,连续运行3小时就烫得不行,手摸两秒都受不住,不要的时候调整一下4899的电流。 LZ发的是一面毛一面光的玻璃,安装的时候光面先往上,别学我毛面直接向上,导致调试过程中喷头直接砸下来移动,把喷嘴磕坏了。。。。 rep软件是不能直接用的,要设置打印平台,默认是正方形的XY_z形,不设置的话,会导致打印到边上去,而且可能会打出半个零件。。 其他的想到再说,希望大家和我一起完善
【作品展示】用洞洞板把平衡车的电子部件做了个整合 之前做的平衡车布线太乱了,况且原先用的电机太廉价导致平衡不稳定,把电机换掉用好点的带码盘,正好用这个机会把电子部件好好整理一下,首先用的是洞洞板(其实用arduino的原安装位拓展版:)
求助!在arduino上用PID库文件写了代码不能运行,用的c++ 先贴我的程序代码: 没有OUTPUT输出,555555…… #include "PID_v1/PID_v1.h" /*陀螺仪使用的定义变量*/ unsigned char Re_buf[11],counter=0; unsigned char sign=0; /*电机使用定义的变量*/ int motor_a1=9; int motor_a2=8; int motor_b1=6; int motor_b2=7; int ena=10; int enb=11; /*定义PID库使用的参数*/ double Setpoint, Input, Output; double kp,ki,kd; /*定义PID程序*/ PID myPID(&Input, &Output, &Setpoint,kp,ki,kd, DIRECT); /*初始化*/ void setup() { Serial.begin(115200); //初始化串口速率 /*配置电机针脚为输出*/ pinMode(motor_a1,OUTPUT); pinMode(motor_a2,OUTPUT); pinMode(motor_b1,OUTPUT); pinMode(motor_b2,OUTPUT); myPID.SetMode(AUTOMATIC); //配置PID为自动模式 myPID.SetSampleTime(100); //配置PID采样率为100毫秒 Setpoint = -4.1; //设置小车平衡点角度 } /*主函数*/ void loop() { if (sign==0) return; //sign为数据更新标志,每隔10ms更新一次,也就是说以下代码每隔10ms控制一次 sign=0; getkpkikd(); //获取kp,ki,kd的值 myPID.Compute(); //PID运算 SetMotor(Output); //控制电机 cout2serial() ; //串口输出需要查看的数据 } /*获取kp,ki,kd的值的函数*/ void getkpkikd(){ kp=(double)analogRead(0)/1024*200; ki=(double)analogRead(1)/10240; kd=(double)analogRead(2)/1024*400; } /*控制电机运行的函数*/ void SetMotor(float Output) { if (Output>0){ pinMode(motor_a1,HIGH); pinMode(motor_a2,LOW); pinMode(motor_b1,HIGH); pinMode(motor_b2,LOW); analogWrite(ena,Output); analogWrite(enb,Output); } else if (Output<0) { pinMode(motor_a1,LOW); pinMode(motor_a2,HIGH); pinMode(motor_b1,LOW); pinMode(motor_b2,HIGH); analogWrite(ena,abs(Output)); analogWrite(enb,abs(Output)); } else { ; } } /*输出串口数据的函数*/ void cout2serial() { Serial.print("angle:"); Serial.print(Input);Serial.print(" "); Serial.print("output:"); Serial.print(Output);Serial.print(" "); Serial.print("kp:"); Serial.print(kp);Serial.print(" "); Serial.print("ki:"); Serial.print(ki);Serial.print(" "); Serial.print("kd:"); Serial.print(kd);Serial.println(" "); } void serialEvent() { while (Serial.available()) { Re_buf[counter]=(unsigned char)Serial.read(); if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头 counter++; if(counter==11) //接收到11个数据 { counter=0; //重新赋值,准备下一帧数据的接收 switch(Re_buf [1]) { case 0x51: break; case 0x52: break; case 0x53: Input= double(short(Re_buf [3]<<8| Re_buf [2]))/32768*180; sign=1; break; } } } }
【项目发起】尝试和我一起做一个平衡车 写这个文章的目的是记录自己学习arduino的历程,同时帮助需要的人少走点弯路。 做一个平衡小车需要哪些东西呢?既然要平衡,那就需要一个计算角度的东西,还要一对能行走的电机带轮子,那电机就可以用单片机驱动啦。 思路: 获取小车目前的状态(倾斜角度值——input_angle),用这个角度值和小车能够稳定的角度值(setpoint)比较,得出偏差角度值(error),把这个偏差转换成PWM信号,用PWM驱动电机修正,当偏差角度值等于0的时候,这个时候小车就稳定下来了。 选材: 1.直流减速电机一对,减速比有1:48,1:120和1:288的,开工之前我在某论坛上看到某位前辈说他用的288减速度的小车抖动,可能和减速比有关系,我就选择了1:120的,牺牲一点速度获取扭矩。2.6050陀螺仪,获取角度的利器,这个6050用在小车上是浪费,因为可以输出3轴加速度和3轴角速度,共六轴的数据,用时间和温度偏差,结合加速度和角速度计算出角度,用在多轴上也够用了,但是用它来做小车只需要一个角度的输出,所以我说大才小用了。3. Arduino单片机,这里是arduino吧肯定是用这个吧?况且arduino是新手之手,简单方便。到这里其实差不多了,但是还需要一个东西,那就是电机驱动器,原因是这样的,arduino的板子最大只能输出40MA的电流,这个功率对我们的电机来说是不够,所以需要一个驱动器来给电机供电,单片机只要给驱动器发出行动指令就行了。买的时候要注意一点,需要带光耦隔离,至于光耦隔离的作用请大家自行百度,有这个功能有好处没坏处。
【求教】程序中执行顺序和函数调用的情况,新手求教。 unsigned char Re_buf[11],counter=0; unsigned char sign=0; float a[3],w[3],angle[3],T; void setup() { Serial.begin(115200); } void loop() { if(sign) { sign=0; if(Re_buf[0]==0x55) //检查帧头 { switch(Re_buf [1]) { case 0x51: break; case 0x52: break; case 0x53: angle[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*180; angle[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*180; angle[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*180; T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25; Serial.print("angle:"); Serial.print(angle[0]);Serial.print(" "); Serial.print(angle[1]);Serial.print(" "); Serial.print(angle[2]);Serial.print(" "); Serial.print("T:"); Serial.println(T); break; } } } } void serialEvent() { while (Serial.available()) Re_buf[counter]=(unsigned char)Serial.read(); if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头 counter++; if(counter==11) //接收到11个数据 { counter=0; //重新赋值,准备下一帧数据的接收 sign=1; } } } 以上是我买的6050自带卡尔曼的arduino程序经过我简化过的,主要是我只要三个角度输出所以把其他输出删掉了,现在我看了下程序有些看不懂的地方所以想问一下大家 按我的理解程序是从上往下执行的,unsigned char Re_buf[11],counter=0;开始往下,然后经过void setup()这里执行一遍,就开始执行void loop(),然后一直在LOOP里面循环执行。 但是在void loop() 下面还有一个void serialEvent() ,而且在loop程序里面找不到调用serialEvent()的地方,这样的话这个serialEvent() 不是永远没有机会被执行吗?但是要是把它删了又不对,求教我的理解错哪里了呢?
请问在手机上连续输入的时候怎么退出? 在手机上做练习题碰到while(cin>>a)这种的时候电脑上可以win+z还是啥可以下一步,手机上怎么做到呢?
请问我加了个制表符后存在哪里? #include <iostream> using namespace std; int main () { int a,b,small,big,c=0; cout<<"two numbers,please."; cin>>a >>b; if (a>b) { big=a,small=b; } else { big=b,small=a; } for (int i=small;i<=big;i++) { cout << i <<\t; c++; if (c==10) { cout <<endl; c=0; } } return 0; }
首页
1
2
下一页