User:Wordfa/oldphonehack/PTT Tafeltjes Telefoon

From XPUB & Lens-Based wiki

Dutch vers:

https://github.com/ralphcrutzen/PTT-Tafeltjes-Telefoon/blob/master/t65.py

Ralph Crutzen's PTT Tafeltjes Telefoon Eng translation

#!/usr/bin/env python
import sys, os, time, random, pygame
import RPi.GPIO as GPIO

# translated to english by DeepL and wordfa

# Speaker Function - Play Sound
# Takes a file Path
def say(file):
    pygame.mixer.music.load(file)
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy() == True:
        continue

# Ask Question for Telefone Letter
def askQuestion(numOne, numTwo):
    print("Wat is", numOne, "x", numTwo,"?")
    say("audio/" + str(numOne) + ".mp3")
    say("audio/keer.mp3")
    say("audio/" + str(numTwo) + ".mp3")
    say("audio/is.mp3")

def getNummer():
    # number of Pulses
    nPulsen = 0
    # Watch Dail or Button
    DialContact = GPIO.input(DialPIN)
    NumberContact = GPIO.input(NumberPIN) # Low if pressed
    while DialContact == False and NumberContact == True:
        DialContact = GPIO.input(DialPIN)
        NumberContact = GPIO.input(NumberPIN)
    # Number Pressed (Selected)
    if NumberContact == False:
        return -1

    # Handle Pulses
    done = False
    while done == False and DialContact == True:
        nPulsen = nPulsen + 1
        startTime = time.time()
        time.sleep(0.1)
        DialContact = GPIO.input(DialPIN)
        # Check time between Pulses
        while done == False and DialContact == False:
            if time.time() - startTime >= 0.2:
                done = True
            DialContact = GPIO.input(DialPIN)
    # Return number
    return nPulsen % 10

    # Tell you when handset is picked up
def handsetCallback(channel):
    print("Handset picked up!", channel)
    # Restart Script
    # Set Up all the IO Stuff
    GPIO.cleanup()
    python = sys.executable
    os.execl(python, python, * sys.argv)

# Name pins
DialPIN = 25
NumberPIN = 23
handsetPIN = 24

# Set Up Pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(DialPIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(handsetPIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(NumberPIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)

# Use an interrupt for the handset, because it can be put down at any time
GPIO.add_event_detect(handsetPIN, GPIO.BOTH, callback = handsetCallback)

# Start audio mixer
pygame.mixer.init()

while True:
    try:
        # Wait for pick up
        print("Wait for pick up...")
        handsetContact = GPIO.input(handsetPIN)
        while handsetContact == True:
            handsetContact = GPIO.input(handsetPIN)
        time.sleep (1)

        # Which times table to practise
        print("Which times table to practise?")
        say("audio/welk.mp3")
        table = getNummer()

        # List to keep track of answered questions
        sums = []
        for som in range(10):
            sums.append(0) # 0 is bad, 1 is goed
        numOfCorrectAns = 0

        while numOfCorrectAns < 10:
            # Set Question?
            numOne = random.randint(1,10)
            while sums[numOne - 1] == 1:
                numOne = random.randint(1,10)

            if table == -1:
                numTwo = random.randint(1,10)
            elif table == 0:
                numTwo = 10
            else:
                numTwo = table
            result = numOne * numTwo
            numOfDigits = len(str(result))

            askQuestion(numOne, numTwo)
            thisDigit = 0
            answer = ""

            # Watch for Answer
            while thisDigit < numOfDigits:
                nummer = getNummer()
                if nummer > -1: # Dial Turned
                    answer = answer + str(nummer)
                    thisDigit = thisDigit + 1
                else: # Number Key Pressed
                    askQuestion(numOne, numTwo)
                    thisDigit = 0
                    answer = ""

            print(answer)

            # Check Answer
            # string to Int Answer
            if int(answer) == result:
                numOfCorrectAns = numOfCorrectAns + 1
                sums[numOne - 1] = 1
                print("Good Job!")
                say("audio/goed.mp3")
            else:
                print("You suck, the correct answer is ", result)
                say("audio/fout.mp3")
                say("audio/" + str(result) + ".mp3")
            print()
            time.sleep(1)
        say("audio/einde.mp3")
    except KeyboardInterrupt: # Ctrl+C
        GPIO.cleanup()