如何excel计算出现次数 qt中gpio的通断次数

from Tkinter import *
import tkFont
import Tkinter
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(10, GPIO.IN)
class PersamaanKuadrat:
def __init__(self, parent, title):
self.parent = parent
#self.parent.geometry("")
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW")
self.aturKomponen()
def aturKomponen(self):
self.customFont = tkFont.Font(family="Helvetica", size=18)
mainCanvas = Canvas(self.parent, width=1300, height=600, bg="grey")
mainCanvas.pack(fill=BOTH, expand=YES)
self.kanvas = mainCanvas
self.btnCariAkar = Button(mainCanvas, text="ENTER!",
command=exit)
self.btnCariAkar.place(relx=.25, rely=.25)
self.btn1= Button(mainCanvas, padx=30, pady=30, text="A1", bg="white")
self.btn1.place(relx=.65, rely=.25)
self.btn2 = Button(mainCanvas, padx=30, pady=30, text="A2", bg="white")
self.btn2.place(relx=.80, rely=.25)
self.btn3 = Button(mainCanvas, padx=30, pady=30, text="B1", bg="white")
self.btn3.place(relx=.65, rely=.55)
self.btn4 = Button(mainCanvas, padx=30, pady=30, text="B2", bg="white")
self.btn4.place(relx=.80, rely=.55)
def atur(self):
inputValue = GPIO.input(10)
if(inputValue == True):
self.btn1.configure(bg="yellow")
self.btn1.configure(bg="red")
if __name__ == '__main__':
root = Tk()
aplikasi = PersamaanKuadrat(root, "T")
root.mainloop()
I want change the color of btn1 by pressing push-button which connected to GPIO pin (pin 10), for example, if I push the button, the btn1 will have yellow color, if i dont push it the color will be red. when I run the module there is no error, and the program works. but when I pushed the push button, the btn1's color didn't change. I Can't find the mistake, can you all help me.
If I want to add timer function, for example after 30 seconds, the color of btn1 will change from yellow back to red, is it possible?
can I use 'and' for this program. for example if I want to use 2 buttons to change it to green, what should I do?
Need Help, because I'm a newbie for this raspberry thing, thanks :)
解决方案 1) I think you need timer to run atur() to test if push-button was pressed. Now program doesn't know that you pressed push-button
In __init__() and in atur():
self.parent.after(10, self.atur)
2) Yes it is possible with self.parent.after(milliseconds, function_name)
3) Do you mean two push-button connected to GPIO ? I think yes.
Example with timer changing btn2 color every 500ms.
I think now program should change btn1 color by pressing push-button. (not tested)
from Tkinter import *
import tkFont
import Tkinter
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(10, GPIO.IN)
class PersamaanKuadrat:
def __init__(self, parent, title):
self.parent = parent
#self.parent.geometry("")
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW")
self.aturKomponen()
self.parent.after(10, self.atur)
self.parent.after(500, self.change_color)
def aturKomponen(self):
self.customFont = tkFont.Font(family="Helvetica", size=18)
mainCanvas = Canvas(self.parent, width=1300, height=600, bg="grey")
mainCanvas.pack(fill=BOTH, expand=YES)
self.kanvas = mainCanvas
self.btnCariAkar = Button(mainCanvas, text="ENTER!",
command=exit)
self.btnCariAkar.place(relx=.25, rely=.25)
self.btn1= Button(mainCanvas, padx=30, pady=30, text="A1", bg="white")
self.btn1.place(relx=.65, rely=.25)
self.btn2 = Button(mainCanvas, padx=30, pady=30, text="A2", bg="white")
self.btn2.place(relx=.80, rely=.25)
self.btn3 = Button(mainCanvas, padx=30, pady=30, text="B1", bg="white")
self.btn3.place(relx=.65, rely=.55)
self.btn4 = Button(mainCanvas, padx=30, pady=30, text="B2", bg="white")
self.btn4.place(relx=.80, rely=.55)
def atur(self):
print "test push-button"
inputValue = GPIO.input(10)
if(inputValue == True):
self.btn1.configure(bg="yellow")
self.btn1.configure(bg="red")
self.parent.after(10, self.atur)
def change_color(self):
print "change_color"
if self.btn2['bg'] == 'yellow':
self.btn2['bg'] = 'red'
self.btn2['bg'] = 'yellow'
self.parent.after(500, self.change_color)
if __name__ == '__main__':
root = Tk()
aplikasi = PersamaanKuadrat(root, "T")
root.mainloop()
本文地址: &
从Tkinter导入* 导入tkFont 导入Tkinter 导入RPi.GPIO为GPIO
GPIO.setmode GPIO.BCM) GPIO.setup(10,GPIO.IN)
类PersamaanKuadrat: def __init __(self,parent,title): self.parent = parent
#self.parent.geometry(“”) self.parent.title(title) self.parent.protocol(“WM_DELETE_WINDOW” )
self.aturKomponen()
def aturKomponen(self):
self.customFont = tkFont。 Font(family =“Helvetica”,size = 18)
mainCanvas = Canvas(self.parent,width = 1300,height = 600,bg =“grey”) mainCanvas.pack fill = BOTH,expand = YES)
self.kanvas = mainCanvas
self.btnCariAkar = Button(mainCanvas,text =“ENTER!”, $ b command = exit) self.btnCariAkar.place(relx = .25,depend = .25)
self.btn1 = Button(mainCanvas,padx = 30,pady =文本=“A1”,bg =“白色”) self.btn1.place(relx = .65,depend = .25)
self.btn2 = Button(mainCanvas,padx = 30,pady = 30,text =“A2”,bg =“white”) self.btn2.place(relx = .80,depend = .25)
self.btn3 = Button(mainCanvas,padx = 30,pady = 30,text =“B1”,bg =“white”) self.btn3.place(relx = .65,reli = .55)
self.btn4 = Button(mainCanvas,padx = 30,pady = 30,text =“B2”,bg =“white”) self.btn4.place(relx = .80,depend = $ 55
def atur(self): inputValue = GPIO.input(10) if(inputValue == True): self.btn1。 configure(bg =“yellow”) else: self.btn1.configure(bg =“red”)
如果__name__ =='__main__':
root = Tk()
aplikasi = PersamaanKuadrat(root,“T”)
root.mainloop()
我想通过按下连接到GPIO引脚(引脚10)的按钮来更改btn1的颜色,例如,如果我按下按钮,btn1将有黄色,如果我不推它的颜色将是红色的。当我运行模块没有错误,程序工作。但是当我按下按钮,btn1的颜色没有改变。
如果我想添加定时器功能,例如30秒后,btn1的颜色将从黄色变回红色,是可能的吗?
我可以使用'和'这个程序。例如,如果我要使用2个按钮将其更改为绿色,应该怎么办?
需要帮助,这个树莓的新手,感谢:)
1)我想你需要定时器运行 atur()来测试是否按下了按钮。现在程序不知道您按下按钮
在 __ init __()和 atur():
self.parent.after(10,self.atur)
2)是的,可以使用 self.parent.after(milliseconds,function_name )
3)你的意思是两个按钮连接到GPIO?我认为是的。
EDIT: b 每隔500ms定时器改变 btn2 颜色的示例。 我认为现在程序应该更改 btn1 按下按钮颜色。 (未测试)
来自Tkinter import *
import tkFont
import Tkinter
import RPi .GPIO as GPIO
GPIO.setmode(GPIO.BCM) GPIO.setup(10,GPIO.IN)
类PersamaanKuadrat: def __init __(self,parent,title): self.parent = parent
#self.parent.geometry(“”) self.parent.title (title) self.parent.protocol(“WM_DELETE_WINDOW”)
self.aturKomponen()
self.parent.after(10,self.atur)
self.parent.after(500,self.change_color)
def aturKomponen(self):
self.customFont = tkFont.Font family =“Helvetica”,size = 18)
mainCanvas = Canvas(self.parent,width = 1300,height = 600,bg =“grey”) mainCanvas.pack BOTH,expand = YES)
self.kanvas = mainCanvas
self.btnCariAkar = Button(mainCanvas,text =“ENTER!”,命令= exit) self.btnCariAkar.place(relx = .25,reli = .25)
self.btn1 = Button(mainCanvas,padx = 30,pady = 30,text = “a1”,bg =“white”) self.btn1.place(relx = .65,reli = .25)
self.btn2 = Button(mainCanvas,padx = pady = 30,text =“A2”,bg =“white”) self.btn2.place(relx = .80,depend = .25)
self.btn3 = Button mainCanvas,padx = 30,pady = 30,text =“B1”,bg =“white”) self.btn3.place(relx = .65,reli = .55)
self.btn4 = Button(mainCanvas,padx = 30,pady = 30,text =“B2”,bg =“white”) self.btn4.place(relx = .80,depend =。 55)
def atur(self):打印“测试按钮” inputValue = GPIO.input(10) if(inputValue == True) : self.btn1.configure(bg =“yellow”) else: self.btn1.configure(bg =“red”) self.parent.after ,self.atur)
def change_color(self): print“change_color” if self.btn2 ['bg'] =='yellow': self.btn2 ['bg'] ='red' else: self.btn2 ['bg'] ='yellow' self.parent.after(500,self.change_color)
if __name__ =='__main__': root = Tk()
aplikasi = PersamaanKuadrat(root,“T”) $ b b root.mainloop()
本文地址: &
扫一扫关注官方微信博客访问: 1430805
博文数量: 446
博客积分: 10994
博客等级: 上将
技术积分: 5481
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
& 一个函数分析(s3c2410_gpio_setpin),浅析ARM IO 内存映射(这是我转载的一篇博客,不过我自己感觉其中有一点错误,不过按照这个上面的解释,还是有一点理解映射的机制的,呵呵)&& &目录:1 S3c2410_gpio_setpin作用以及源码2 在内核中队部分代码进行深入跟踪3 ARM的IO内存映射计算及分析4 一些琐碎的话&1& S3c2410_gpio_setpin作用以及源码&该函数根据传入的参数设这GPIO的数据输出。源码如下void s3c2410_gpio_setpin(unsigned int pin, unsigned int to){&&&&&& void __iomem *base = S3C24XX_GPIO_BASE(pin);&&&&&& unsigned long offs = S3C2410_GPIO_OFFSET(pin);&&&&&&&&&&&&&&&&&&& local_irq_save(flags);&&&&&&& dat = __raw_readl(base + 0x04);&&&&&& dat &= ~(1<< offs);&&&&&& dat |= to <<&&&&&& __raw_writel(dat, base + 0x04);&&&&&&& local_irq_restore(flags);}&EXPORT_SYMBOL(s3c2410_gpio_setpin);&&2& 在内核中队部分代码进行深入跟踪&S3C24XX_GPIO_BASE的定义如下#define S3C24XX_GPIO_BASE(x)& S3C2400_GPIO_BASE(x) //这一句我感觉有问题,源码中是这样写的:
#ifdef CONFIG_CPU_S3C2400#define S3C24XX_GPIO_BASE(x)& S3C2400_GPIO_BASE(x)#define S3C24XX_MISCCR&&&&&&& S3C2400_MISCCR#else#define S3C24XX_GPIO_BASE(x)& S3C2410_GPIO_BASE(x)#define S3C24XX_MISCCR&&&&&& S3C24XX_GPIOREG2(0x80)#endif /* CONFIG_CPU_S3C2400 */
由于CONFIG_CPU_S3C2400,对于,应该是执行#else后面的宏定义的不是么?
我很疑惑,可是再网上都没有关于这方面的解释,所以说我还是按照他上面说的做的。。
#define S3C2400_GPIO_BASE(pin)&& (pin < S3C2410_GPIO_BANKC ? \&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& S3C2400_BASEA2B(pin)+S3C24XX_VA_GPIO : \&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& S3C2400_BASEC2H(pin)+S3C24XX_VA_GPIO)&#define S3C2410_GPIO_BANKC&& (32*2)#define S3C2400_BASEA2B(pin)&&&& ((((pin) & ~31) >> 2))#define S3C2400_BASEC2H(pin)&&&& ((S3C2400_BANKNUM(pin) * 10) + \&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (2 * (S3C2400_BANKNUM(pin)-2)))&#define S3C2400_BANKNUM(pin)&&&& (((pin) & ~31) / 32)&#define S3C24XX_VA_GPIO&&&&&&&& ((S3C24XX_PA_GPIO-S3C24XX_PA_UART)+S3C24XX_VA_UART)&#define S3C24XX_PA_GPIO&&&& S3C2410_PA_GPIO&#define S3C2410_PA_GPIO&&&& (0x)&#define S3C2410_PA_UART&&& (0x)&#define S3C24XX_VA_UART&&&&&&&& S3C_VA_UART&#define S3C_VA_UART& S3C_ADDR(0x)&&&&& /* UART */&&#ifndef __ASSEMBLY__#define S3C_ADDR(x)&&& ((void __iomem __force *)S3C_ADDR_BASE + (x))#else#define S3C_ADDR(x)&&& (S3C_ADDR_BASE + (x))#endif&#define S3C_ADDR_BASE&& (0xF4000000)以上就是用cscope跟踪内核代码的结果。&&3& ARM的IO内存映射计算及分析UART映射后的虚拟地址是0xFx,而物理地址GPIO=0x UART=0x,void __iomem *base = S3C24XX_GPIO_BASE(pin)中的base是通过UART的虚拟地址加上GPIO和UART 的差,进而计算出GPIO的虚拟地址S3C24XX_VA_GPIO=((S3C24XX_PA_GPIO - S3C24XX_PA_UART)+S3C24XX_VA_UART=0xxC24XX_VA_UART=0x+(0xfxxfb000000,所以A组GPIO的基地址为 0xfb000000 B组的基地址为:0xfbb)=0xfb000010 ,即 S3C24XX_GPIO_BASE=0xfb000010,C组基地址为 2*10+2*(2-2)+0xfbb10100+0xfbx14+0xfbxfb000014,DEFGH这些组可以类推,如D组比C组基地址大12,E组比D组基地址大12……&S3C2410_GPIO_OFFSET的定义如下:#define S3C2410_GPIO_OFFSET(pin) ((pin) & 31)可知GPB(5)的偏移量就是5对应GPBCON&& 的第五位,对应控制断口的第五位。而在硬件手册上找到ARM920T的GPIO物理地址:GPACON 0x&&& GPADAT 0x&&&& Oxx5600000c 这两个地址保留PGBCON 0x&&& GPBDAT 0x&&&& GPBUP 0x Reserved 0x5600001cPGCCON 0x&&& GPCDAT 0x&&&& GPCUP 0x Reserved 0x5600002c&&&& 由此可知道S3C24XX_GPIO_BASE=0xfb000010就是GPBCON的地址,S3C24XX_GPIO_BASE+0x04=(base+0x04)就是GPBDAT的地址,所以下面语句就是向从GPBDAT读数据到dat,经过修改之后(根据穿过来的参数,设置对应位,这里是GPB(5),也就是修改GPBDAT中的第五位)再次写入GPBDAT&&&&&& dat = __raw_readl(base + 0x04);&&&&&& dat &= ~(1<< offs);&&&&&& dat |= to <<&&&&&& __raw_writel(dat, base + 0x04);&&&&&& 以上IO物理地址映射为虚拟地址的过程就是ARM IO 地址映射的过程local_irq_save(flags);是关中断local_irq_restore(flags);是开中断&&4& 一些琐碎的话在Documents/arm/s3c24xx中有关于s3c24xxcpu的一些文档,很好,可以看看。比如有关gpio的文档。GPIO 在使用的时候首先是对所有的GPIO 进行了分类A B C D E F G H J 这几大类,每一类都有32个GPIO,在逻辑上对他们进行了地址的规划,地址是从0(还是1?有待细看)一直到32*9 这么多地址,这些地址进而又与虚拟地址相对应,linux中端口的地址都是把对应的物理地址加一个偏移量形成了物理地址,这个偏移量从0xf4000000 开始的,然后再以0xf4000000为基地址进行映射(那些编号就是相对从0xf4000000开始映射的GPIO地址的偏移地址)。这样就从CPU引脚的物理地址变换成了虚拟地址。&新手,如有错误不要吝惜您的数次按键,请批评指正。如有意见建议谢谢点拨。&TAG ARM IO内存映射 s3c2410_gpio_setpin&
下面是我跟踪另一个宏定义,总结一下如下(linux2.6.30.2内核),
S3C2410_GPIO_BASE(pin)-------------在linux/include/asm/hardware/s3c2410/regs-gpio.h中#define S3C2410_GPIO_BASE(pin) ((((pin) & ~31) >> 1) +S3C24XX_VA_GPIO)S3C24XX_VA_GPIO------------
#define S3C24XX_VA_GPIO&&& ((S3C24XX_PA_GPIO - S3C24XX_PA_UART) + S3C24XX_VA_UART)#define S3C24XX_PA_GPIO&&&& S3C2410_PA_GPIO#define S3C2410_PA_GPIO&&& (0x)#define S3C24XX_PA_UART&&&& S3C2410_PA_UART#define S3C2410_PA_UART&&& (0x)#define S3C24XX_VA_UART&&& S3C_VA_UART#define S3C_VA_UART&S3C_ADDR(0x)&/* UART */
#ifndef __ASSEMBLY__#define S3C_ADDR(x)&((void __iomem __force *)S3C_ADDR_BASE + (x))#else#define S3C_ADDR(x)&(S3C_ADDR_BASE + (x))#endif#define S3C_ADDR_BASE&(0xF4000000)
我算了一下,S3C24XX_VA_GPIO=0xx5000000 + 0xF4000000刚好是0xfb000000,说明2者算出的结果相同,呵呵
阅读(1225) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。基于QT的计算器设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于QT的计算器设计
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩13页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢:怎么使用GPIO中断 - Linux/Unix当前位置:& &&&:怎么使用GPIO中断:怎么使用GPIO中断&&网友分享于:&&浏览:254次求助:如何使用GPIO中断对于gpio对应的九个寄存器和interrupt & controller的寄存器们的设置我已经很熟了
我的疑问是这样的:比如我现在要通过GPIO17输入中断,我在驱动程序中必然要用
request_irq(),那么在参数里,我应该申请什么中断号呢?(irq_no=?)
我尝试用的是IRQ_GPIO(gpio_nr),但是我申请IRQ_GPIO(17)号中断总是不成功啊
我看了整整一天,还没有结果,请大家帮忙啊------解决方案--------------------恩。对的。
不过一般用的时候,还是设置一下比较好。
------解决方案--------------------主题右上角--& 管理--& 给分--& 输入密码--& 结贴
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有推荐这篇日记的豆列
······}

我要回帖

更多关于 换气次数计算公式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信