# sysutilv29.py tlfong01 2021mar14hkt1547
# Piromoni Tiny2040
# *** Contents ***
# 1. Import
# 2. Logical/time/repetition variable/constant declarations
# 3. Digital Output / LED / Mechanical Buzzer
# testOnBoardLedsV01()
# testMechBuzzerV01()
# testPiezoBuzzerMusicV1()
# 4. Digital Input Pins
# testReadBootSelectButtonV01()
# 5. DS18B20 Temperature Sensor
# testReadTemperatureV01()
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** 1. Import ***
import time
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** 2. Logical/time/repetition variable/constant declarations ***
LowVal = 0
HighVal = 1
OnVal = LowVal # On board RGB led = Low active
OffVal = HighVal
HighTime = 0.5 # seconds
LowTime = 0.5 # seconds
OnTime = LowTime # Active Low Led on time
OffTime = HighTime # Active Low Led off time
RepeatTimes = 2 # default repeat twice
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** 3. Digital Output / LED / Mechanical Buzzer ***
# *** Config ***
from machine import Pin
# On baord RGB led pin num ***
OnBoardRedLedPinNum = 18
OnBoardGreenLedPinNum = 19
OnBoardBlueLedPinNum = 20
OnBoardRgbLedPinNumList = [OnBoardRedLedPinNum, OnBoardGreenLedPinNum, OnBoardBlueLedPinNum]
# *** Electromechanical Buzzer Pin ***
MechBuzzerPinNum = 28
def initDigiOutPinNum(digiOutPinNum, initVal):
# *** Setup pinnum to digi output mode and initialize pin to initVal ***
#print('Begin initDigiOutPinNum(), ...')
digiOutPin = Pin(digiOutPinNum, Pin.OUT)
digiOutPin.value(initVal)
#print('End initDigiOutPinNum().')
return digiOutPin
def initDigiOutPinNumList(digiOutPinNumList, initVal):
# *** Setup pinnum list to digi output mode and initialize pins to initVal ***
# *** Return digiOutPinList ***
#print('Begin initDigiOutPinNumList(), ...')
digiOutPinList = []
for digiOutPinNum in digiOutPinNumList:
digiOutPin = initDigiOutPinNum(digiOutPinNum, initVal)
digiOutPinList.append(digiOutPin)
#print('End initDigiOutPinNumList().')
return digiOutPinList
def toggleDigiOutPinOnce(digiOutPin, initVal, highTime, lowTime):
# *** Toggle digiOutPin once ***
#print('Begin toggleDigiOutPinOnce(), ...')
#print(initVal, highTime, lowTime)
if initVal == LowVal:
digiOutPin.value(HighVal)
time.sleep(highTime)
digiOutPin.value(LowVal)
time.sleep(lowTime)
else:
digiOutPin.value(LowVal)
time.sleep(highTime)
digiOutPin.value(HighVal)
time.sleep(lowTime)
#print('End toggleDigiOutPinOnce(), ...')
return
def toggleDigiOutPinManyTimes(digiOutPin, initVal, highTime, lowTime, repeatTimes):
# *** Toggle digiOutPin many times ***
#print('Begin toggleDigiOutPinManyTimes(), ...')
for i in range(repeatTimes):
toggleDigiOutPinOnce(digiOutPin, initVal, highTime, lowTime)
#print('End toggleDigiOutPinManyTimes(), ...')
return
def toggleDigiOutPinListManyTimes(digiOutPinList, initVal, highTime, lowTime, repeatTimes):
# *** Toggle digiOutPin list many times ***
#print('Begin toggleDigiOutpPinList(),...')
for count in range(repeatTimes):
for digiOutPin in digiOutPinList:
toggleDigiOutPinOnce(digiOutPin, initVal, highTime, lowTime)
#print('End toggleDigiOutpPinList().')
return
# *** Test On Board LEDs and Mechanical Buzzer***
def testOnBoardLedsV01():
onBoardRgbLedPinList = initDigiOutPinNumList(OnBoardRgbLedPinNumList, HighVal)
toggleDigiOutPinListManyTimes(onBoardRgbLedPinList, HighVal, 0.25, 0.25, 2)
return
def testMechBuzzerV01():
mechBuzzerPin = initDigiOutPinNum(MechBuzzerPinNum, LowVal)
toggleDigiOutPinManyTimes(mechBuzzerPin, LowVal, 0.1, 0.5, 2)
return
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** Piezo Buzzer ***
from machine import PWM
# *** Config ***
piezoBuzzerPinNum = 27
piezoBuzzerPin = Pin(piezoBuzzerPinNum)
piezoBuzzer = PWM(piezoBuzzerPin)
# *** Tones ***
tones = { "B0": 31, "C1": 33, "CS1": 35, "D1": 37, "DS1": 39, "E1": 41, "F1": 44, "FS1": 46,
"G1": 49, "GS1": 52, "A1": 55, "AS1": 58, "B1": 62, "C2": 65, "CS2": 69, "D2": 73,
"DS2": 78, "E2": 82, "F2": 87, "FS2": 93, "G2": 98, "GS2": 104, "A2": 110, "AS2": 117,
"B2": 123, "C3": 131, "CS3": 139, "D3": 147, "DS3": 156, "E3": 165, "F3": 175,
"FS3": 185, "G3": 196, "GS3": 208, "A3": 220, "AS3": 233, "B3": 247, "C4": 262, "CS4": 277,
"D4": 294, "DS4": 311, "E4": 330, "F4": 349, "FS4": 370, "G4": 392, "GS4": 415, "A4": 440,
"AS4": 466, "B4": 494, "C5": 523, "CS5": 554, "D5": 587, "DS5": 622, "E5": 659, "F5": 698,
"FS5": 740, "G5": 784, "GS5": 831, "A5": 880, "AS5": 932, "B5": 988, "C6": 1047, "CS6": 1109,
"D6": 1175, "DS6": 1245, "E6": 1319, "F6": 1397, "FS6": 1480, "G6": 1568, "GS6": 1661,
"A6": 1760, "AS6": 1865, "B6": 1976, "C7": 2093, "CS7": 2217, "D7": 2349, "DS7": 2489,
"E7": 2637, "F7": 2794, "FS7": 2960, "G7": 3136, "GS7": 3322, "A7": 3520, "AS7": 3729,
"B7": 3951, "C8": 4186, "CS8": 4435, "D8": 4699, "DS8": 4978
}
# *** Songs ***
song01 = ["E5","G5","A5","P","E5","G5","B5","A5","P","E5","G5","A5","P","G5","E5"]
# *** Functions ***
def playtone(frequency):
piezoBuzzer.duty_u16(1000)
piezoBuzzer.freq(frequency)
return
def bequiet():
piezoBuzzer.duty_u16(0)
return
def playsong(mysong):
for i in range(len(mysong)):
if (mysong[i] == "P"):
bequiet()
else:
playtone(tones[mysong[i]])
time.sleep(0.3)
bequiet()
return
# *** Test Piezo Buzzer ***
def testPiezoBuzzerMusicV01():
print('Begin playSong(), ...')
playsong(song01)
print('End playSong().')
return
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** 4. Digital Input Pins ***
# *** Button state varaibles and constants ***
ButtonReleased = True
ButtonPressed = False
# *** Boot/Select button pin config ***
bootSelectButtonPinNum = 23
bootSelectButtonPin = Pin(bootSelectButtonPinNum, Pin.IN, Pin.PULL_DOWN)
# *** Boot/Select Button Pin Functions ***
def readBootSelectButtonPin():
print('\nBegin readBootSelectButton(),...')
if bootSelectButtonPin.value() == ButtonReleased:
buttonStatus = ButtonReleased
else:
buttonStatus = ButtonPressed
print(' Button status (Relesed) =', buttonStatus)
print('End readBootSelectButton(),...')
return buttonStatus
def testReadBootSelectButtonV01():
print('\nBegin testReadBootSelectButton(),...')
print(' Press and hold at least 0.5 second, <Ctrl F2> to exit program.')
for count in range(10):
print(' count =', count, end = '')
if bootSelectButtonPin.value() == ButtonReleased:
print(' Button not released, ...')
else:
print(' Button pressed, ...')
time.sleep(1)
print('End testReadBootSelectButton(),...')
return
# *** Sample Output ***
# testReadBootSelectButtonV01()
'''
MicroPython v1.14 on 2021-03-06; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>> %Run -c $EDITOR_CONTENT
Begin testReadBootSelectButton(),...
Press and hold at least 0.5 second, <Ctrl F2> to exit program.
count = 0 Button not released, ...
count = 1 Button not released, ...
count = 2 Button not released, ...
count = 3 Button pressed, ...
count = 4 Button pressed, ...
count = 5 Button not released, ...
count = 6 Button pressed, ...
count = 7 Button not released, ...
count = 8 Button pressed, ...
count = 9 Button not released, ...
End testReadBootSelectButton(),...
>>>
'''
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** DS18B20 Temperature Sensor ***
# *** DS18B20 Config ***
import onewire, ds18x20
tempSensorPinNum = 29
tempSensorPin = machine.Pin(tempSensorPinNum)
tempSensor = ds18x20.DS18X20(onewire.OneWire(tempSensorPin))
# *** Functions ***
def testReadTemperatureV01():
print('Begin testReadTemperature(), ...')
idCodeList = tempSensor.scan()
print(' Temp Sensor DS18B20: ', idCodeList)
for secondCount in range(4):
print(' Second ', secondCount, ' ', end = '')
tempSensor.convert_temp()
time.sleep_ms(750)
for idCode in idCodeList:
print(' ', '%.2f' % tempSensor.read_temp(idCode), end ='')
time.sleep(1)
print('')
print('End testReadTemperature(), ...')
return
# *** Sample Output of testReadTemperature() ***
'''
>>> %Run -c $EDITOR_CONTENT
Begin testReadTemperature(), ...
Temp Sensor DS18B20: [bytearray(b'(\xeb8y\xa2\x16\x03S'), bytearray(b'(\xc3&y\xa2\x16\x03\x9a')]
Second 0 24.75 26.00
Second 1 24.75 25.94
Second 2 24.75 25.94
Second 3 24.75 26.00
End testReadTemperature(), ...
>>>
'''
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** Main ***
#testOnBoardLedsV01()
#testMechBuzzerV01()
#testReadBootSelectButtonV01()
#testReadTemperatureV01()
testPiezoBuzzerMusicV01()
# ========== ========== ========== ========== ========== ========== ========== ==========
# End ***
# ========== ========== ========== ========== ========== ========== ========== ==========
# *** Sample Output - tlfong01 2021feb10hkt2043 ***
'''
'''
# *** End of sample output ***
# ========== ========== ========== ========== ========== ========== ========== ==========
Categories: Uncategorized