Skip to content

Commit

Permalink
V1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
corentindrd committed Jun 22, 2022
1 parent 86d3682 commit 251a882
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 42 deletions.
33 changes: 26 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,42 @@ Fonctionnement:
- Interface graphique pour supporter tkinter
- Carte IN OUT Piface Digital 2
***
# Prérequis
- Raspeberry PI 4 (2,4,8G)

## ⚠️ Important
Le programme fonctionne seulement si la carte PiFace est bien détectée par le raspberry (automatique dans le programme)
***
## Prérequis
- Raspberry PI 4 (2,4,8G)
- PiFace digital 2
- Carte SD
- Alimentation Raspberry
- Ecran avec entrée HDMI
- Ecran 16:9 avec entrée HDMI
- Cable HDMI
- Raspberry Imager (https://www.raspberrypi.com/software/)
- Raspberry Imager ([Téléchargement](https://www.raspberrypi.com/software/))
***
# INSTALLATION
## INSTALLATION

- Flasher Raspian Desktop sur la carte SD avec Raspberry Imager
- Flasher Raspbian Desktop sur la carte SD avec Raspberry Imager
- Mettre à jour le raspberry (`sudo apt-get update & sudo apt-get upgrade -y`)
- Installation des libraries requises
- Python3
- Piface
- PiFace
***
# CHANGELOG
### V1.1
#### **Principaux ajouts:**
- La latence entre les secondes de l'heure et les secondes s'affichant en jaune à été réduit.
- Le titre ONAIR se place automatiquement en haut en fonction de la taille de l'écran.
- Le chronomètre se place automatiquement en bas en fonction de la taille de l'écran.
- L'horloge ce met au centre en fonction de la taille de l'écran.
#### **Améliorations:**
- Nettoyage du code sur les fonctions de créations (chronomètre et titres).
- La fonction "chrono.pack" dans le système de réception de trame TCP a été enlevée car le chrono est déjà initialisé au début du programme.
- Suppression de la variable "msgserver" qui ne servait à rien.
- Suppression de la police de l'heure qui était en gras vers une police normale.

### V1.0
- Programme initial

***

Expand Down
86 changes: 51 additions & 35 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from datetime import datetime
from tkinter import *

#fonction start chrono
# fonction start chrono
def start_chronometer(h=0, m=0, s=0):
global process
try:
Expand Down Expand Up @@ -38,15 +38,15 @@ def start_chronometer(h=0, m=0, s=0):
chrono['text'] = hourss + ":" + minss + ":" + secss
process = chrono.after(1000, start_chronometer, h, m, (s + 1))

#fonction stop chrono
# fonction stop chrono
def stop_chronometer():
try:
global process
chrono.after_cancel(process)
except:
pass

#fonction pause chrono
# fonction pause chrono
def resume_chronometer():
try:
global process
Expand All @@ -58,15 +58,15 @@ def resume_chronometer():
except:
pass

#fonction heure
# fonction heure
def clock():

C.delete("clock")
C.create_text(width / 2, width / 2, font=("ds-digital", 50, 'bold'), text=datetime.now().strftime("%H:%M:%S"),fill="#0003FF", tags="clock")
C.create_text(width / 2, width / 2, font=("ds-digital", clock_size), text=datetime.now().strftime("%H:%M:%S"),fill="#0003FF", tags="clock")
time.sleep(0.6)

#fonction création secondes
# fonction création secondes
def trigo():
root.after(380)
second = datetime.now().second

if second == 0:
Expand All @@ -83,14 +83,15 @@ def trigo():
x2 = int(x) + 5
y2 = int(y) + 5
C.create_oval(x1, y1, x2, y2, fill='#FFAA00', tags="second")
C.pack()
#fonction start secondes + heure
C.place(relx=0.5, rely=0.5, anchor=CENTER)

# fonction start secondes + heure
def second():
while True:
clock()
trigo()

#fonctio input piface raspberry
# fonctio input piface raspberry
def piface_read():
while True:
if p.digital_read(0) == 1:
Expand All @@ -106,72 +107,88 @@ def piface_read():
sock.send(bytes("9996,0\r\n", "UTF-8"))
time.sleep(0.3)

#fonction serveur tcp
# fonction serveur tcp
def onair():
global connected
global sock
global title
while True:
try:
if connected is False:
sock.connect(('192.168.2.166', 65432))
sock.connect(('192.168.1.86', 65432))
print("Connexion au serveur réussie")
message = sock.recv(1024).decode("UTF-8")
if message.find("10,1") != -1:
stop_chronometer()
start_chronometer()
chrono.pack()
p.digital_write(0, 1)
title.config(text="ON AIR", font=("Avenir-Black", 300), bg='#ff0000', fg='white', anchor=CENTER)
title.config(text="ON AIR", font=("Avenir-Black", title_size), bg='#ff0000', fg='white')
elif message.find("10,0") != -1:
stop_chronometer()
p.digital_write(0, 0)
title.config(text="ON AIR", font=("Avenir-Black", 300), bg='#4D0000', fg='black', anchor=CENTER)
title.config(text="ON AIR", font=("Avenir-Black", title_size), bg='#4D0000', fg='black')

except socket.error:
connected = False
sock = socket.socket()
print("Connexion perdue... reconnexion")
while not connected:
try:
sock.connect(('192.168.2.166', 65432))
sock.connect(('192.168.1.86', 65432))
connected = True
print("Re-connexion réussie")
except socket.error:
time.sleep(0.5)
sock.close()


#init
# init
p.init()

root = Tk()
root.title("On Air interface")
root.geometry("640x480")
root.config(background='#000000')
root.attributes("-fullscreen", True)

title = Label(root, text="ON AIR", font=("Avenir-Black", 300), bg='#4D0000', fg='black', anchor=CENTER)
title.config(anchor=CENTER)
title.pack()
# récupère les informations de l'écran pour mettre à niveau
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
screen_resolution = str(screen_width) + 'x' + str(screen_height)

msgserver = "10,0"
width = 300
#initialisation des variables écran 1920x1080
title_size = int(172 * screen_width / 1920)
chrono_size = int(142 * screen_width / 1920)
canvas_size = int(500 * screen_width / 1920)
clock_size = int(80 * screen_width / 1920)
width = int(557 * screen_width / 1920)

#initialisation des variables générales
rayon = width / 2
process = 0
connected = True

#création de l'interface tkinter
root.title("On Air interface")
root.geometry(screen_resolution)
root.config(background='#000000000')
root.attributes("-fullscreen", True)

#création du ONAIR
title = Label(root, text="ON AIR", font=("Avenir-Black", title_size), bg='#4D0000', fg='black')
title.place(relx=0.5, rely=0.12, anchor=CENTER)

#création du canvas
C = Canvas(root, bg="black", height=width, width=width, highlightthickness=0)

chrono = Label(root, fg='white', bg='black', font=("Avenir-Black", 50))
#création du chrono
chrono = Label(root, fg='white', bg='black', font=("Avenir-Black", chrono_size))
chrono['text'] = "00:00:00"
chrono.place(relx=0.5, rely=0.9, anchor=CENTER)

#création des threads
th1 = threading.Thread(target=onair)
th2 = threading.Thread(target=second)
th3 = threading.Thread(target=piface_read)

#initialisation du client TCP
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#fonction trigo heures
for angle in range(0, 12):
angle = ((angle * 30) * math.pi) / 180
x = rayon + ((rayon * 0.90) * math.cos(angle))
Expand All @@ -181,14 +198,13 @@ def onair():
x2 = int(x) + 5
y2 = int(y) + 5
C.create_oval(x1, y1, x2, y2, fill='#0003FF')
C.pack()
chrono.pack()
C.place(relx=0.5, rely=0.5, anchor=CENTER)

C.create_oval(145, 25, 155, 35, fill='#FFAA00', tags="first")
#création de la première seconde
#C.create_oval(145, 25, 155, 35, fill='#FFAA00', tags="first")

th3.start()
#th3.start()
th1.start()
th2.start()


root.mainloop()
root.mainloop()

0 comments on commit 251a882

Please sign in to comment.