'Mislukte randdetectie toe te voegen' -Python Script

Ik probeer pulsen te tellen met behulp van de GPIO-pinnen en wanneer ik dit script start, krijg ik de foutmelding (het is geschreven in leafpad en dan open ik het in IDLE)

Traceback (meest recente oproep laatste): bestand "/home/Pi/Desktop/revcount.py", regel 10, in g.add_event_detect (2, g.RISING, callback = verhoog rev) RuntimeError: toevoegen van rand kon mislukken

Hier is de code

import RPi.GPIO as g
from time import sleep
g.setmode(g.BCM)
g.setup(2, g.IN)
global revcount
revcount = 0
def increaserev(channel):
    global revcount
    revcount += 1
g.add_event_detect(2, g.RISING, callback=increaserev)
while True:
    sleep(60)
    print "RPM is {0}".format(revcount)
    revcount = 0
2
Werkt het als je met sudo werkt?
toegevoegd de auteur joan, de bron

1 antwoord

De relatie tussen GPIO-nummers en pinnen is als volgt.

GPIO       pin  pin    GPIO
3V3         1    2      5V
0/2 (SDA)   3    4      5V
1/3 (SCL)   5    6      0V
4           7    8      14 (TXD)
0V          9   10      15 (RXD)
17 (ce1)   11   12      18 (ce0)
21/27      13   14      0V
22         15   16      23
3V3        17   18      24
10 (MOSI)  19   20      0V
9 (MISO)   21   22      25
11 (SCLK)  23   24      8 (CE0)
0V         25   26      7 (CE1)
           .......
0 (ID_SD)  27   28      1 (ID_SC)
5          29   30      0V
6          31   32      12
13         33   34      0V
19 (miso)  35   36      16 (ce2)
26         37   38      20 (mosi)
0V         39   40      21 (sclk)

Als de GPIO-kolom een ​​V heeft, geeft dit aan dat de pin is verbonden met de vermogensrail en geen GPIO.

Waar 2 figuren worden weergegeven gescheiden door een/de eerste figuur is het GPIO-nummer dat wordt gebruikt op de eerste revisie Pi B-kaarten.

Hier is een eenvoudige RPM-teller.

#!/usr/bin/env python

import time
import pigpio # http://abyz.co.uk/rpi/pigpio/python.html

REV_GPIO=2    # GPIO getting pulses.
SAMPLE_TIME=3 # Recalculate every SAMPLE_TIME seconds.

pi = pigpio.pi()           # Connect to Pi.
cb = pi.callback(REV_GPIO) # Default tally callback.

old_count = cb.tally() # Pulse count.

try:
   while True:
      time.sleep(SAMPLE_TIME)
      new_count = cb.tally() # Pulse count.
      print("{} RPM".format(60.0*(new_count-old_count)/SAMPLE_TIME))
      old_count = new_count

except KeyboardInterrupt:
   cb.cancel() # Cancel callback.
   pi.stop()   # Disconnect from Pi.
2
toegevoegd
Om dat pigpio-script te gebruiken, moet je de pigpio-bibliotheek downloaden en installeren (zoals beschreven in abyz .co.uk/rpi/pigpio/download.html ) en start dan de pigpio-daemon (met sudo pigpiod).
toegevoegd de auteur joan, de bron
U hoeft alleen het download- en installatiedeel te doen. D.w.z. "wget ​​abyz.co.uk/rpi/pigpio/pigpio.zip;unzip pigpio.zip; cd PIGPIO; make; sudo make install". Het foobar.c-voorbeeld is een standaardmanier om te laten zien hoe u uw eigen C-code zou compileren.
toegevoegd de auteur joan, de bron
Trouwens, je originele script had moeten werken als je het script oproept met sudo python script.py of sudo idle terwijl je bezig was.
toegevoegd de auteur joan, de bron
Wat je zegt zou moeten werken, maar alleen omdat GPIO 2 (pin 3) een pull-up naar 3V3 heeft. Elke keer dat u die GPIO verbindt met aarde en ontgrendeling, moet u één puls registreren. Weet je zeker dat je de juiste GPIO gebruikt? Voer als eenvoudige test varkens 2 1000 in. Dat zal 50 pulsen per seconde naar GPIO 2 sturen. Gebruik varkens 2 0 om de pulsen te stoppen.
toegevoegd de auteur joan, de bron
Ik weet niet waar je je GPIO-nummers vandaan haalt, maar ze hebben het mis. Zie pinout.xyz . Ik heb de tabel die ik gebruik aan mijn antwoord toegevoegd.
toegevoegd de auteur joan, de bron
Raak de twee draden niet alleen aan. Het zal net zoiets zijn als switch bounce, je krijgt binnen een paar milliseconden veel make/breaks. Gebruik PWM om de software te testen, deze stuitert niet willekeurig heen en weer.
toegevoegd de auteur joan, de bron
Als u mechanische schakelaars gebruikt, moet u mogelijk de bounce van de schakelaar filteren. Je kunt dat doen met pigpio door een glitch-filter in te stellen op de GPIO. Het filter negeert randen minder dan een opgegeven lengte. Zie set_glitch_filter . Bijv. voeg pi.set_glitch_filter (REV_GPIO, 1000) toe in de code na de regel pi = pigpio.pi (). Dit filter filtert alle randen korter dan een milliseconde (1000 microseconden).
toegevoegd de auteur joan, de bron
Wanneer ik het in Python 2.7.9 gebruik, staat er een importfout: Geen module met de naam PIGPIO (ik heb het gedownload en het staat daar) en als ik het in Python 3.4.2 gebruik, staat er Naamfout: naam 'pigpio' is niet gedefinieerd (verwijzend naar naar regel 9) Ik heb pigpio.py geprobeerd maar krijg nog steeds dezelfde fout
toegevoegd de auteur Amadeus, de bron
Wanneer ik foorbar.c probeer te compileren, te linken en uit te voeren, krijg ik een foutmelding: No such such file of directory
toegevoegd de auteur Amadeus, de bron
Bedankt, het script werkt nu, maar wanneer je de twee draden aanraakt, gebeurt er niets, het blijft nog steeds draaien. RPM is 0. Op dit moment heb ik een draad van GPIO 2 en een andere komt van Ground en raakte toen de twee samen. Is dit hoe het verondersteld wordt verbonden te zijn. (sorry dat het mijn eerste Pi en Python project is)
toegevoegd de auteur Amadeus, de bron
Ik gebruik R-Pi 1e gen Model B en GPIO 2 is pin 13. Ik merkte dat toen ik pin 3 met aarde verbond, het wel een waarde produceerde, maar het was niet het aantal keren dat het circuit in een seconde werd gesloten (Ik veranderde de slaapwaarde) het gaf getallen in dubbele cijfers weer
toegevoegd de auteur Amadeus, de bron
Het lijkt 'goed' te werken. Ik verbond het met Pin 3 en de andere met aarde, maar de cijfers die ik krijg kloppen niet echt, ze zijn veel te hoog en variëren van 1 tot 1000+, hoewel het circuit 1X.sec wordt verbonden dus het zou ongeveer 60 tpm moeten zijn. Ook als ik het circuit sneller sloot en openmaakte, leek het de output niet te beïnvloeden. Ik heb net de draad van pin 3 naar een willekeurig stuk metaal (pen) geraakt en ik kreeg een lezing van 1880, enig idee waarom dit gebeurt?
toegevoegd de auteur Amadeus, de bron
Heel erg bedankt! ik probeerde een paar verschillende schakelaars en nu zijn de outputwaarden correct.
toegevoegd de auteur Amadeus, de bron