首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于Python脚本的Raspberry Pi上的两个超声波传感器

基于Python脚本的Raspberry Pi上的两个超声波传感器
EN

Stack Overflow用户
提问于 2016-03-19 17:58:34
回答 1查看 1.6K关注 0票数 3

我正在做一个带有两个超声波传感器的树莓派项目。但是现在我对python脚本有了一个问题。最后的print()函数总是告诉我0.0 23的距离,即使我将手悬停在传感器上,如果我拔下引脚23上的传感器,引脚24上的另一个传感器在正确的距离下工作正常

代码语言:javascript
运行
AI代码解释
复制
#Bibliotheken einbinden
import RPi.GPIO as GPIO
import time
from pykeyboard import PyKeyboard

#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)

#GPIO Pins zuweisen
GPIO_TRIGGER = 18
GPIO_ECHO_RECHTS = 24
GPIO_ECHO_LINKS = 23

#Richtung der GPIO-Pins festlegen (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO_RECHTS, GPIO.IN)
GPIO.setup(GPIO_ECHO_LINKS, GPIO.IN)


#Instanz von PyKeyBoard erstellen
k = PyKeyboard()

#Testausagbe
print("Script startet") 

def distanz():
# setze Trigger auf HIGH
GPIO.output(GPIO_TRIGGER, True)

# setze Trigger nach 0.01ms auf LOW
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)

StartZeit_RECHTS = time.time()
StopZeit_RECHTS = time.time()

StartZeit_LINKS = time.time()
    StopZeit_LINKS = time.time()

# speichere Startzeit des rechten sensors
while GPIO.input(GPIO_ECHO_RECHTS) == 0 and GPIO.input(GPIO_ECHO_LINKS) == 0:
    StartZeit_RECHTS = time.time()
    StartZeit_LINKS = time.time()


# speichere Ankunftszeit des rechten sensors
while GPIO.input(GPIO_ECHO_RECHTS) == 1 or GPIO.input(GPIO_ECHO_LINKS) == 1:
    StopZeit_RECHTS = time.time()
    StopZeit_LINKS = time.time()




# Zeit Differenz zwischen Start und Ankunft des rechten sensors
TimeElapsed_RECHTS = StopZeit_RECHTS - StartZeit_RECHTS
# mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
# und durch 2 teilen, da hin und zurueck
distanz_RECHTS = (TimeElapsed_RECHTS * 34300) / 2

# Zeit Differenz zwischen Start und Ankunft des linken sensors
    TimeElapsed_LINKS = StopZeit_LINKS - StartZeit_LINKS
    # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
    # und durch 2 teilen, da hin und zurueck
    distanz_LINKS = (TimeElapsed_LINKS * 34300) / 2


if distanz_RECHTS < 12.0 and distanz_RECHTS > 0.0:
    #Kommando um ein Tab weiter zu springen
    k.press_key(k.control_l_key)
    k.tap_key(k.tab_key)
    k.release_key(k.control_l_key)
    return distanz_RECHTS

elif distanz_LINKS < 12.0 and distanz_LINKS > 0.0:
    #Kommando um ein Tab zurueck zu springen
            k.press_key(k.control_l_key)
    k.press_key(k.shift_l_key)
            k.tap_key(k.tab_key)
            k.release_key(k.control_l_key)
    k.release_key(k.shift_l_key)
            return distanz_LINKS

else:
    return 0.0

if __name__ == '__main__':
try:
    while True:
        abstand = distanz()
        print ("Gemessene Entfernung = %.1f cm" % abstand)
        time.sleep(1)

    # Beim Abbruch durch STRG+C resetten
except KeyboardInterrupt:
    print("Messung vom User gestoppt")
    GPIO.cleanup()

这就是我正在编写的脚本。我知道while循环有问题,我已经尝试了很多方法,但都不起作用。两个传感器都应该只检测到它们前面有多远的东西。如果你不理解代码中的某些东西,那并不重要,这只是德语。

希望有人能帮我

EN

回答 1

