Importierte Funktionen werden nicht ausgeführt Python

OP #7282169
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()
Angehängte Dateien:
Gast #7282293
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
Gast #7282360
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. ;-)
Gast #7282367
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/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren