Esempio n. 1
0
def menu_scelta(menu_items, zerostart=False):
    """ riceve in ingresso una lista con le opzioni da stampare a video. La prima deve essere il titolo del menù e non è un opzione selezionabile dall'utente"""
    ripeti = True
    while ripeti:
        for i in range(20):
            print(" ")

        print("=======================")

        print(menu_items[0])
        for i in range(1, len(menu_items), 2):
            if (zerostart == True):
                if (menu_items[i] == ""):
                    zerostart = True
                else:
                    if (i < len(menu_items) - 1):
                        print(" ", i - 1, "> ", menu_items[i], " ", i, "> ",
                              menu_items[i + 1])
                    else:
                        print(" ", i - 1, "> ", menu_items[i])
            else:
                if (menu_items[i] == ""):
                    zerostart = False
                else:
                    if (i < len(menu_items) - 1):
                        print(" ", i, "> ", menu_items[i], " ", i + 1, "> ",
                              menu_items[i + 1])
                    else:
                        print(" ", i, "> ", menu_items[i])
        print(" ")
        print(" ")
        scelta = input("Your choice> ")

        print("=======================")

        try:
            scelta_n = int(scelta)
        except ValueError:
            scelta_n = -1
            print('Please insert an integer number......')

        if (zerostart == True):
            if scelta_n in range(0, len(menu_items) - 1):
                ripeti = False
            else:
                print('Selection not valid')
                dormi(1)
        else:
            if scelta_n in range(1, len(menu_items)):
                ripeti = False
            else:
                print('Selection not valid')
                dormi(1)
    for i in range(30):
        print(" ")
    return scelta
def ScriviOut(db, ser):
    for i in range(20):
        print(" ")
    ripeti = True
    while ripeti:
        #numeroPin = (int(input("Quale PIN vuole scrivere? > ")))
        menu_scelta_pinNo = [
            "SELECTION OF PIN NUMBER WHERE YOU WANT TO WRITE OUTPUT", "D0",
            "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D10", "D11",
            "D12", "D13", "", "", "A0", "A1", "A2", "A3", "A4", "A5", "Cancel"
        ]
        numeroPin = int(menu_scelta(menu_scelta_pinNo, True))
        if not (((numeroPin >= 2) and (numeroPin <= 13)) or
                (((numeroPin >= 16)) and (numeroPin <= 22))):
            print("PIN number not valid!!!")
            dormi(2)
        else:
            ripeti = False
            if (numeroPin == len(menu_scelta_pinNo) - 2):
                return (0)
            ripeti_in = True
            while ripeti_in:
                try:
                    for i in range(30):
                        print(" ")
                    valore = (
                        input("What value you want to write [A=Cancel]? > "))
                    if str(valore).upper() == 'A':
                        ripeti = True
                        ripeti_in = False
                    else:
                        valore = int(valore)
                        ripeti_in = False
                except ValueError:
                    print('Please insert an integer number......')
                    ripeti_in = True

    if (((numeroPin >= 2) and (numeroPin <= 13))
            or (((numeroPin >= 16)) and (numeroPin <= 22))):
        answer = TryGetAnswer(ser, cmdScrivi, numeroPin, valore)
        print("ScriviOut ---- Err in aswer = ", answer[3],
              decodeErrCode(answer[3]))
        if not (decodeErrCode(answer[3]) == "OK"):
            answer = TryGetAnswer(ser, cmdLeggi, numeroPin, valore)
            ReadValue = int.from_bytes(answer[2], byteorder='big')
            print("Value on pin ", numeroPin, " is: ", ReadValue)
        else:
            ReadValue = int.from_bytes(answer[2], byteorder='big')
            print("Output value on pin ", numeroPin, " is: ", ReadValue)
        print("")
        input("----------[press ENTER to continue]-------------"
              )  #pausa riflessiva per mostrare output
        return (ReadValue)
    else:
        print("Pin number you enterd is not valid!!!")
        dormi(3)  #pausa riflessiva per mostrare messaggio di errore
        return (-1)

    dormi(1)
    return (0)
def SetPinMode(db, ser):
    for i in range(20):
        print("")
    ripeti = True
    while ripeti:
        menu_scelta_pinNo = [
            "SELECTION OF PIN NUMBER WHOSE MODE YOU WANT TO SET", "D0", "D1",
            "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D10", "D11",
            "D12", "D13", "", "", "A0", "A1", "A2", "A3", "A4", "A5", "Cancel"
        ]
        numeroPin = int(menu_scelta(menu_scelta_pinNo, True))
        if not ((((numeroPin >= 2) and (numeroPin <= 13)) or
                 ((numeroPin >= 16)) and (numeroPin <= 22))):
            print("PIN number not valid!!!")
            dormi(2)
        else:
            ripeti = False
            if (numeroPin == len(menu_scelta_pinNo) - 2):
                return (0)

            ripeti_in = True
            while ripeti_in:
                menu_scelta_modo = [
                    "SELECTION OF MODE FOR PIN: " + str(decodePinNo(numeroPin))
                ]
                for i in range(5):
                    menu_scelta_modo.append(decodeMode(i))
                menu_scelta_modo.append("Cancel")
                modo = int(menu_scelta(menu_scelta_modo, True))
                if (modo == len(menu_scelta_modo) - 2):
                    ripeti = True
                ripeti_in = False

    if ((numeroPin >= 2) and (numeroPin <= 13)) or ((numeroPin >= 16) and
                                                    (numeroPin <= 21)):
        answer = TryGetAnswer(ser, cmdImpostaModo, numeroPin, modo)
        if not (decodeErrCode(answer[3]) == "OK"):
            answer = TryGetAnswer(ser, cmdGetModo, numeroPin, 0)
            ReadValue = int.from_bytes(answer[2], byteorder='big')
            print("Mode of Pin ", numeroPin, " is set to: ",
                  decodeMode(ReadValue))
        else:
            ReadValue = int.from_bytes(answer[2], byteorder='big')
            print("Mode on pin ", numeroPin, " is set to: ",
                  decodeMode(ReadValue))

        print("")
        input("----------[press ENTER to continue]-------------"
              )  #pausa riflessiva per mostrare output
        return (ReadValue)
    else:
        print("PIN number you eneterd is not valid!!!")
        dormi(3)  #pausa riflessiva per mostrare messaggio di errore
        return (-1)

    dormi(1)
    return (0)
