arduinoのリードスイッチを介してPythonでrpmを計算しようとしています。私はそれを正しく理解できないようです。誰かがコードを正しくするのを手伝ってくれませんか。私の結果は一貫していません。
私の問題は、1分あたりの回転数を数えようとしていることですが、分の部分に問題があります。リードスイッチを通過するたびに回転カウンターが正常に動作し、カウントが 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)
新しい問題です。今、2 つのリード スイッチを追加しようとしています。両方を別々に動作させることはできますが、2 番目のリード スイッチを通過すると、スクリプトが終了します。私は今、スクリプトの終了を取得している理由(1つはtrueの場合、もう1つはfalseの終了)ですが、適切にコーディングする方法がわかりません。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()