Forum: Mikrocontroller und Digitale Elektronik Importierte Funktionen werden nicht ausgeführt Python


von Kevin B. (kevin_b502)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen

ich habe folgendes Problem: im einen File (LCD_Config) habe ich zur 
Konfiguration eines LCD Displays folgenden Code:
1
from machine import Pin,SPI,PWM
2
import framebuf
3
import time
4
5
#color is BGR
6
RED = 0x00F8
7
GREEN = 0xE007
8
BLUE = 0x1F00
9
WHITE = 0xFFFF
10
BLACK = 0x0000
11
12
class LCD_0inch96(framebuf.FrameBuffer):
13
    def __init__(self):
14
    
15
        self.width = 160
16
        self.height = 80
17
        
18
        self.cs = Pin(9,Pin.OUT)
19
        self.rst = Pin(12,Pin.OUT)
20
#        self.bl = Pin(13,Pin.OUT)
21
        self.cs(1)
22
        # pwm = PWM(Pin(13))#BL
23
        # pwm.freq(1000)        
24
        self.spi = SPI(1)
25
        self.spi = SPI(1,1000_000)
26
        self.spi = SPI(1,10000_000,polarity=0, phase=0,sck=Pin(10),mosi=Pin(11),miso=None)
27
        self.dc = Pin(8,Pin.OUT)
28
        self.dc(1)
29
        self.buffer = bytearray(self.height * self.width * 2)
30
        super().__init__(self.buffer, self.width, self.height, framebuf.RGB565)
31
        self.Init()
32
        self.SetWindows(0, 0, self.width-1, self.height-1)
33
        
34
    def reset(self):
35
        self.rst(1)
36
        time.sleep(0.2) 
37
        self.rst(0)
38
        time.sleep(0.2)         
39
        self.rst(1)
40
        time.sleep(0.2) 
41
        
42
    def write_cmd(self, cmd):
43
        self.dc(0)
44
        self.cs(0)
45
        self.spi.write(bytearray([cmd]))
46
47
    def write_data(self, buf):
48
        self.dc(1)
49
        self.cs(0)
50
        self.spi.write(bytearray([buf]))
51
        self.cs(1)
52
53
    def backlight(self,value):#value:  min:0  max:1000
54
        pwm = PWM(Pin(13))#BL
55
        pwm.freq(1000)
56
        if value>=1000:
57
            value=1000
58
        data=int (value*65536/1000)       
59
        pwm.duty_u16(data)  
60
        
61
    def Init(self):
62
        self.reset() 
63
        self.backlight(10000)  
64
        
65
        self.write_cmd(0x11)
66
        time.sleep(0.12)
67
        self.write_cmd(0x21) 
68
        self.write_cmd(0x21) 
69
70
        self.write_cmd(0xB1) 
71
        self.write_data(0x05)
72
        self.write_data(0x3A)
73
        self.write_data(0x3A)
74
75
        self.write_cmd(0xB2)
76
        self.write_data(0x05)
77
        self.write_data(0x3A)
78
        self.write_data(0x3A)
79
80
        self.write_cmd(0xB3) 
81
        self.write_data(0x05)  
82
        self.write_data(0x3A)
83
        self.write_data(0x3A)
84
        self.write_data(0x05)
85
        self.write_data(0x3A)
86
        self.write_data(0x3A)
87
88
        self.write_cmd(0xB4)
89
        self.write_data(0x03)
90
91
        self.write_cmd(0xC0)
92
        self.write_data(0x62)
93
        self.write_data(0x02)
94
        self.write_data(0x04)
95
96
        self.write_cmd(0xC1)
97
        self.write_data(0xC0)
98
99
        self.write_cmd(0xC2)
100
        self.write_data(0x0D)
101
        self.write_data(0x00)
102
103
        self.write_cmd(0xC3)
104
        self.write_data(0x8D)
105
        self.write_data(0x6A)   
106
107
        self.write_cmd(0xC4)
108
        self.write_data(0x8D) 
109
        self.write_data(0xEE) 
110
111
        self.write_cmd(0xC5)
112
        self.write_data(0x0E)    
113
114
        self.write_cmd(0xE0)
115
        self.write_data(0x10)
116
        self.write_data(0x0E)
117
        self.write_data(0x02)
118
        self.write_data(0x03)
119
        self.write_data(0x0E)
120
        self.write_data(0x07)
121
        self.write_data(0x02)
122
        self.write_data(0x07)
123
        self.write_data(0x0A)
124
        self.write_data(0x12)
125
        self.write_data(0x27)
126
        self.write_data(0x37)
127
        self.write_data(0x00)
128
        self.write_data(0x0D)
129
        self.write_data(0x0E)
130
        self.write_data(0x10)
131
132
        self.write_cmd(0xE1)
133
        self.write_data(0x10)
134
        self.write_data(0x0E)
135
        self.write_data(0x03)
136
        self.write_data(0x03)
137
        self.write_data(0x0F)
138
        self.write_data(0x06)
139
        self.write_data(0x02)
140
        self.write_data(0x08)
141
        self.write_data(0x0A)
142
        self.write_data(0x13)
143
        self.write_data(0x26)
144
        self.write_data(0x36)
145
        self.write_data(0x00)
