Micropython écriture marche pas
bonjour, j'ai un petit soucil, j'ai un raspberry pi pico sur micropython et je suis en train de faire un OS de console desus.
Dans un fichier main.py, il y'a un code qui par rapport au chiffre qu'il y'a dans le fichier whatdo.txt ouvre un fichier python précis.
Tout fonctionne très bien, lors que je met par exemple le chiffre 3 dans whatdo.txt il ouvre g3.py, lors que je met 2 dans whatdo.txt il ouvre g2.py etc...
Mais quand je modifie la donnée de whatdo.txt via le fichier g1.py (ce qui est le cas), il change pas la valeur de whatdo.txt et me retourne 1 dans le terminal. pourquoi ?
Main.py:
print("test")
game = open("whatdo.txt", "r")
gamen = game.read()
gamestr = str(gamen)
gameint = int(gamestr)
print(gameint)
if gameint == 0:
print("menu!")
import menu
if gameint == 1:
print("ok")
from games import g1
if gameint == 2:
from games import g2
if gameint == 3:
from games import g3
g1.py:
f = open("whatdo.txt", "w")
f.write("0")
f.close()
#===== SECUR ZONE ======
pass1 = "X"
pass2 = "B"
pass3 = "Y"
pass4 = "B"
randoms = 0
times = 0
timeinsec = 0
gameover = False
playerx = 0
playery = 0
#===== START CONFIG ZONE ======
from machine import Pin,SPI,PWM
import framebuf
import time
import os
import gc
import machine
#== autre import
import random
import math
import sys
BL = 13
DC = 8
RST = 12
MOSI = 11
SCK = 10
CS = 9
class LCD_1inch3(framebuf.FrameBuffer):
def __init__(self):
self.width = 240
self.height = 240
self.cs = Pin(CS,Pin.OUT)
self.rst = Pin(RST,Pin.OUT)
self.cs(1)
self.spi = SPI(1)
self.spi = SPI(1,1000_000)
self.spi = SPI(1,100000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None)
self.dc = Pin(DC,Pin.OUT)
self.dc(1)
self.buffer = bytearray(self.height * self.width * 2)
super().__init__(self.buffer, self.width, self.height, framebuf.RGB565)
self.init_display()
self.cyan = 0x0f0f
self.black = 0x0000
self.red = 0x07E0
self.green = 0x001f
self.blue = 0xf800
self.white = 0xffff
self.yellow = 0x07FF
def write_cmd(self, cmd):
self.cs(1)
self.dc(0)
self.cs(0)
self.spi.write(bytearray([cmd]))
self.cs(1)
def write_data(self, buf):
self.cs(1)
self.dc(1)
self.cs(0)
self.spi.write(bytearray([buf]))
self.cs(1)
def init_display(self):
"""Initialize dispaly"""
self.rst(1)
self.rst(0)
self.rst(1)
self.write_cmd(0x36)
self.write_data(0x70)
self.write_cmd(0x3A)
self.write_data(0x05)
self.write_cmd(0xB2)
self.write_data(0x0C)
self.write_data(0x0C)
self.write_data(0x00)
self.write_data(0x33)
self.write_data(0x33)
self.write_cmd(0xB7)
self.write_data(0x35)
self.write_cmd(0xBB)
self.write_data(0x19)
self.write_cmd(0xC0)
self.write_data(0x2C)
self.write_cmd(0xC2)
self.write_data(0x01)
self.write_cmd(0xC3)
self.write_data(0x12)
self.write_cmd(0xC4)
self.write_data(0x20)
self.write_cmd(0xC6)
self.write_data(0x0F)
self.write_cmd(0xD0)
self.write_data(0xA4)
self.write_data(0xA1)
self.write_cmd(0xE0)
self.write_data(0xD0)
self.write_data(0x04)
self.write_data(0x0D)
self.write_data(0x11)
self.write_data(0x13)
self.write_data(0x2B)
self.write_data(0x3F)
self.write_data(0x54)
self.write_data(0x4C)
self.write_data(0x18)
self.write_data(0x0D)
self.write_data(0x0B)
self.write_data(0x1F)
self.write_data(0x23)
self.write_cmd(0xE1)
self.write_data(0xD0)
self.write_data(0x04)
self.write_data(0x0C)
self.write_data(0x11)
self.write_data(0x13)
self.write_data(0x2C)
self.write_data(0x3F)
self.write_data(0x44)
self.write_data(0x51)
self.write_data(0x2F)
self.write_data(0x1F)
self.write_data(0x1F)
self.write_data(0x20)
self.write_data(0x23)
self.write_cmd(0x21)
self.write_cmd(0x11)
self.write_cmd(0x29)
def show(self):
self.write_cmd(0x2A)
self.write_data(0x00)
self.write_data(0x00)
self.write_data(0x00)
self.write_data(0xef)
self.write_cmd(0x2B)
self.write_data(0x00)
self.write_data(0x00)
self.write_data(0x00)
self.write_data(0xEF)
self.write_cmd(0x2C)
self.cs(1)
self.dc(1)
self.cs(0)
self.spi.write(self.buffer)
self.cs(1)
if True:
pwm = PWM(Pin(BL))
pwm.freq(1000)
pwm.duty_u16(32768)#max 65535
LCD = LCD_1inch3()
#color BRG
def circle(x,y,r,c):
LCD.hline(x-r,y,r*2,c)
for i in range(1,r):
a = int(math.sqrt(r*r-i*i)) # Pythagoras!
LCD.hline(x-a,y+i,a*2,c) # Lower half
LCD.hline(x-a,y-i,a*2,c) # Upper half
def ring(x,y,r,c):
LCD.pixel(x-r,y,c)
LCD.pixel(x+r,y,c)
LCD.pixel(x,y-r,c)
LCD.pixel(x,y+r,c)
LCD.show()
keyA = Pin(15,Pin.IN,Pin.PULL_UP)
keyB = Pin(17,Pin.IN,Pin.PULL_UP)
keyX = Pin(19 ,Pin.IN,Pin.PULL_UP)
keyY= Pin(21 ,Pin.IN,Pin.PULL_UP)
up = Pin(2,Pin.IN,Pin.PULL_UP)
dowm = Pin(18,Pin.IN,Pin.PULL_UP)
left = Pin(16,Pin.IN,Pin.PULL_UP)
right = Pin(20,Pin.IN,Pin.PULL_UP)
ctrl = Pin(3,Pin.IN,Pin.PULL_UP)
#===== END CONFIG ZONE ======
while True:
if(keyA.value() == 0):
f = open("whatdo.txt", "w")
f.write("0")
f.close()
machine.reset()
Pouriez vous m'aider SVP ?
- Micropython écriture marche pas
- Écriture facebook - Guide
- Ecriture en gras - Guide
- Ecriture instagram - Guide
- Écriture à l'envers miroir - Guide
- Ecriture predictive - Guide
1 réponse
Bonjour,
Je n'ai pas trop compris l'intérêt de maintenir dans whatdo.txt ce que tu pourrais faire en ayant simplement cet entier (quitte à l'initialiser à partir de whatdo.txt et à rafraîchir whatdo.txt quand tu quittes).
De plus, il est un peu étrange de faire des imports conditionnés par le contenu du fichier. Normalement, chacun de tes fichiers g1, g2, g3 devraient avoir un point d'entrée (c'est à dire une fonction qui correspond au programme principal, disons main)
Enfin, il serait plus propre de lire ton fichier avec le context manager with.
g1.py
def main():
print("G1")
g2.py
def main():
print("G1")
g3.py
def main():
print("G3")
main.py
from g1 import main as main_g1
from g2 import main as main_g2
from g3 import main as main_g3
# Charger i à partir de "whatdo.txt" s'il existe
i = None
try:
with open("whatdo.txt", "r") as f:
i = int(f.read())
print(f"i = {i} chargé à partir de whatdo.txt")
except:
pass
while True:
while i is None:
i = int(input("Saisir i [1=g1, 2=g2, 3=g4, 0=quit]: "))
if i == 0:
break
elif i == 1:
main_g1()
elif i == 2:
main_g2()
elif i == 3:
main_g3()
# Sauver i dans "whatdo.txt"
with open("whatdo.txt", "w") as f:
print(i, file=f)
i = None
Exemple :
(mando@silk) (~) $ python3 main.py
Saisir i [1=g1, 2=g2, 3=g4, 0=quit]: 1
G1
Saisir i [1=g1, 2=g2, 3=g4, 0=quit]: 2
G2
Saisir i [1=g1, 2=g2, 3=g4, 0=quit]: 3
G3
Saisir i [1=g1, 2=g2, 3=g4, 0=quit]: 4
Saisir i [1=g1, 2=g2, 3=g4, 0=quit]: 0
Bonne chance