from machine import Pin, PWM
from gpio_lcd import GpioLcd
from time import sleep
import urandom
import utime
import math
# Pines del GPIO para el arreglo R2R
PinesR2R = [Pin(pin, Pin.OUT) for pin in [0, 1, 2, 3, 4, 5, 6, 7]]
#fs_audio = 44100 # 44.1Khz frecuencia de muestreo de audio reproduce hasta 22.05Khz
#amplitud = 255
tecla_menu = None
buzzer = PWM(Pin(27)) #pin para el buzzer
#configuracion inicial
#amplitude = 32767 # amplitud max. permitida por PWM (14 bits)
# Configuración de LCD
lcd = GpioLcd(rs_pin=Pin(8), enable_pin=Pin(9), d4_pin=Pin(10), d5_pin=Pin(11),
d6_pin=Pin(12), d7_pin=Pin(13), num_lines=4, num_columns=20)
# Configuración de teclado
tecla_arriba = const(0)
tecla_abajo = const(1)
teclas = [['D', '#', '0', '*'], ['C', '9', '8', '7'], ['B', '6', '5', '4'], ['A', '3', '2', '1']]
#arreglo para frecuencias
tonos = {
"20": 20, "21": 21, "22": 22, "23": 23, "24": 24, "25": 25, "26": 26, "27": 27, "28": 28, "29": 29,"30": 30, "31": 31, "32": 32, "33": 33, "34": 34, "35": 35, "36": 36, "37": 37, "38": 38, "39": 39,
"40": 40, "41": 41, "42": 42, "43": 43, "44": 44, "45": 45, "46": 46, "47": 47, "48": 48, "49": 49,"50": 50, "51": 51, "52": 52, "53": 53, "54": 54, "55": 55, "56": 56, "57": 57, "58": 58, "59": 59,
"60": 60, "61": 61, "62": 62, "63": 63, "64": 64, "65": 65, "66": 66, "67": 67, "68": 68, "69": 69,"70": 70, "71": 71, "72": 72, "73": 73, "74": 74, "75": 75, "76": 76, "77": 77, "78": 78, "79": 79,
"80": 80, "81": 81, "82": 82, "83": 83, "84": 84, "85": 85, "86": 86, "87": 87, "88": 88, "89": 89,"90": 90, "91": 91, "92": 92, "93": 93, "94": 94, "95": 95, "96": 96, "97": 97, "98": 98, "99": 99,
"100": 100, "105": 105, "110": 110, "115": 115, "120": 120, "125": 125, "130": 130, "135": 135, "140": 140, "145": 145,"150": 150, "155": 155, "160": 160, "165": 165, "170": 170, "175": 175, "180":180,
"185": 185, "190": 190, "195": 195, "200": 200, "205": 205, "210": 210, "215": 215, "220": 220, "225": 225, "230": 230, "235": 235, "240": 240, "245": 245,"250": 250, "255": 255, "260": 260,
"265": 265, "270": 270, "275": 275, "280": 280, "285": 285, "290": 290, "295": 295, "300": 300, "305": 305, "310": 310, "315": 315, "320": 320, "325": 325, "330": 330, "335": 335, "340": 340,
"345": 345,"350": 350, "355": 355, "360": 360, "365": 365, "370": 370, "375": 375, "380": 380, "385": 385, "390": 390, "395": 395,"400": 400, "405": 405, "410": 410, "415": 415, "420": 420,
"425": 425, "430": 430, "435": 435, "440": 440, "445": 445,"450": 450, "455": 455, "460": 460, "465": 465, "470": 470, "475": 475, "480": 480, "485": 485, "490": 490, "495": 495,"500": 500,
"600": 600, "605": 605, "610": 610, "615": 615, "620": 620, "625": 625, "630": 630, "635": 635, "640": 640,"645": 645,"650": 650, "655": 655, "660": 660, "665": 665, "670": 670, "675": 675,
"680": 680, "685": 685, "690": 690,"695": 695,"700": 700, "705": 705, "710": 710, "715": 715, "720": 720, "725": 725, "730": 730, "735": 735, "740": 740,"745": 745,"750": 750, "755": 755,
"760": 760, "765": 765, "770": 770, "775": 775, "780": 780, "785": 785, "790": 790,"795": 795,"800": 800, "805": 805, "810": 810, "815": 815, "820": 820, "825": 825, "830": 830, "835": 835,
"840": 840,"845": 845,"850": 850, "855": 855, "860": 860, "865": 865, "870": 870, "875": 875, "880": 880, "885": 885, "890": 890,"895": 895,"900": 900, "905": 905, "910": 910, "915": 915,
"920": 920, "925": 925, "930": 930, "935": 935, "940": 940, "945": 945,"950": 950, "955": 955, "960": 960, "965": 965, "970": 970, "975": 975, "980": 980, "985": 985, "990": 990,"995": 995,
"1000": 1000, "1050": 1050, "1100": 1100, "1150": 1150, "1200": 1200, "1250": 1250, "1300": 1300, "1350": 1350,"1400": 1400, "1450": 1450,"1500": 1500, "1550": 1550, "1600": 1600, "1650": 1650,
"1700": 1700, "1750": 1750, "1800": 1800,"1850": 1850, "1900": 1900, "1950": 1950, "2000": 2000, "2050": 2050, "2100": 2100, "2150": 2150, "2200": 2200, "2250": 2250,"2300": 2300,
"2350": 2350, "2400": 2400, "2450": 2450, "2500": 2500, "2550": 2550, "2600": 2600, "2650": 2650, "2700": 2700,"2750": 2750, "2800": 2800, "2850": 2850, "2900": 2900, "2950": 2950,
"3000": 3000, "3050": 3050, "3100": 3100,"3150": 3150, "3200": 3200, "3250": 3250, "3300": 3300, "3350": 3350, "3400": 3400, "3450": 3450,"3500": 3500,"3550": 3550, "3600": 3600,
"3650": 3650, "3700": 3700, "3750": 3750, "3800": 3800, "3850": 3850, "3900": 3900,"3950": 3950,"4000": 4000, "4050": 4050,"4100": 4100, "4150": 4150, "4200": 4200, "4250": 4250,
"4300": 4300, "4350": 4350,"4400": 4400, "4450": 4450, "4500": 4500,"4550": 4550, "4600": 4600, "4650": 4650, "4700": 4700, "4750": 4750,"4800": 4800, "4850": 4850, "4900": 4900,
"4950": 4950,"5000": 5000,"6000": 6000, "6050": 6050, "6100": 6100, "6150": 6150,"6200": 6200, "6250": 6250, "6300": 6300, "6350": 6350,"6400": 6400, "6450": 6450,"6500": 6500,
"6550": 6550, "6600": 6600,"6650": 6650, "6700": 6700, "6750": 6750, "6800": 6800,"6850": 6850, "6900": 6900, "6950": 6950,"7000": 7000, "7050": 7050,"7100": 7100, "7150": 7150,
"7200": 7200, "7250": 7250,"7300": 7300, "7350": 7350, "7400": 7400, "7450": 7450,"7500": 7500, "7550": 7550, "7600": 7600, "7650": 7650, "7700": 7700,"7750": 7750, "7800": 7800,
"7850": 7850, "7900": 7900, "7950": 7950, "8000": 8000, "8050": 8050, "8100": 8100, "8150": 8150, "8200": 8200, "8250": 8250, "8300": 8300, "8350": 8350, "8400": 8400,"8450": 8450,
"8500": 8500, "8550": 8550, "8600": 8600,"8650": 8650, "8700": 8700, "8750": 8750, "8800": 8800, "8850": 8850, "8900": 8900, "8950": 8950,"9000": 9000, "9050": 9050,"9100": 9100,
"9150": 9150, "9200": 9200, "9250": 9250, "9300": 9300,"9350": 9350, "9400": 9400, "9450": 9450, "9500": 9500,"9550": 9550, "9600": 9600, "9650": 9650, "9700": 9700, "9750": 9750,
"9800": 9800, "9850": 9850, "9900": 9900, "9950": 9950, "10000": 10000, "10100": 10100, "10200": 10200, "10300": 10300, "10400": 10400, "10500": 10500, "10600": 10600, "10700": 10700,
"10800": 10800, "10900": 10900,"11000": 11000, "11100": 11100, "11200": 11200, "11300": 11300, "11400": 11400, "11500": 11500, "11600": 11600, "11700": 11700, "11800": 11800, "11900": 11900,
"12000": 12000, "12100": 12100, "12200": 12200, "12300": 12300, "12400": 12400, "12500": 12500, "12600": 12600, "12700": 12700, "12800": 12800, "12900": 12900,"13000": 13000,
"13100": 13100, "13200": 13200, "13300": 13300, "13400": 13400, "13500": 13500, "13600": 13600, "13700": 13700, "13800": 13800, "13900": 13900,"14000": 14000, "14100": 14100,
"14200": 14200, "14300": 14300, "14400": 14400, "14500": 14500, "14600": 14600, "14700": 14700, "14800": 14800, "14900": 14900,"15000": 15000, "15100": 15100, "15200": 15200,
"15300": 15300, "15400": 15400, "15500": 15500, "15600": 15600, "15700": 15700, "15800": 15800, "15900": 15900,"16000": 16000, "16100": 16100, "16200": 16200, "16300": 16300,
"16400": 16400, "16500": 16500, "16600": 16600, "16700": 16700, "16800": 16800, "16900": 16900,"17000": 17000, "17100": 17100, "17200": 17200, "17300": 17300, "17400": 17400,
"17500": 17500, "17600": 17600, "17700": 17700, "17800": 17800, "17900": 17900,"18000": 18000, "18100": 18100, "18200": 18200, "18300": 18300, "18400": 18400, "18500": 18500,
"18600": 18600, "18700": 18700, "18800": 18800, "18900": 18900, "19000": 19000, "19100": 19100, "19200": 19200, "19300": 19300, "19400": 19400, "19500": 19500, "19600": 19600,
"19700": 19700, "19800": 19800, "19900": 19900,"20000": 20000
}
#Arreglos para barridos
tonos1={"20": 20, "21": 21, "22": 22, "23": 23, "24": 24, "25": 25, "26": 26, "27": 27, "28": 28, "29": 29,"30": 30, "31": 31, "32": 32, "33": 33, "34": 34,"35": 35, "36": 36, "37": 37, "38": 38,
"39": 39, "40":40, "41": 41, "42": 42, "43": 43, "44": 44, "45": 45, "46": 46, "47": 47, "48": 48, "49": 49,"50": 50, "51": 51, "52": 52, "53": 53, "54": 54, "55": 55, "56": 56, "57": 57,
"58": 58, "59": 59,"60": 60, "61": 61, "62": 62, "63": 63, "64": 64,"65": 65, "66": 66, "67": 67, "68": 68, "69": 69,"70": 70, "71": 71, "72": 72, "73": 73, "74": 74, "75": 75, "76": 76,
"77": 77, "78": 78, "79": 79,"80": 80, "81": 81, "82": 82, "83": 83, "84": 84, "85": 85, "86": 86, "87": 87, "88": 88, "89": 89,"90": 90, "91": 91, "92": 92, "93": 93, "94": 94,"95": 95,
"96": 96, "97": 97, "98": 98, "99": 99,"100": 100, "105": 105, "110": 110, "115": 115, "120": 120, "125": 125, "130": 130, "135": 135,"140": 140, "145": 145,"150": 150, "155": 155, "160": 160,
"165": 165, "170": 170, "175": 175, "180": 180, "185": 185, "190": 190, "195": 195,"200": 200}
tonos2={"200": 200, "205": 205, "210": 210, "215": 215, "220": 220, "225": 225, "230": 230, "235": 235, "240": 240, "245": 245,"250": 250, "255": 255, "260": 260, "265": 265, "270": 270,
"275": 275, "280": 280, "285": 285, "290": 290, "295": 295,"300": 300, "305": 305, "310": 310, "315": 315, "320": 320, "325": 325, "330": 330, "335": 335, "340": 340, "345": 345,
"350": 350, "355": 355, "360": 360, "365": 365, "370": 370, "375": 375, "380": 380, "385": 385, "390": 390, "395": 395,"400": 400, "405": 405, "410": 410, "415": 415, "420": 420,
"425": 425, "430": 430, "435": 435, "440": 440, "445": 445, "450": 450, "455": 455, "460": 460, "465": 465, "470": 470, "475": 475, "480": 480, "485": 485, "490": 490, "495": 495,
"500": 500, "600": 600, "605": 605, "610": 610, "615": 615, "620": 620, "625": 625, "630": 630, "635": 635, "640": 640, "645": 645,"650": 650, "655": 655, "660": 660, "665": 665,
"670": 670, "675": 675, "680": 680, "685": 685, "690": 690, "695": 695,"700": 700, "705": 705, "710": 710, "715": 715, "720": 720, "725": 725, "730": 730, "735": 735, "740": 740,
"745": 745,"750": 750, "755": 755, "760": 760, "765": 765, "770": 770, "775": 775, "780": 780, "785": 785, "790": 790, "795": 795,"800": 800, "805": 805, "810": 810, "815": 815,
"820": 820, "825": 825, "830": 830, "835": 835, "840": 840, "845": 845,"850": 850, "855": 855, "860": 860, "865": 865, "870": 870, "875": 875, "880": 880, "885": 885, "890": 890,
"895": 895,"900": 900, "905": 905, "910": 910, "915": 915, "920": 920, "925": 925, "930": 930, "935": 935, "940": 940, "945": 945,"950": 950, "955": 955, "960": 960, "965": 965,
"970": 970, "975": 975, "980": 980, "985": 985, "990": 990, "995": 995, "1000": 1000, "1050": 1050, "1100": 1100, "1150": 1150, "1200": 1200, "1250": 1250, "1300": 1300, "1350": 1350,
"1400": 1400, "1450": 1450,"1500": 1500, "1550": 1550, "1600": 1600, "1650": 1650, "1700": 1700, "1750": 1750, "1800": 1800, "1850": 1850, "1900": 1900, "1950": 1950, "2000": 2000}
tonos3={"2000": 2000, "2050": 2050, "2100": 2100, "2150": 2150, "2200": 2200, "2250": 2250, "2300": 2300, "2350": 2350, "2400": 2400, "2450": 2450, "2500": 2500, "2550": 2550,
"2600": 2600, "2650": 2650, "2700": 2700, "2750": 2750, "2800": 2800, "2850": 2850, "2900": 2900, "2950": 2950, "3000": 3000, "3050": 3050, "3100": 3100,"3150": 3150,
"3200": 3200, "3250": 3250, "3300": 3300, "3350": 3350, "3400": 3400, "3450": 3450,"3500": 3500,"3550": 3550, "3600": 3600,"3650": 3650, "3700": 3700, "3750": 3750,
"3800": 3800, "3850": 3850, "3900": 3900,"3950": 3950,"4000": 4000, "4050": 4050, "4100": 4100, "4150": 4150, "4200": 4200, "4250": 4250, "4300": 4300, "4350": 4350,
"4400": 4400, "4450": 4450, "4500": 4500, "4550": 4550, "4600": 4600, "4650": 4650, "4700": 4700, "4750": 4750,"4800": 4800, "4850": 4850, "4900": 4900, "4950": 4950,
"5000": 5000,"6000": 6000, "6050": 6050, "6100": 6100, "6150": 6150,"6200": 6200, "6250": 6250, "6300": 6300, "6350": 6350, "6400": 6400, "6450": 6450,"6500": 6500,
"6550": 6550, "6600": 6600,"6650": 6650, "6700": 6700, "6750": 6750, "6800": 6800, "6850": 6850, "6900": 6900, "6950": 6950,"7000": 7000, "7050": 7050,"7100": 7100,
"7150": 7150, "7200": 7200, "7250": 7250, "7300": 7300, "7350": 7350, "7400": 7400, "7450": 7450,"7500": 7500, "7550": 7550, "7600": 7600, "7650": 7650, "7700": 7700,
"7750": 7750, "7800": 7800, "7850": 7850, "7900": 7900, "7950": 7950, "8000": 8000, "8050": 8050, "8100": 8100, "8150": 8150, "8200": 8200, "8250": 8250, "8300": 8300,
"8350": 8350, "8400": 8400,"8450": 8450,"8500": 8500, "8550": 8550, "8600": 8600, "8650": 8650, "8700": 8700, "8750": 8750, "8800": 8800, "8850": 8850, "8900": 8900,
"8950": 8950,"9000": 9000, "9050": 9050, "9100": 9100, "9150": 9150, "9200": 9200, "9250": 9250, "9300": 9300,"9350": 9350, "9400": 9400, "9450": 9450, "9500": 9500,
"9550": 9550, "9600": 9600, "9650": 9650, "9700": 9700, "9750": 9750, "9800": 9800, "9850": 9850, "9900": 9900, "9950": 9950, "10000": 10000, "10100": 10100, "10200": 10200,
"10300": 10300, "10400": 10400, "10500": 10500, "10600": 10600, "10700": 10700, "10800": 10800, "10900": 10900,"11000": 11000, "11100": 11100, "11200": 11200, "11300": 11300,
"11400": 11400, "11500": 11500, "11600": 11600, "11700": 11700, "11800": 11800, "11900": 11900,"12000": 12000, "12100": 12100, "12200": 12200, "12300": 12300, "12400": 12400,
"12500": 12500, "12600": 12600, "12700": 12700, "12800": 12800, "12900": 12900,"13000": 13000, "13100": 13100, "13200": 13200, "13300": 13300, "13400": 13400, "13500": 13500,
"13600": 13600, "13700": 13700, "13800": 13800, "13900": 13900,"14000": 14000, "14100": 14100, "14200": 14200, "14300": 14300, "14400": 14400, "14500": 14500, "14600": 14600,
"14700": 14700, "14800": 14800, "14900": 14900, "15000": 15000, "15100": 15100, "15200": 15200, "15300": 15300, "15400": 15400, "15500": 15500, "15600": 15600, "15700": 15700,
"15800": 15800, "15900": 15900, "16000": 16000, "16100": 16100, "16200": 16200, "16300": 16300, "16400": 16400, "16500": 16500, "16600": 16600, "16700": 16700, "16800": 16800,
"16900": 16900, "17000": 17000, "17100": 17100, "17200": 17200, "17300": 17300, "17400": 17400, "17500": 17500, "17600": 17600, "17700": 17700, "17800": 17800, "17900": 17900,
"18000": 18000, "18100": 18100, "18200": 18200, "18300": 18300, "18400": 18400, "18500": 18500, "18600": 18600, "18700": 18700, "18800": 18800, "18900": 18900,"19000": 19000,
"19100": 19100, "19200": 19200, "19300": 19300, "19400": 19400, "19500": 19500, "19600": 19600, "19700": 19700, "19800": 19800, "19900": 19900, "20000": 20000}
#arreglo para frecuencias
frec=["20","21","22", "23","24","25","26","27","28","29","30","31","32","33","34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49","50", "51", "52",
"53", "54", "55", "56", "57", "58", "59","60", "61", "62", "63", "64","65", "66", "67", "68", "69","70", "71", "72", "73", "74", "75", "76", "77", "78", "79","80", "81", "82", "83", "84",
"85", "86", "87", "88", "89","90", "91", "92", "93", "94","95", "96", "97", "98", "99","100", "105", "110", "115", "120", "125", "130", "135","140", "145","150", "155", "160", "165", "170",
"175", "180", "185", "190", "195","200","205", "210", "215", "220", "225", "230", "235", "240", "245","250", "255", "260", "265", "270", "275", "280", "285", "290", "295","300",
"305", "310", "315", "320", "325", "330", "335", "340", "345","350", "355", "360", "365", "370", "375", "380", "385", "390", "395","400", "405", "410", "415", "420", "425", "430",
"435", "440", "445","450", "455", "460", "465", "470", "475", "480", "485", "490", "495","500", "600", "605", "610", "615", "620", "625", "630", "635", "640","645","650", "655",
"660", "665", "670", "675", "680", "685", "690","695","700", "705", "710", "715", "720", "725", "730", "735", "740","745","750", "755", "760", "765", "770", "775", "780", "785",
"790","795","800", "805", "810", "815", "820", "825", "830", "835", "840","845","850", "855", "860", "865", "870", "875", "880", "885", "890","895","900", "905", "910", "915", "920",
"925", "930", "935", "940","945","950", "955", "960", "965", "970", "975", "980", "985", "990", "995", "1000", "1050", "1100", "1150", "1200", "1250", "1300", "1350","1400", "1450",
"1500", "1550", "1600", "1650", "1700", "1750", "1800", "1850", "1900", "1950", "2000","2050", "2100", "2150", "2200", "2250","2300", "2350", "2400", "2450", "2500", "2550", "2600",
"2650", "2700", "2750", "2800", "2850", "2900", "2950", "3000", "3050", "3100","3150","3200", "3250", "3300", "3350", "3400", "3450","3500","3550","3600","3650", "3700", "3750",
"3800", "3850", "3900","3950","4000", "4050","4100", "4150", "4200", "4250", "4300", "4350","4400", "4450", "4500","4550", "4600", "4650", "4700", "4750","4800", "4850", "4900",
"4950","5000","6000", "6050", "6100", "6150","6200","6250", "6300", "6350","6400", "6450","6500", "6550", "6600","6650", "6700", "6750", "6800","6850", "6900", "6950","7000",
"7050","7100", "7150", "7200", "7250","7300", "7350", "7400", "7450","7500", "7550", "7600", "7650", "7700","7750", "7800", "7850", "7900", "7950", "8000", "8050", "8100",
"8150","8200", "8250", "8300", "8350", "8400","8450","8500", "8550", "8600","8650", "8700", "8750", "8800", "8850", "8900", "8950","9000", "9050","9100", "9150", "9200", "9250",
"9300","9350", "9400", "9450", "9500","9550", "9600", "9650", "9700", "9750", "9800", "9850", "9900", "9950", "10000", "10100", "10200", "10300", "10400", "10500", "10600", "10700",
"10800", "10900","11000", "11100", "11200", "11300", "11400", "11500", "11600", "11700", "11800", "11900","12000", "12100", "12200", "12300", "12400", "12500", "12600", "12700", "12800",
"12900","13000", "13100", "13200", "13300", "13400", "13500", "13600", "13700", "13800", "13900","14000", "14100", "14200", "14300", "14400", "14500", "14600", "14700", "14800",
"14900","15000", "15100", "15200", "15300", "15400", "15500", "15600", "15700", "15800", "15900","16000", "16100", "16200", "16300", "16400", "16500", "16600", "16700", "16800",
"16900","17000", "17100", "17200", "17300", "17400", "17500", "17600", "17700", "17800", "17900","18000", "18100", "18200", "18300", "18400", "18500", "18600", "18700", "18800",
"18900","19000", "19100", "19200", "19300", "19400", "19500", "19600", "19700", "19800", "19900","20000"]
barri1=["20","21","22", "23","24","25","26","27","28","29","30","31","32","33","34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49","50", "51", "52",
"53", "54", "55", "56", "57", "58", "59","60", "61", "62", "63", "64","65", "66", "67", "68", "69","70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89","90", "91", "92", "93", "94","95", "96", "97", "98", "99","100", "105", "110", "115", "120", "125", "130", "135",
"140", "145","150", "155", "160", "165", "170", "175", "180", "185", "190", "195","200"]
barri2=["200", "205", "210", "215", "220", "225", "230", "235", "240", "245","250", "255", "260", "265", "270", "275", "280", "285", "290", "295","300","305", "310", "315", "320", "325",
"330", "335", "340", "345","350", "355", "360", "365", "370", "375", "380", "385", "390", "395","400", "405", "410", "415", "420", "425", "430", "435", "440", "445","450", "455", "460",
"465", "470", "475", "480", "485", "490", "495","500", "600", "605", "610", "615", "620", "625", "630", "635", "640","645","650", "655", "660", "665", "670", "675", "680", "685", "690",
"695","700", "705", "710", "715", "720", "725", "730", "735", "740","745","750", "755", "760", "765", "770", "775", "780", "785", "790", "795","800", "805", "810", "815", "820", "825",
"830", "835", "840","845","850", "855", "860", "865", "870", "875", "880", "885", "890", "895","900", "905", "910", "915", "920", "925", "930", "935", "940","945","950", "955", "960",
"965", "970", "975", "980", "985", "990", "995", "1000", "1050", "1100", "1150", "1200", "1250", "1300", "1350","1400", "1450","1500", "1550", "1600", "1650", "1700", "1750", "1800",
"1850", "1900", "1950", "2000"]
barri3=["2000", "2050", "2100", "2150", "2200", "2250","2300", "2350", "2400", "2450", "2500", "2550", "2600", "2650", "2700", "2750", "2800", "2850", "2900", "2950", "3000", "3050",
"3100","3150","3200", "3250", "3300", "3350", "3400", "3450","3500","3550", "3600","3650", "3700", "3750", "3800", "3850", "3900","3950","4000", "4050","4100", "4150", "4200",
"4250", "4300", "4350","4400", "4450", "4500","4550", "4600", "4650", "4700", "4750","4800", "4850", "4900", "4950","5000","6000", "6050", "6100", "6150","6200", "6250", "6300",
"6350","6400", "6450","6500", "6550", "6600","6650", "6700", "6750", "6800","6850", "6900", "6950","7000", "7050", "7100", "7150", "7200", "7250","7300", "7350", "7400", "7450",
"7500", "7550", "7600", "7650", "7700","7750", "7800", "7850", "7900", "7950", "8000", "8050", "8100", "8150","8200", "8250", "8300", "8350", "8400","8450","8500", "8550", "8600",
"8650", "8700", "8750", "8800", "8850", "8900", "8950","9000", "9050","9100", "9150", "9200", "9250", "9300","9350", "9400", "9450", "9500","9550", "9600", "9650", "9700", "9750",
"9800", "9850", "9900", "9950", "10000", "10100", "10200", "10300", "10400", "10500", "10600", "10700", "10800", "10900","11000", "11100", "11200", "11300", "11400", "11500", "11600",
"11700", "11800", "11900","12000", "12100", "12200", "12300", "12400", "12500", "12600", "12700", "12800", "12900","13000", "13100", "13200", "13300", "13400", "13500", "13600",
"13700", "13800", "13900","14000", "14100", "14200", "14300", "14400", "14500", "14600", "14700", "14800", "14900","15000", "15100", "15200", "15300", "15400", "15500", "15600",
"15700", "15800", "15900","16000", "16100", "16200", "16300", "16400", "16500", "16600", "16700", "16800", "16900","17000", "17100", "17200", "17300", "17400", "17500", "17600",
"17700", "17800", "17900","18000", "18100", "18200", "18300", "18400", "18500", "18600", "18700", "18800", "18900","19000", "19100", "19200", "19300", "19400", "19500", "19600",
"19700", "19800", "19900","20000"]
#funciones para el buzzer
def reproducir_frec(frequency):
buzzer.duty_u16(10000)
buzzer.freq(frequency)
def detener():
buzzer.duty_u16(0)
def playsong(mysong):
for i in range(len(mysong)):
if (mysong[i] == "P"):
detener()
else:
reproducir_frec(tonos[mysong[i]])
sleep(1)
#Funcion para barrido1
def reproducir_barrido1(frequency):
buzzer.duty_u16(10000)
buzzer.freq(frequency)
def detener():
buzzer.duty_u16(0)
def playsong1(mysong):
for i in range(len(mysong)):
#if (mysong[i] == "P"):
# detener()
#else:
reproducir_barrido1(tonos1[mysong[i]])
sleep(0.3)
#Funcion para barrido2
def reproducir_barrido2(frequency):
buzzer.duty_u16(10000)
buzzer.freq(frequency)
def detener():
buzzer.duty_u16(0)
def playsong2(mysong):
for i in range(len(mysong)):
if (mysong[i] == "P"):
detener()
else:
reproducir_barrido2(tonos2[mysong[i]])
sleep(0.3)
#Funcion para barrido3
def reproducir_barrido3(frequency):
buzzer.duty_u16(10000)
buzzer.freq(frequency)
def detener():
buzzer.duty_u16(0)
def playsong3(mysong):
for i in range(len(mysong)):
if (mysong[i] == "P"):
detener()
else:
reproducir_barrido3(tonos3[mysong[i]])
sleep(0.3)
#pines para el teclado matricial
filas = [16, 17, 18, 19]
columnas = [20, 21, 22, 26]
#pines de entrada y salida para el teclado
pinesFila = [Pin(nombre_pin, mode=Pin.OUT) for nombre_pin in filas]
pinesColumna = [Pin(nombre_pin, mode=Pin.IN, pull=Pin.PULL_DOWN) for nombre_pin in columnas]
##funciones para el teclado
def init():
for fila in pinesFila:
fila.low()
def scan(fila, columna):
pinesFila[fila].high()
tecla = None
if pinesColumna[columna].value() == tecla_abajo:
tecla = tecla_abajo
if pinesColumna[columna].value() == tecla_arriba:
tecla = tecla_arriba
pinesFila[fila].low()
return tecla
#funcion para introducir una frecuencia
def frecuencia():
lcd.clear()
lcd.putstr("FRECUENCIA:")
lcd.putstr("nA)ACEPTAR nB)BORRAR nC)MENU PRINCIPAL")
salida_menu = False #Variable para salir de la funcion
frecuencia_str = ""
while True:
for fila in range(4):
for columna in range(4):
tecla = scan(fila, columna)
if tecla == tecla_abajo:
tecla_valor = teclas[fila][columna]
if tecla_valor.isdigit() and len(frecuencia_str) < 5:
frecuencia_str += tecla_valor
lcd.move_to(11, 0)
sleep(0.3)
lcd.putstr(frecuencia_str)
elif tecla_valor == 'A':
frecuencia_seleccionada = frecuencia_str
if 20 <= int(frecuencia_seleccionada) <= 20000:
if frecuencia_seleccionada in tonos:
tono_seleccionado = tonos[frecuencia_seleccionada]
reproducir_frec(tono_seleccionado) # Reproducir el tono seleccionado
sleep(0.3) # Tiempo que tarda en sonar
lcd.clear()
lcd.putstr("REPRODUCIENDO:n" + frecuencia_seleccionada + "Hz")
lcd.putstr("nB)DETENER nC)MENU PRINCIPAL")
else:
lcd.clear()
lcd.putstr("FRECUENCIA INVALIDA")
frecuencia_str = ""
sleep(3)
lcd.clear()
#mostrar_menu()
#break
return
else:
lcd.clear()
lcd.putstr("FREC INVALIDA")
frecuencia_str = ""
sleep(3)
lcd.clear()
return
elif tecla_valor == 'B':
detener() #Detener el tono
frecuencia_str = "" #borra el valor de frecuencia ingresada
return # Regresa al menú principal
elif tecla_valor == 'C':
detener() #Detener el tono
frecuencia_str = "" #borra el valor de frecuencia ingresada
#salir_frecuencia = True # Salir del bucle y de la función
#lcd.clear()
break
"""
if frecuencia_str and len(frecuencia_str) <= 5:
frecuencia_entero = int(frecuencia_str)
if 20 <= frecuencia_entero <= 20000:
lcd.clear()
lcd.putstr("FRECUENCIA VALIDA")
generar_senoidal(frecuencia_entero, amplitud, 5)
else:
lcd.clear()
lcd.putstr("FRECUENCIA INVALIDA")
frecuencia_str = ""
elif tecla_valor == 'B':
frecuencia_str = ""
lcd.clear()
lcd.putstr("FRECUENCIA BORRADA")
else:
lcd.clear()
lcd.putstr("FRECUENCIA INVALIDA")
"""
#Funcion para generar barrido entre dos frecuencias
def barrido():
lcd.clear()
mostrar_menu_barrido()
frecuencia_str = ""
while True:
for fila in range(4):
for columna in range(4):
tecla = scan(fila, columna)
if tecla == tecla_abajo:
tecla_valor = teclas[fila][columna]
if tecla_valor.isdigit() and len(frecuencia_str) < 5:
frecuencia_str += tecla_valor
lcd.move_to(0, 1)
sleep(0.9)
lcd.putstr(frecuencia_str)
if tecla_valor == '1':
lcd.clear()
lcd.putstr("REPROD. BARRIDO1")
playsong1(barri1)
elif tecla_valor == 'B':
detener()
lcd.putstr("PAUSA")
elif tecla_valor == '2':
lcd.clear()
lcd.putstr("REPROD. BARRIDO2")
playsong2(barri2)
elif tecla_valor == 'B':
detener()
lcd.putstr("PAUSA")
elif tecla_valor == '3':
lcd.clear()
lcd.putstr("REPROD. BARRIDO3")
playsong3(barri3)
elif tecla_valor == 'B':
detener()
lcd.putstr("PAUSA")
#Función para generar ruido rosa
#Función para generar ruido rosa utilizando valores aleatorios
def generate_pink_noise():
pink_noise = [] #lista para guardar los valores que se generan
for _ in range(1000): #Se ejecuta el bucle 1000 veces
pink_noise.append(urandom.uniform(-1, 1)) #genera valores aleatorios entre -1 a 1
return pink_noise #los valores generados se devuelven a la funcion
#Función para reproducir ruido rosa en el buzzer
def play_pink_noise():
pink_noise = generate_pink_noise() #llama a la funcion generate_pink_noise para obtener los valores generados
for value in pink_noise: #bucle de cada valor en la lista generada
frequency = int(20 + (20000 - 20) * (value + 1) / 2) #calcula la frecuencia del valor actual en un rango de 20Hz a 20KHz
playtone(frequency)
lcd.clear()
lcd.putstr("REPROD. RUIDO ROSA nnB)PAUSAR nC)MENU PRINCIPAL")
#if tecla_valor == 'B':
# bequiet() #detiene la reproduccion
#elif tecla_valor == 'C':
# lcd.clear()
#mostrar_menu()
#Función para establecer la frecuencia del buzzer
def playtone(frequency):
buzzer.duty_u16(8000) #establece el ciclo de trabajo en nivel alto, interpretada como señal continua
buzzer.freq(frequency) #frecuencia para el buzzer
#Función para detener la reproducción del buzzer
def bequiet():
buzzer.duty_u16(0) #establece el ciclo de trabajo en nivel bajo, no genera sonido
# Función principal para reproducir el ruido rosa
def playsong(mysong):
for i in range(len(mysong)): #hace un bucle a través de cada elemento
playtone(tones[mysong[i]]) #llama a la funcion rep_ruido_rosa
sleep(20) #pausa para pasar a la siguiente frecuencia
#Función para mostrar menú y manejar la entrada
def mostrar_menu():
lcd.clear()
lcd.putstr("1.FRECUENCIA n2.RUIDO ROSA n3.BARRIDO DE FREC")
def mostrar_menu_barrido():
lcd.clear()
lcd.putstr("1.BARRIDO1 n2.BARRIDO2 n3.BARRIDO3")
#def menu_principal():
#Función principal
while True:
mostrar_menu()
while tecla_menu is None:
for fila in range(4):
for columna in range(4):
tecla = scan(fila, columna)
if tecla == tecla_abajo:
tecla_menu = teclas[fila][columna]
#return tecla_menu
if tecla_menu == '1':
recuencia()
elif tecla_menu == '2':
play_pink_noise()
elif tecla_menu == '3':
barrido()