def LeggiIn(db, ser):
    for i in range(20):
        print("")

    ripeti = True
    while ripeti:
        menu_scelta_pinNo = [
            "SELECTION OF PIN NUMBER TO READ", "D0", "D1", "D2", "D3", "D4",
            "D5", "D6", "D7", "D8", "D9", "D10", "D11", "D12", "D13", "", "",
            "A0", "A1", "A2", "A3", "A4", "A5", "Cancel"
        ]
        numeroPinInt = int(menu_scelta(menu_scelta_pinNo, True))

        if not (((numeroPinInt >= 0) and (numeroPinInt <= 13)) or
                (((numeroPinInt >= 16)) and (numeroPinInt <= 22))):
            print("PIN number not valid!!!")
            dormi(2)
        else:
            ripeti = False
            if (numeroPinInt == len(menu_scelta_pinNo) - 2):
                return (0)

    if (((numeroPinInt >= 0) and (numeroPinInt <= 13))
            or ((numeroPinInt >= 16)) and (numeroPinInt <= 21)):
        answer = TryGetAnswer(ser, cmdLeggi, numeroPinInt, 0)
        print("LeggiDigIn ---- Err in aswer = ", answer[3],
              decodeErrCode(answer[3]))
        ReadValue = int.from_bytes(answer[2], byteorder='big')
        print("Input value on pin ", numeroPinInt, " is: ", ReadValue)
        print("")
        input("----------[press ENTER to continue]-------------"
              )  #pausa riflessiva per mostrare output
        return (ReadValue)
    else:
        print("Pin number not valid!!!")
        dormi(3)  #pausa riflessiva per mostrare messaggio di errore
        return (-1)
def GetPinMode(db, ser):
    for i in range(20):
        print("")

    ripeti = True
    while ripeti:
        menu_scelta_pinNo = [
            "SELECTION OF PIN NUMBER WHOSE MODE YOU WANT TO KNOW", "D0", "D1",
            "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D10", "D11",
            "D12", "D13", "", "", "A0", "A1", "A2", "A3", "A4", "A5", "Cancel"
        ]
        numeroPin = int(menu_scelta(menu_scelta_pinNo, True))
        if not (((numeroPin >= 0) and (numeroPin <= 13)) or
                ((numeroPin >= 16) and (numeroPin <= 22))):
            print("PIN number not valid!!!")
            dormi(2)
        else:
            ripeti = False
            if (numeroPin == len(menu_scelta_pinNo) - 2):
                return (0)

    if (((numeroPin >= 0) and (numeroPin <= 13))
            or ((numeroPin >= 16)) and (numeroPin <= 21)):
        answer = TryGetAnswer(ser, cmdGetModo, numeroPin, 0)
        ReadValue = int.from_bytes(answer[2], byteorder='big')
        print("Mode of Pin ", numeroPin, " is set to: ", decodeMode(ReadValue))
        print("")
        input("----------[press ENTER to continue]-------------"
              )  #pausa riflessiva per mostrare output
        return (ReadValue)
    else:
        print("Pin number you entered is not valid!!!")
        dormi(3)  #pausa riflessiva per mostrare messaggio di errore
        return (-1)

    dormi(1)
    return (0)
	if menu_scelta_UART[numeroUART+1]=="/dev/ttyS0":
		ser = serial.Serial("/dev/ttyS0", baudrate, timeout=3)
	elif  (Autofind == "YES") or (useDefaultUART=="YES"):
                ser = serial.Serial(menu_scelta_UART[numeroUART], baudrate, timeout=3)
	else:
		ser = serial.Serial(ports[numeroUART].device, baudrate, timeout=3)

	ser.reset_input_buffer()
	print("Port Name: ",ser.name)
	print("Port details: ", ser)
	#input("avanti")
else:
    ser = 0 
    
if not(menu_scelta_UART[numeroUART+1]=="/dev/ttyS0"):
	dormi(2) #let Arduino get started!

CreaDb(db,ser)

while continua:
    main_menu=["FUNCTION SELECTION","Read an input","Write output","Set Pin Mode","Get Pin Mode","Show Arduino I/O status","Exit"]
    scelta = menu_scelta(main_menu)
    funcs = {'1':LeggiIn, '2':ScriviOut,  '3':SetPinMode, '4':GetPinMode, '5':PrintArdStatus}
    
    if int(scelta,10) in range(len(main_menu)-1):
        func = funcs[scelta]
        res = func(db,ser)
    else:
        print("Goodbye!!! ")
        continua = False