Özel bir arazi aracı için veri toplama sistemi oluşturmak için çalışma. RPM'yi ölçmek için Raspberry Pi ve özel bir takometre (test edilmiş ve onaylanmış çalışma) kullanma. RPM değerini almak için aşağıdaki kodda kesmeleri kullanın.Buji, ateşleme tahrikine bağlı olarak yanma motorunun durumunu öğrenmek için kullanın.
def get_rpm():
GPIO.wait_for_edge(17, GPIO.FALLING)
start = time.time()
GPIO.wait_for_edge(17, GPIO.FALLING)
end = time.time()
duration = end - start
rpm = (1/duration)*60
return rpm
Bu kod yalnızca motor çalışıyor ve kıvılcım çıkıyorsa çalışır. Kıvılcım yoksa, kod o kenarı bekliyor ve devam etmiyor. get_rpm()
numaralı telefonu arayarak, kod bir kenar bekliyorsa, bu diğer işlemlerin askıda kalmasına neden olur.
Bunun için gerekli olan geçici çözümüm, motorun durumunu başka bir işlemde almaktır. Bence en iyi iki kısımda çalışacak. Ayrı bir iplik
Bölüm 1, çalışan (ilmek): Gerektiğinde
GPIO.wait_for_edge(17, GPIO.RISING)
last = time.time
Bölüm 2, bir fonksiyonu olarak, akan: Bölüm 1 ile
def get_state():
while time.time - last < .5:
engine_state = true
else:
engine_state = false
return engine_state
erişilebilir bellek last
tasarruf Bölüm 2, Kısım 2, bujinin kıvılcımlandığı son zamana göre aracın çalışıp çalışmadığını belirler. Bir karşılaştırıcı olarak engine_state
kullanarak, veri edinme sistemi 'dan sadece engine_state
doğru olduğunda RPM değerini alır ve saklar.
Bölüm 1'i, Bölüm 2'de last
değişkenini kullanabileceğim şekilde nasıl uygularım? last
çok ama çok hızlı değişiyor. last
güncelleştirildiğinde her zaman Raspberry Pi'nin SD kartındaki bir metin dosyasına depolamak istemiyorum. RAM'de last
depolamak istiyorum.
Çok teşekkürler!
'zaten RAM içinde, ben') (tek ihtiyacınız için 'get_state (son)' .. –
'time.time'' olmalıdır time.time bir değişken olarak geçmektir last' düşünüyorum edilir Bence – jDo
Pin konfigürasyonunu başka bir yere mi kuruyorsunuz ya da hiç kurmuyor musunuz? Bunun yerine kesme geri çağrılarını kullanamazdınız mı? Doğa tarafından işleniyorlar ve engellemeyecekler. Kenarı beklemek zorunda olduğunu düşünmüyorum. İlginç proje btw. :) – jDo