2016-05-18 1 views
0

Voici quelques mon code: (classe principale)auto '/ classess sur RPi

import RPi.GPIO as GPIO 
    import os 
    import pigpio 
    import subprocess 
    from time import sleep 
    GPIO.setmode(GPIO.BCM) 
    GPIO.setwarnings(False) 
    pigpio.exceptions = False 
    pi = pigpio.pi() 


    class FORWARD(object): 
      def __init__(self): 
        self.GPIO = GPIO 
        self.GPIO_TRIGGER = GPIO_TRIGGER 
        self.GPIO_ECHO = GPIO_ECHO 


      def setup(): 
        ENGA = 4 
        ENGB = 17 
        ENABLEA = 23 
        ENABLEB = 24 
        GPIO.setup(ENGA, GPIO.OUT) 
        GPIO.setup(ENGB, GPIO.OUT) 
        GPIO.setup(ENABLEA, GPIO.OUT) 
        GPIO.setup(ENABLEB, GPIO.OUT) 
        GPIO_TRIGGER = 14 
        GPIO_ECHO = 11 


      def frwd(self): 
        GPIO.setup(GPIO_TRIGGER, GPIO.OUT) 
        GPIO.setup(GPIO_ECHO, GPIO.OUT) 
        GPIO.output(ENABLEB, True) 
        GPIO.output(ENABLEA, True) 
        GPIO.output(ENGA, False) 
        GPIO.output(ENGB, False) 

et sec. fichier:

from ctrl import FORWARD 
    run = FORWARD() 
    run.setup() 
    run.frwd() 

Et voici ma question: Pourquoi cela ne fonctionne pas? Je reçois l'erreur avec les noms globaux:

Traceback (most recent call last): 
    File "go.py", line 2, in <module> 
    run = FORWARD() 
    File "/root/ctrl.py", line 22, in __init__ 
    self.GPIO_TRIGGER = GPIO_TRIGGER 
    NameError: global name 'GPIO_TRIGGER' is not defined 

Mon point est - je veux juste faire une fonction « setup » dans lequel je définirai sorties PINS et GPIO, alors je veux définir plusieurs méthodes (par exemple - arrière, arrêt, etc.). Alors, qu'en est-il de ces selfs ou comment devrait-il écrire?

Cordialement, Maciej

Répondre

0

Vous devriez lire le tutoriel Python sur les classes. https://docs.python.org/2/tutorial/classes.html

Le premier argument de chaque méthode d'une classe est une instance de cette classe. C'est une convention de se référer à cette variable comme self. Donc, votre méthode setup devrait vraiment avoir self comme argument.

L'erreur spécifique que vous recevez est la ligne:

self.GPIO_TRIGGER = GPIO_TRIGGER 

Vous essayez de définir la propriété GPIO_TRIGGER de l'instance à la GPIO_TRIGGER variable. Toutefois, le GPIO_TRIGGER n'a pas été défini dans la portée que la classe est définie. c'est-à-dire que vous ne l'avez pas défini nulle part et que vous ne l'avez pas importé d'ailleurs. Vous aurez des problèmes similaires avec GPIO_ECHO.

Vous devez probablement définir ces variables vous-même, par ex.

GPIO_TRIGGER = 7 
GPIO_ECHO = 8 

Ajustez en conséquence aux broches que vous utilisez.