我正在尝试通过arduino的簧片开关计算python中的rpm。我似乎做错了。有人可以帮我把代码弄好。我的结果不一致。
我的问题是我正在尝试计算每分钟的转数,但我遇到了分钟部分的问题。每次通过簧片开关时,转数计数器工作正常,计数增加 1、2、3、4、5、6(等)。但是,rpm 部分是 rev / ((time.time() - t)/60) 给我一个结果,即根据旋转速度不断增加值不会足够快地增加或减少。因此,当簧片开关以每分钟 30 转的速度通过时,它应该发出 30 RPM 的簧片;当簧片开关以每分钟 90 转的速度通过时,它应该发出 90 RPM 的簧片。我知道我需要为每一分钟计算一次转数,我想这是我很难编程的每一分钟。
感谢您帮助我,这已经困扰了我好几个月了。
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
t = time.time()
a = ser.read()
rev = 0
while (a == ser.read()):
rev += 1
print rev / ((time.time() - t)/60)
新问题,现在我正在尝试添加两个簧片开关。我可以让两者分别工作,但是当我通过第二个簧片开关时,脚本会终止。我现在为什么要终止脚本(如果为真,则为假终止),但我不确定如何正确编码。b'1' 和 b'2' 是从 arduino 进来的
我的目标是让两个芦苇同时阅读。
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
a = ser.read()
t0 = time.time()
while(a == ser.read()):
if a == b'2':
t1 = time.time()
try:
print(1 / ((t1-t0)/60))
except ZeroDivisionError:
pass
t0 = t1
if a == b'1':
t1 = time.time()
try:
print(1 / ((t1-t0)/60))
except ZeroDivisionError:
pass
t0 = t1
我没有工作的代码,所以你可以了解我正在尝试做什么。如果我能以某种方式打破 b'1' 和 b'2'。在字体对象部分的下方,您将看到 m 和 r 需要去
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
import pygame, sys
from pygame.locals import *
t0 = time.time()
pygame.init()
DISPLAYSURF = pygame.display.set_mode((400, 300))
pygame.display.set_caption('MPH!')
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
BLUE = (148, 228, 255)
BLACK = (0, 0, 0)
while True:
a = ser.read()
if a == b'2':
t1 = time.time()
try:
rpmm = (1 / ((t1-t0)/60))
m = str((7.065 *rpmm * 60)/5280).strip("\n,\r")
except ZeroDivisionError:
pass
t0 = t1
if a == b'1':
t1 = time.time()
try:
r = str((1 / ((t1-t0)/60))).strip("\n,\r")
except ZeroDivisionError:
pass
t0 = t1
fontObj = pygame.font.SysFont('digitaldream', 40)
textSurfaceObj = fontObj.render('MPH:'+m, True, BLUE, BLACK)
textRectObj = textSurfaceObj.get_rect()
textRectObj.center = (200, 150)
fontObj2 = pygame.font.SysFont('digitaldream', 40)
textSurfaceObj2 = fontObj2.render('RPM:'+r, True, BLUE, BLACK)
textRectObj2 = textSurfaceObj2.get_rect()
textRectObj2.center = (200, 200)
DISPLAYSURF.fill(BLACK)
DISPLAYSURF.blit(textSurfaceObj, textRectObj)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()