146
        self.write_data(0x0D)
147
        self.write_data(0x0E)
148
        self.write_data(0x10)
149
150
        self.write_cmd(0x3A) 
151
        self.write_data(0x05)
152
153
        self.write_cmd(0x36)
154
        self.write_data(0xA8)
155
156
        self.write_cmd(0x29) 
157
        
158
    def SetWindows(self, Xstart, Ystart, Xend, Yend):#example max:0,0,159,79
159
        Xstart=Xstart+1
160
        Xend=Xend+1
161
        Ystart=Ystart+26
162
        Yend=Yend+26
163
        self.write_cmd(0x2A)
164
        self.write_data(0x00)              
165
        self.write_data(Xstart)      
166
        self.write_data(0x00)              
167
        self.write_data(Xend) 
168
169
        self.write_cmd(0x2B)
170
        self.write_data(0x00)
171
        self.write_data(Ystart)
172
        self.write_data(0x00)
173
        self.write_data(Yend)
174
175
        self.write_cmd(0x2C) 
176
        
177
    def display(self):
178
    
179
        self.SetWindows(0,0,self.width-1,self.height-1)       
180
        self.dc(1)
181
        self.cs(0)
182
        self.spi.write(self.buffer)
183
        self.cs(1)
184
185
if __name__=='__main__':
186
    lcd = LCD_0inch96()
187
    lcd.fill(BLACK)   
188
    lcd.text("Hello dude!",35,15,BLUE)
189
    lcd.text("This is:",50,35,BLUE)    
190
    lcd.text("Pico-LCD-0.96",30,55,BLUE)
191
    lcd.display()

Im Main file (unten) möchte ich zuerst auf diesen Code zugreifen durch 
import LCD_Config, um dann auf dessen Funktionen zuzugreifen. Allerdings 
findet er die Funktionen nicht. (Im Anhang die Fehlermeldung)
1
import LCD_Config
2
3
lcd = LCD_0inch96()
4
lcd.fill(BLACK)   
5
lcd.text("Hello dude!",35,15,BLUE)
6
lcd.text("This is:",50,35,BLUE)    
7
lcd.text("Pico-LCD-0.96",30,55,BLUE)
8
lcd.display()

: Verschoben durch Moderator
von Sebastian (Gast)


Lesenswert?

LCD_0inch96 ist nicht global sondern nur innerhalb von LCD_Config 
definiert.

LG, Sebastian

von Kevin B. (kevin_b502)


Lesenswert?

& wie kann ich dann von einem anderen Skript darauf zugreiffen?

von Holger (Gast)


Lesenswert?

Kevin B. schrieb:
> & wie kann ich dann von einem anderen Skript darauf zugreiffen?

from LCD_Config import LCD_0inch96

sollte helfen

von Sauron (Gast)


Lesenswert?

from

Kevin B. schrieb:
> import LCD_Config

geraten:

from LCD_config import *

von Sebastian (Gast)


Lesenswert?

Kevin B. schrieb:
> & wie kann ich dann von einem anderen Skript darauf zugreiffen?

Entweder indem du die Klasse aus dem Modul importierst, so wie von den 
anderen Forenten beschrieben, oder indem du über den Modulnamen gehst, 
also als LCD_Config.LCD_0inch96 notierst. Das ist alles im Detail unter 
https://docs.python.org/3/reference/executionmodel.html#naming-and-binding 
beschrieben.

Hättest du aber nach meiner obigen Hilfe auch selbst rausfinden können 
...

LG, Sebastian

von Karl Käfer (Gast)


Lesenswert?

Kevin B. schrieb:
> ich habe folgendes Problem: im einen File (LCD_Config)

Die Datei heißt hoffentlich nicht "LCD_Config", sondern "LCD_Config.py", 
oder? ;-)

>
1
> import LCD_Config
2
> 
3
> lcd = LCD_0inch96()
4
>

Dieser Code importiert das Modul LCD_Config, aber dessen Elemente lassen 
sich nur über den importierten Modulnamen ansprechen, also so:
1
import LCD_Config
2
3
lcd = LCD_Config.LCD_0inch96()

Die andere Alternative ist, bestimmte Namen (wie hier "LCD_0inch96") aus 
Deinem Modul "LCD_Config" zu importieren, dann kannst Du die 
importierten Namen direkt (also ohne Modulnamen) benutzen:
1
from LCD_Config import LCD_0inch96
2
3
lcd = LCD_0inch96()

Eine dritte und unter Umständen elegantere Möglichkeit wäre, die 
importierten Namen mit einem Aliasnamen zu versehen und dann das Alias 
zu benutzen:
1
from LCD_Config import LCD_0inch96 as Display
2
3
lcd = Display()

HTH, YMMV. ;-)

von Karl Käfer (Gast)


Lesenswert?

Sauron schrieb:
> from LCD_config import *

Diese Methode funktioniert zwar, aber fortgeschrittene Entwickler machen 
so etwas lieber nicht. Einerseits verstößt sie gegen PEP 20, also das 
"Zen of Python" [1], andererseits kann dann am Ende niemand mehr ohne 
größere Klimmzüge nachvollziehen, woher die verwendeten Symbole jeweils 
kommen.

[1] https://peps.python.org/pep-0020/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.