Stack Overflow用户

发布于 2016-12-19 19:08:38

我认为你应该拆分第二个while循环。拆分两个while循环是很好的。首先,while循环在两个传感器都发送低信号时作出响应。但是,第二个while循环一旦在任何传感器中接收到高信号,就会立即执行。它不会等待第二个传感器做出响应。

因此,将while循环拆分为四个while循环,两个用于发送信号,两个用于接收信号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36105183

复制
相关文章
判断是否为Gravatar默认图
最近在写公共头像服务嘛,说实话,Gr的默认头是真的丑,而且好多人都没有注册Gr所以,看到评论区大片的下图
Qicloud-W
2023/03/07
6670
判断是否为Gravatar默认图
FreeRTOS事件组之事件组的创建(xEventGroupCreate())
1.使用事件组的前提: (1)与互斥量、队列集等其他内核资源不同,想要使用事件组(xEventGroup)重点不在宏定义上是否配置为1,重点在组织程序以及程序编译的时候是否包括event_groups.c源代码以及event_groups.h头文件。 (2)另外需要将宏configSUPPORT_DYNAMIC_ALLOCATION设置为1,否则不能应用事件组创建函数(xEventGroupCreate()); 2.函数说明(xEventGroupCreate()): 函
心跳包
2020/08/31
1.9K0
PyCharm在创建py文件时自动添加默认头部注释
File ----->> Setting ----->> Editor ----->> File and Code Templates ----->> Python Script
马哥Python
2019/06/28
9920
winform listview默认第一项光标选中
if (this.lsvSortingHeadList.Items.Count > 0) { this.lsvSortingHeadList.Focus(); this.lsvSortingHeadList.Items[0].Selected = true; //this.lsvSortingHeadList.HideSelection = false;
跟着阿笨一起玩NET
2018/09/19
9240
#PY小贴士# 函数的默认参数不会每次都新建?
这里的原因在于,函数的参数默认值,是在一开始定义(也就是 def)的时候所决定的,并不是到执行时才创建。我换一个例子,就看得更明白了:
Crossin先生
2020/01/20
4440
#PY小贴士# 函数的默认参数不会每次都新建?
不会写 JavaScript 的人是否还有价值?
最近我有幸参加在墨尔本召开的 2017 Web Directions Code 大会。我和 Mark Dalgleish 还有 Glen Maddern (他的演讲非常精彩)被分到了一个演讲小组里。我们做了一系列关于 CSS 的演讲,在小组讨论中,我们讨论了一个问题:“只会写 CSS 和 HTML、不会写 JavaScript 的人在行业中还有一席之地吗”。
疯狂的技术宅
2019/03/27
7510
Xcode 创建项目默认说明修改
最近需要修改Xcode创建项目默认文案修改,就是每次创建最上面默认生成的注释说明。想起来之前看原Raywenderlich(现在是Kodeco)网站下载的代码时,每个已存在的文件里都有一长串自定义的说明,而且新建文件的时候也是带有同样的自定义的说明,有过疑惑,但是没有仔细研究,今天研究下怎么实现的:
莫空9081
2023/04/06
6700
pycharm不会自动补全括号_pycharm自动提示
首先检查是否关闭了代码提示,如下图,将红框中“Power Save Mode”前的勾去掉
全栈程序员站长
2022/09/25
2K0
pycharm不会自动补全括号_pycharm自动提示
解决ListView嵌套ListView遇到的问题
Listview嵌套会造成的问题主要是子listview的高度错误导致内容不能正常显示完,解决这个问题,我个人第一个想法就是重新计算子listview的高度,代码如下: private void setListViewHeightBasedOnChildren(ListView listView) { if(listView == null) return; ListAdapter listAdapter = listView.getAdapter(); if (listAda
xiangzhihong
2018/01/29
1.7K0
pycharm创建环境_pycharm设置默认开头
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175358.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
8230
pycharm创建环境_pycharm设置默认开头
Maven不会自动下载jar包
不会自动下载jar包 idea昨天还在正常使用,结果今天发现pom文件中的依赖不会自动下载了,最后百度找到了解决方案: setting ——> maven ——> 去掉work offline 的勾 , 问题解决!
kirin
2020/08/24
4K0
Maven不会自动下载jar包
Sqlite创建表以及默认当前时间
1、创建数据库 CREATE TABLE Joyous_sqlite ( id INTEGER NOT NULL, create_time TIMESTAMP NOT NULL DEFAULT current_timestamp, poster VARCHAR(50) NOT NULL, CONSTRAINT Joyous_sqlite_pk PRIMARY KEY (id) ); 插入语句 insert into Joyous_sqlite (id,poster) values (1, ‘Joy
苦咖啡
2018/05/08
3.3K0
android ListView 嵌套 ListView
看上去效果还是不错,不过现在有个刷新问题一直没能解决,刷新的时候里面的adapter进行刷新的时候总是会让里面的listview消失掉,应该是父listview先刷新完后,子listview还未刷新完成,导致测量的高度不对,就会消失,像当前组已关闭这种,现在这个问题还没有想到办法解决的,试过比较多的方法,添加接口让子listview 刷新完成后再去更新父listview,但还是没有作用,也用过ExpandableListView,但是效果达不到这种,所以没办法还是得用这种办法,有大神知道怎么解决刷新父listview时子listview消失的方法,指导下我,比较奇怪的时候刚开始初始化的时候子listview是默认不显示的,当点击父listview去张开子listview,父listview应该会再次刷新,但子listview展开是可以的,然后下一次更新数据源的时候子listview又会自动关闭,我猜应该是在刷新子listview的时候,父listview先更新完成,子listview的高度测量就没有对!
全栈程序员站长
2022/09/13
1.4K0
android ListView 嵌套 ListView
logstash在Elasticsearch中创建的默认索引模板问题
在ELK架构中,使用logstash收集服务器中的日志并写入到Elasticsearch中,有时候需要对日志中的字段mapping进行特殊的设置,此时可以通过自定义模板template解决,但是因为logstash默认会向Elasticsearch提交一个名为logstash的模板,所以在定义logstash配置文件时有一些关键点需要注意。本文基于logstash-5.6.4和elastcisearch-5.6.4对需要注意的关键点进行列举。
bellen
2018/10/30
7.5K0
logstash在Elasticsearch中创建的默认索引模板问题
FindMarkers做差异分析默认就不会返回全部基因
所以如果我们使用FindMarkers函数对两个分组单细胞进行差异分析,它本身默认参数就不可能返回全部的基因,大家可以使用help函数看这个FindMarkers函数的帮助文档,尤其是注意下面的3个参数:
生信技能树
2021/10/12
3.7K0
[- Flutter 基础篇 -] ListView的使用
1.ListView 的基本使用 ListView 是一个盛放多个孩子的容器。我们从下面的例子开始介入: 1.1:三个构造 使用ListView构造方法 和Flex,Wrap类似,将子元素一个
张风捷特烈
2020/04/30
1K0
[- Flutter 基础篇 -] ListView的使用
查看CentOS 默认安装的 SSH client、SSH server以及是否可用?
1、点击[命令行窗口] 2、按<Enter>键 3、点击[命令行窗口] 4、按<Enter>键
裴来凡
2022/05/28
1.6K0
查看CentOS 默认安装的 SSH client、SSH server以及是否可用?
[- Flutter 基础篇 -] ListView的使用
1.ListView 的基本使用 ListView 是一个盛放多个孩子的容器。我们从下面的例子开始介入: 1.1:三个构造 使用ListView构造方法 和Flex,Wrap类似,将子元素一个一
张风捷特烈
2020/10/16
8520
[- Flutter 基础篇 -] ListView的使用
点击加载更多

相似问题

ListView不会自动滚动

21

Listview不会自动更新自身

16

ObservableCollection不会自动更新ListView

11

自动组创建

21

ListView是否自动支持lazyload?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档