diff --git a/.vscode/settings.json b/.vscode/settings.json index 5daca96..ede69c7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,7 +12,7 @@ "idf.openOcdConfigs": [ "board/esp32s3-builtin.cfg" ], - "idf.portWin": "COM6", + "idf.portWin": "COM5", "idf.flashType": "UART", "files.associations": { "*.md": "markdown", diff --git a/SquareLineProj/ESP32S3_UI.sll b/SquareLineProj/ESP32S3_UI.sll index d790414..ac823a6 100644 --- a/SquareLineProj/ESP32S3_UI.sll +++ b/SquareLineProj/ESP32S3_UI.sll @@ -12,7 +12,7 @@ "board": "ESP32-S3-LCD-EV-BOARD", "board_version": "1.0.1", "editor_version": "1.5.1", - "image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAHgAyADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3aiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFoorM1HXbDTOJ5lDema1UXJ2SMXJRV2zTorlv+E80r+9+jf/ABNH/CeaV/e/Rv8A4mtvqtb+R/czL6zR/nX3o6miuW/4TzSv736N/wDE0f8ACeaV/e/Rv/iaPqtb+R/cw+s0f5196Oporlv+E80r+9+jf/E0f8J5pX979G/+Jo+q1v5H9zD6zR/nX3o6miuW/wCE80r+9+jf/E0f8J5pX979G/8AiaPqtb+R/cw+s0f5196Oporlv+E80r+9+jf/ABNH/CeaV/e/Rv8A4mj6rW/kf3MPrNH+dfejqaK5b/hPNK/vfo3/AMTR/wAJ5pX979G/+Jo+q1v5H9zD6zR/nX3o6miuW/4TzSv736N/8TR/wnmlf3v0b/4mj6rW/kf3MPrNH+dfejqaK5b/AITzSv736N/8TR/wnmlf3v0b/wCJo+q1v5H9zD6zR/nX3o6miuW/4TzSv736N/8AE0f8J5pX979G/wDiaPqtb+R/cw+s0f5196Oporlv+E80r+9+jf8AxNH/AAnmlf3v0b/4mj6rW/kf3MPrNH+dfejqaK5b/hPNK/vfo3/xNH/CeaV/e/Rv/iaPqtb+R/cw+s0f5196Oporlv8AhPNK/vfo3/xNH/CeaV/e/Rv/AImj6rW/kf3MPrNH+dfejqaK5b/hPNK/vfo3/wATR/wnmlf3v0b/AOJo+q1v5H9zD6zR/nX3o6miuW/4TzSv736N/wDE0f8ACeaV/e/Rv/iaPqtb+R/cw+s0f5196Oporlv+E80r+9+jf/E0f8J5pX979G/+Jo+q1v5H9zD6zR/nX3o6miuW/wCE80r+9+jf/E0f8J5pX979G/8AiaPqtb+R/cw+s0f5196Oporlv+E80r+9+jf/ABNH/CeaV/e/Rv8A4mj6rW/kf3MPrNH+dfejqaK5b/hPNK/vfo3/AMTR/wAJ5pX979G/+Jo+q1v5H9zD6zR/nX3o6miuZi8caVJIFMgXPc5H8wK6C2u4byISQSB1PoaznSnD44teqLhVhP4JJ+jJaKKKwOgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDN8QamNI0ae6HLjCoPVj0rx25uZrudpp3LyN1Jr0j4iEjw/B73S/wDoL15lX02U0oqk6nVnzOa1ZOqqfRBRRRXrHlBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVuTaLZ2kE01zc3axf6O0Ei24JdZUZuVLDptxkMeQfwidSMN/6/q5pCnKexh0VpTWdh/ZUt1a3FzK8c8cZEsKxgBlc9mbP3B6fj22X8N6PaMJbjWZZoUgFzIkdq0btEwwpQnIOWZBj3OSMGs5YiEd7/AHP+upccPOW1vvX9dDlKK1r7Tra1srrZ5rTW1ykXmlhsmRxIVdVxkZCqR8xBBrJrWE1NXRnODg7MKKKKogKKKKACiiigAooooAKKKKACiiigAooooAK6Dwrrkul6pFE7k20rBGUnhc965+gEg5HWs61KNWDhLqa0qsqU1OPQ95ooor4c+2CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5L4if8AIvwf9fS/+gPXmdeq+OrN7vw27Rgk28izED0GQf0bP4V5VX1WVNPD28z5bNE1Xv5BRRRXpHmhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV1tp9sj0jTXtLPWZN1uwaSwnManE0uAcI2SMnv3rkqkt55LW5iuIW2yxOHRsA4YHIPNZVqXtEkbUans22dDrK3kmjNNdprMOy4jVUv7gyK+VckgFF5G0f8AfVSSCS40eGCPRtWtrVYsG5MzGNk3F1aQCLDKpYnjsfpXMSSPLI0kjs7uSzMxyWJ6kmm1msPolfZ36/5/mW8Rq3bdW6f5fkdHrht4LJ4FvIpppRZMEjV+FS3IJJZQOdykd+ecVzlSTTyXEgeVtzBFQHAHyqoUD8gKjrWlT5I2bM6tTnldIKKKK0MgooooAKKKKACiiigAooooAKKKKACiiigAooqzp9m+oajb2kYJaVwvHYdz+A5pNqKuxpNuyPcKKKK+EPugooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKABlDqVYAqRggjgiuB1rwBKZ2m0l0Mbc+RIcFfofT6139NLoDgsoP1rsoYmpQd4M46+Gp11aaPJv+EL8Qf8AQP8A/I0f/wAVR/whfiD/AKB//kaP/wCKr1nzI/76/nR5kf8AfX867f7Yr9l+P+Zxf2RR7v8AD/I8m/4QvxB/0D//ACNH/wDFUf8ACF+IP+gf/wCRo/8A4qvWfMj/AL6/nR5kf99fzo/tiv2X4/5h/ZFHu/w/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0CKeHCggcZFZdze6R4cufC2j2seuPb6dqswXzdNu5SqfZroBI38s+Yq7gq7S3yKDkgE12mv6bfatpbWNhqsmmGVws1xDHulEX8SxnICORwHw23kgZwQarps19qOh3ETRhLC9a4lDE5Km3miwvHXdIp5xwD9CAXLG9i1CzjuoUnSN84E8DwuMEjlHAYdO4569KsUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFaiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKALNFFFABRRRQBl674f03xHp5s9Sg8xAd0bqdrxN2ZW6g0/RNC07w9pyWOm26wwryx6s7d2Y9ST61o0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBWooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/2Q==", + "image": "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hHpTuMjK0zGKlpCM1SYrEdIRTiuKSmIaRTSKkpCKdw3IiMUlSYppFVcQwjNMK4qTGKKdxkOKaV9KmK+lMIot2ER0hWpCKaRikG5GRikqSmlaq4hhGaaVp9FO4EVIR6VIVppFUmKxHSEZqQjNNIxTERlcUlSUhXNUmKwymlaeRikpgRkUlSEZppFO4rDCvpTakxSEZqgGUhWnEYpKYbkZGKKk600r6U7k2G0hGaWimB67RRRXyBIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHNUhGaeRmm4xXr3O3cYRikqSmladxWG4zTSMU7GKKYhlNK1IRmmkYqkx7kZGKSpSM0wrTuTYZikIp1FUBGRTSPSpSKaRTTC3YjoIzTyKaRincRGVxTcVLSFQar1CxCRTcYqUjFNIpWAjIzTSMVIRSUJhYjoIzTitNxincQwrTcVLSFaq4WIiM00jFSEUlO5OwymlfSnlfSkqkw3I6KeRmmkYp3FYaRTSKfRjNO4EVIRmpCtNxVJisR4xRT6aR6UwuNIzTSMU+incVj1miiivkiAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOdopSKSvVOsaR6UlPpCM07juNIzTCtSEYpKdwsR0U8jNNIxVCGFfSkp9BGadwuRkZphXFSkYpKaYWIqMU8rTCMVVxDSKTFPpMUw3IytNqUimkVVw2GU0r6U8ikp3AiIppGamIBphXFG4rEZGKQjNPxSFaWwEZWm1JSEZp3FYZTStPIxSVQEeKaRmpSM00rTTFbsRkYpKfSEVQiMrTSMVJRjNO4WI6QjNPK02qEMIpuKlppX0p3DcjIzSEYp5FJTuLY9Wooor5QzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5/FFPIpuK9S51tDcUlOoxTC42kIpcUUDGUU+mkVVxjCtNqSkIzTuKwykIpxGKSmIZSEZqSmkU7jIytNqWkK5qrisR0hFOIxSUxDMU0ipMUhFO4WIyMUlSEU0r6VVxEZXNMIxUtBGadxkJFNIqUrTcUW7C2I6aVqQimkYpXDcjop5GaaVqriGlaYRUlBGadwIqaRUpWmYqritYZSEZp5GaQjFMW5GRikqSmlfSquKw0jNNIp1FMD1GiiivljIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDEpCM0tFekdowj1pMVJSFfSncW5HSEU8im4pitYbRTqTFMLjSM00jFPop3HcZSFaeV9KbTuPcjIxRUmKaVp3JsMIzSEYp1FO4XGYphWpSvpTapMNyLGKKkIzTCuKpMQ3FIRTqMUwIyKaRipCKTFNMLEdIVBp5FNxiquBGVxTcVNTSvpRuKxCV9KSpCKQilawEZWmkYqQjFJTTCxHSEZp5Wm0xDCtNqWmlaq4rEZX0ptSEUhGaq4tiMjNNK4qQjFJTuFrnptFFFfMGIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGLikp1FeiddxtFKRSUxgRmmkYp1FAyPFJUhFNI9aq4rDCKSnkUlMWw2gjNLikoAaRikp9IRmncdxhGaaRin4xRVXCxHQRmnFabimIaRikp9IRmncdyMrTSMVIRigjNNMViKkxTytNqhDSKaRUlJincNyIj0pKkIpCKq4tiMjNNK4qQjFJTuMixTStTFQaYRiiwrEVIRmpCKaRSAjIxSVJTStUmKwwjNNK08jFFMCLFIRmpStMIppit2PSaKKK+bMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMWlzQRSV3JnWLRikpapMBuKKdSYpjuJRRRTAaRTSKkpCM07jI6MU8imkU7k2GYop1JimFxKaR6U6imMZQRmnEZpCMU7jIytJUlIRmncVhlNK+lPIxSUxDKQjNPIzSEYp3HuRFSKSpaaVqrktDMU0inEYoqgGEU0rUmKQincLdiKinkU0incQwr6UwipaQgGqGQkUhGKkK4puKVhbDMZppWpCtNpJgR0U8jNNIxVXEeiUUUV86c4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGPSYpKXNdh0piUU6kxTuVcTNLSUVSYC0hFLmiqTAbRS4pKYwpCPSlooGMIpuKlxmmkU7itcZSYp2KSmLYbRTsU3FMBCKbT6Kdx3GU0rTyKSmPcjop5GaaRincmw0im0+iquFyMjNNK1IRSU0wsRUVIVzTCMVVxDSKaRT6TFMCMimkYqUikIpphYjppXNSFfSm1VwIiKQipiM0wrRuKxERikqTFNIpbAd/RRRXz5zBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAYtFFFdpsGadmm0UDTHYpuKUGlpFpjaKXFJTTGLRSUZqkwAikp1GKoLjaKMUUxiEZppHrT6KLjIyKSnlfSkIqrisMxSU7FFMQ2kIzTsUlAxhGKKfSFfSncdxhWmEYqSjFVcViOkIzTytNpiGEYoxT6Qr6U7jIitNxipaQjNVcViOkxTiuKSmIaRTSKkxTSKdw3IyMUlSEU0iquIYVBphXFSYxRTuM7iiiivnjlCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAx6TFLRXYajaKdSYp3HcSiiigBc0tNpc0WKTAikp1Jilcu4lLSUVSYC0mKKWqTAbRTqTFMdxKCM0UUwGkYpuKkpCKdwI6TFPI9aTFMVrDKKdSEUwuIRmmkYp1FMYykIzTyKbjFO49xhGKSpKaVp3FYaRmmkYp2KKYhlNK1IRmm4xVJj3IyMUlSkZphWncmwzFIRTqKoCMimkelS4puKaYW7HaUUUV4ByhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAYtLmkortKTHUUmaXNIpMTFJTqKLjuNopSKSmMKUGkooHcdSYpKXNIpMSinYpuKdyri5opKKpMBSKbinUVVwG0UuKSmMKaRTqKBkZFJUhGaaRTuKw3FNxT8UlULYbRS4pKAGkelJT6QjNO47jSM0wrUhGKSncLEdFPK5ppGKoQwj0pKfSEZp3C4wrmmFcVKRikpphYioxTytMIxVXEdjRRRXhHKFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBi0UZortTuCdwooooGLmlptFFhpjqMUmaWkUNxRTqTFO47iUUUUDFzS02iiw0xSKSlzS0i0xtGaXFJVJjFopKWqTATFJTqQimO4lFFFMBCPSmkU+jGaLjIsUU8jFNxVXJaGkUlOoxTC42kIpcUUDGUU/GaaRVXGMK02pKQjNO4rDKQinEYpKYhlIRmpKaRTuM6uiiivFOMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDEooorqIFopKXNNMpS7hRRRVFBS5pKKAH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lX8UyLsFw8JCFQONxOMHjHfNdXikqlB83NcyqZjTnhlhvZKy1Tu7pv8ArY808XeHLzTNWOt6ajNEZBK2wZMT5znHoTzW3YfEXSpbMPeiWC4UfNGqFgx/2T/jiuwqlNo+mXEnmT6daSv/AHngVj+ZFL2bTvFm39p0cRRjSxkHJx2knZ27PTU8tFtd+N/FMtxDA0cDuN744jQYHJ/vY7f0r15I1jjVEGFUAAe1JHHHCgSJFRB0VRgCn5pwhy69TLMMy+t8kIx5YQVktzx6H/kpJ/7Cbf8Aow17BXkEP/JSj/2FG/8ARhr2DFRQ6npcQ/FR/wAKPHvGP/I9XX+/F/6Atew1494x/wCR6uv9+L/0Ba9gp0X70vUM6/3XC/4f0iLSYpaK6rnzo2ilxSUxhSEelLRQMYRTcVKRmmkU7itc3aKKK8w4wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOeooorpOFOwtFJRmqTKTuLSg0lFModRTaXNKxSYtGcUUUDHA5paZSg4pFJjqKAc0UDClpKKExp2FoozRVplp3CiiigYuaWm0UWGmOopM0tIq4mKSnUmKLjuJWbrWt2mg2YubvzCrNtVUXJY4zj9K0qa6JIhR1VlPVWGQabvbQ1pOCmnUV11V7fieM6TdfbfHFtd7Nnn33m7c5xufOP1r17U9TttJsJLy6LCFMA7VyeTgVSXwvoiX8d7Hp8cc8bB1aNmUAjvtBx+laxAYEEAg8EHvWVOm4p3PXzTMaGLq05Qi1GKs1/k9fvPEtZ1NNZ8Sy38cbRpLIm1W64AC8/lXt2Kx7nwrod3OJ5tOi8wHOYyU59wpGa2qKcHFtvqPNMxo4uFKFGLSgra/K35DaKXFJWqZ5AtFJS5qkwExSU6jFUFxtFGKKYzbooorzTjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA50GlplKDiuk81SHUUgOaWgsKWkopplKQtFJmlqkygzTs02iiw0x1FJmlpFJhTg3rTaKB3H0UwHFOBzSKTFooooGLRSUZpplKQtFFFUWFGaKKAHZoptLmlYpMWkxS0UFDaKdim4p3HcKKKKAFzS02lzRYpMMUlOpMUXLuJS0lFNMBaTFFLVJgbNFFFeecgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHN0UmaWuo8tMKUH1pKKBp2H0UwHFOBzSLTFooooGLmikoqky1IWiiimMXNLTaXNFikxaKKKRQoNOplFIaY+ikBpaCgpc0lFA07C0UlLVJlJhRRRTKClzSUUDTHUUmaWkUmIRSU6ii47jaKXFJTGFKDSUUDuOpMUlLmkUmJRTsU3FO5RtUUUVxHIFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBzNFFFdZ5AuaWm0ZpDTHUUZooKFBxTgc0yigpMfRSBvWlpFJ3CjNFFFyk7C0UlLVJlp3ClzSUUx3HUU3NOBpWKTClBxSUUDHA5paZSg+tIpMdRRRQMXNFJRTTsUmLRRmiqTuUncKKKKBi5pabRmiw0x1GKTNLSKG4op1IRTuO4lFFFAxc0tNoosNM2qKKK4jAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDlwcU4HNMorpueNcfRSBvWlplBSg0lFMB1FNpQaRSYtKDikooKHA5paZSg0ilLuOooooKClpKKaZSl3FoozRVXKFzS02iixSY6ikzS0igzinA5ptFIaY+img4pwOaCkwooooGLRSUuaaZSl3CiiiqKClzSUUAOoptLmlYpMWkxS0UFDaKUikpjNqiiiuIxCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5aikBpa6TxQoBxRRQA4HNLTKUGncq46iiimMXNLTaKQ0x1FJmloKuFOBptFA07D6KaDilBzSLTuLRRRQNOwtFJRmqTLTuLRmiimUOzRTaXNKw0xaKKKChwb1paZSg4pDTHUUgOaWgoKWkoouNOwtFJmlqky07hRRRTGGadmm0UWGmOopM0tIpM2KKKK4zMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDk6UHFJRXUeEPBzRTKcG9aRSYtFFFAwpwNNooHcfRTQcUoOadx3FozRRTGOzRTaUGkUmLRRRQMUN606mUA4pFKQ+ikBzS0FhS5pKKaY0xaKSlqky07hSg0lFA0x1FIDS0ikwpQaSigY+imU4GkUmLRRRQMXNFJRTTKUhaKKKq5dwooooA2qKKK4hBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcnRRRXUeEFFFFAADinA5ptFAJj6KaDTs5pFphRRRQAob1p1MoBxTuO4+ikBzS0FBS5pKKYJjqKbmnZpFphSg4pKKBj85oplOB9aRSkLRRRQUGaWkopplKXcWiiiqKFzS02jNFikx1FANFIoUHFKDmm0Uhpj6KaG9adQVcKM0UUDFopKXNUmUpG1RRRXGMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDk6KKK6j55SsFFFFBadwooooGFFFFADgaWmUoOKQ0x1FIDmloKClBxSUUAPBzRTKcG9adyri0UUUxig0tNopDTHUUgNLQUKDilBzTaKBp2H0U0GnUi07hRRRQUnYWikpc1SZSdwpc0lFModRTaXNKxSYtAOKKKBjgc0tMpQcUikx1FAOaKBm3RRRXKaBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcnRRRXUfOBRRRQMKKKKClLuFFFFBYUUUUAFKG9aSigLj6KZnFOBzSKTFooooGAOKcDmm0UDuPopoNOpjuFLmkopjHUU2lzSKTFooooGOBpaZSg4pFqXcdRQDmigoKWkopplKQtFJmlqkygzTs02iiw0x1FIDS0ikwpwPrTaKBpm9RRRXIbhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2Q==", "export_temp_image": false, "force_export_images": false, "flat_export": false, diff --git a/SquareLineProj/backup/ESP32S3_UI_backup08.zip b/SquareLineProj/backup/ESP32S3_UI_backup08.zip index 623de15..213e35c 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup08.zip and b/SquareLineProj/backup/ESP32S3_UI_backup08.zip differ diff --git a/components/FluxUI/CMakeLists.txt b/components/FluxUI/CMakeLists.txt index ca45389..5ee80d3 100644 --- a/components/FluxUI/CMakeLists.txt +++ b/components/FluxUI/CMakeLists.txt @@ -42,6 +42,7 @@ fonts/ui_font_symbolsalibaba.c ui_event_wifi.c ui_event_debug.c ui_event_light.c +ui_event_homePage.c ) idf_component_register(SRCS ${SOURCES} diff --git a/components/FluxUI/ui_event_homePage.c b/components/FluxUI/ui_event_homePage.c new file mode 100644 index 0000000..3d11929 --- /dev/null +++ b/components/FluxUI/ui_event_homePage.c @@ -0,0 +1,402 @@ +/** + * @file ui_event_homePage.c + * @brief 此文件中实现了主页的UI事件处理函数 + * + * 核心逻辑:1.处理标准变更事件;2.处理测试指令下发事件 + * + * @author wang xiang en + * @date 2025-04-19 + * @version 版本号 + * @copyright 版权声明((C)2025, YUWELL MEDTECH Co.ltd) + */ +#include "ui.h" +#include "FluxProtocol.h" +/* 使用定时器 */ +#include + +/* 声明需要调用的静态函数 */ +static void comulate_time_set(void); + +/* 更新当前标准体积数据 */ +static void standard_volume_refresh(void); + +/* 定时器执行函数声明 */ +static void comulate_result_read(lv_timer_t * timer); + +/************************************ 呼吸频率更改响应函数 start ******************************************* */ +/** + * @brief 呼吸频率减操作 + * + * 只对Spinbox进行-5,协议发送在Spinbox的值更改响应事件中。 + * + * @param[in] e not used + */ +void on_buttonRateMinus_clicked(lv_event_t * e) +{ + uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate); + lv_spinbox_set_value(ui_pageHome_spinboxRate,value-5); +} + +/** + * @brief 呼吸频率加操作 + * + * 只对Spinbox进行+5,协议发送在Spinbox的值更改响应事件中。 + * + * @param[in] e not used + */ +void on_buttonRatePlus_clicked(lv_event_t * e) +{ + uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate); + lv_spinbox_set_value(ui_pageHome_spinboxRate,value+5); +} + +/** + * @brief 呼吸频率值改变响应事件,向流量计下发累时。 + * + * 通过485协议下发命令,实现流量计的累时。 + * 使用0x06指令,只修改单个16bit寄存器 + * + * @note 协议格式: + * 例如:01 06 00 02 41 F0 18 1E + * + * 意思是: + * 01:设备地址 + * 06:功能码,修改单个寄存器 + * 00 02:寄存器地址,0x00 02 + * 41 F0:需要发送的数据 41 F0 00 00 对应浮点数 30 + * + * @param[in] e not used + */ +void on_spinboxRate_valueChanged(lv_event_t * e) +{ + /* 更改下方测试结果部分的频率信息 */ + FluxMachineData.breathRate = lv_spinbox_get_value(e->target); + lv_label_set_text_fmt(ui_pageHome_labelResultRate,"%ld",FluxMachineData.breathRate); + + /* 刷新标准体积数据,频率不同标准体积也不同。 */ + standard_volume_refresh(); + + /* 根据设定的出气次数设定积分时间 */ + comulate_time_set(); + + /* 下发计算好的积分时间*/ + uint8_t bytes[4]; + float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); + memcpy(bytes, &time, 4); + + /* 下发命令 */ + flux_frame.ADDR = FLUX_ADDR; + + /* 0x06指令 */ + flux_frame.FUNC = FLUX_FUNC_SET_SINGLE; + + /* 寄存器地址 0x00 02 */ + flux_frame.DATA[0] = 0x00; + flux_frame.DATA[1] = 0x02; + + /* 只修改时间寄存器(32bit)的前两个字节数据(16bit) */ + flux_frame.DATA[2] = bytes[3]; + flux_frame.DATA[3] = bytes[2]; + + ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); +} + +/** + * @brief 根据spinbox中的值修改 pageFluxRead 页中的显示积分时间 + * + * @attention 不能在spinboxTime_valueChanged中调用!! + * 否则容易造成 死循环。 + * + */ +static void comulate_time_set(void) +{ + /* 获取当前呼吸频率 */ + FluxMachineData.breathRate = lv_spinbox_get_value(ui_pageHome_spinboxRate); + + uint16_t currntTimes = lv_dropdown_get_selected(ui_pageFluxRead_dropdownPulseTimes); + + ESP_LOGI("comulateTimeSend","currentTimes:%d",currntTimes); + + if (currntTimes == 0)//进行十次积分 + { + /* 10次脉冲计量 */ + switch (FluxMachineData.breathRate) + { + case 15: + /*呼吸频率为15BPM时,积分时间设定为40秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40); + break; + + case 20: + /*呼吸频率为20BPM时,积分时间设定为30秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30); + break; + case 25: + /*呼吸频率为25BPM时,积分时间设定为24秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,24); + break; + case 30: + /*呼吸频率为30BPM时,积分时间设定为20秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,20); + break; + case 35: + /*呼吸频率为35BPM时,积分时间设定为16秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,18); + break; + case 40: + /*呼吸频率为40BPM时,积分时间设定为15秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,15); + break; + default: + break; + } + }else if (currntTimes == 1) + { + /* 20次脉冲 */ + switch (FluxMachineData.breathRate) + { + case 15: + /*呼吸频率为15BPM时,积分时间设定为40秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,80); + break; + + case 20: + /*呼吸频率为20BPM时,积分时间设定为30秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60); + break; + case 25: + /*呼吸频率为25BPM时,积分时间设定为24秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,48); + break; + case 30: + /*呼吸频率为30BPM时,积分时间设定为20秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40); + break; + case 35: + /*呼吸频率为35BPM时,积分时间设定为16秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,36); + break; + case 40: + /*呼吸频率为40BPM时,积分时间设定为15秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30); + break; + default: + break; + } + }else if (currntTimes == 2) + { + /* 30次脉冲 */ + switch (FluxMachineData.breathRate) + { + case 15: + /*呼吸频率为15BPM时,积分时间设定为40秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,120); + break; + + case 20: + /*呼吸频率为20BPM时,积分时间设定为30秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,90); + break; + case 25: + /*呼吸频率为25BPM时,积分时间设定为24秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,72); + break; + case 30: + /*呼吸频率为30BPM时,积分时间设定为20秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60); + break; + case 35: + /*呼吸频率为35BPM时,积分时间设定为16秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,54); + break; + case 40: + /*呼吸频率为40BPM时,积分时间设定为15秒*/ + lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,45); + break; + default: + break; + } + + } +} + +/** + * @brief 更新测试时间 + * + * 修改单次测试脉冲总数10 20 30 次后,更新测试时间, + * 向流量计下发测试时间。 + * + * @param[in] e not used + */ +void on_dropdownPulseTimes_valueChanged(lv_event_t * e) +{ + /* 根据脉冲次数设置测试时间 */ + comulate_time_set(); + + /* 下发测试时间 */ + uint8_t bytes[4]; + float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); + memcpy(bytes, &time, 4); + + flux_frame.ADDR = FLUX_ADDR; + flux_frame.FUNC = FLUX_FUNC_SET_SINGLE; + + flux_frame.DATA[0] = 0x00; + flux_frame.DATA[1] = 0x02; + flux_frame.DATA[2] = bytes[3]; + flux_frame.DATA[3] = bytes[2]; + + ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); +} + + + +/************************************ 呼吸频率更改响应函数 end ******************************************* */ + +/************************************ 挡位更改响应函数 start ******************************************* */ +/** + * @brief 挡位切换后的响应事件 + * + * 只更新标准,不通过485下发数据。 + * + * @note 加减操作已在SquareLine工程内部实现,无需手动调用。 + * @param[in] e not used + */ +void on_spinboxStage_valueChanged(lv_event_t * e) +{ + /*获取当前挡位并更新标准体积数据*/ + int32_t value = lv_spinbox_get_value(e->target); + lv_label_set_text_fmt(ui_pageHome_labelResultStage,"%ld",value); + + standard_volume_refresh(); +} + +/** + * @brief 标准体积数据刷新 + * + * 修改标准体积数据,设置最大最小值。 + * 最后根据标准判定当前读取到的体积流量是否合格 + * + */ +static void standard_volume_refresh(void) +{ + /*获取当前的呼吸频率及挡位*/ + fluxProtocol.currentBPM = lv_spinbox_get_value(ui_pageHome_spinboxRate); + fluxProtocol.currentStage = lv_spinbox_get_value(ui_pageHome_spinboxStage); + + /*获取当前测试设备类型*/ + fluxProtocol.currentDevice = lv_dropdown_get_selected(ui_pageSetting_dropdownDeviceType); + + if (fluxProtocol.currentDevice == Spirit3) + { + /*判定当前测试设备为Spirit-3*/ + /*获取标准体积数据*/ + fluxProtocol.nominalVolumeStage = Spirit3_Volume[fluxProtocol.currentStage-1]; + }else if (fluxProtocol.currentDevice == Spirit6) + { + /*判定当前测试设备为Spirit-6*/ + fluxProtocol.nominalVolumeStage = Spirit6_Volume[fluxProtocol.currentStage-1]; + }else if(fluxProtocol.currentDevice == YU_Lite8) + { + /*判定当前测试设备为YU-Lite-8*/ + fluxProtocol.nominalVolumeStage = YULite8_Volume[fluxProtocol.currentStage-1]; + } + + float Volume_nominal = fluxProtocol.nominalVolumeStage /fluxProtocol.currentBPM*1.0; + float VolumeMax = Volume_nominal*1.15; + float VolumeMin = Volume_nominal*0.85; + + lv_label_set_text_fmt(ui_pageHome_labelNominalVolume,"%.2f",Volume_nominal); + lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMax,"%.2f",VolumeMax); + lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMin,"%.2f",VolumeMin); + + /*根据标准值判定当前检测结果是否合格*/ + RefreshResult(); +} + +/************************************ 挡位更改响应函数 end ******************************************* */ + +/************************************ 开始测试按键按下 start ******************************************* */ +/** + * @brief 开始测试按键按下后响应事件 + * + * @details 执行流程: + * 1. 下发测试时间,确保测试时间正确 + * 2. 创建定时器,配置定时器计时时间 + * 3. 下发启动测试指令 + * + * @param[in] e not used + */ +void on_buttonStartTest_clicked(lv_event_t * e) +{ + + /* 开始测试前 下发积分时间,确保测试时间正确 */ + comulate_time_set(); + uint8_t bytes[4]; + float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); + memcpy(bytes, &time, 4); + + /*下发命令*/ + flux_frame.ADDR = FLUX_ADDR; + flux_frame.FUNC = FLUX_FUNC_SET_SINGLE; + + flux_frame.DATA[0] = 0x00; + flux_frame.DATA[1] = 0x02; + flux_frame.DATA[2] = bytes[3]; + flux_frame.DATA[3] = bytes[2]; + + ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); + + /*创建定时器*/ + lv_timer_t * comulateResultReadTimer; + /* 基于定时器进行任务调用 */ + comulateResultReadTimer = lv_timer_create(comulate_result_read, 500, NULL); + /* 只重复一次 */ + lv_timer_set_repeat_count(comulateResultReadTimer, 1); + + /* 根据测试时间确定定时器延时 */ + int32_t timeS = lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); + lv_timer_set_period(comulateResultReadTimer, timeS*1000+2000); + + /*下发启动测试指令*/ + flux_frame_start.ADDR = FLUX_ADDR; + flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE; + + flux_frame_start.DATA[0] = 0x00; + flux_frame_start.DATA[1] = 0x01; + flux_frame_start.DATA[2] = 0x00; + flux_frame_start.DATA[3] = 0x01; + ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start)); + + /* 修改Label 开始测试 */ + lv_label_set_text(ui_pageHome_labelStartTest,"Testing..."); + + /* 开始计时 */ + lv_timer_enable(comulateResultReadTimer); +} + +/** + * @brief 定时器响应函数 + * + * 时间到达后执行 + * 定时器响应函数,用于定时获取测试结果,并更新界面。 + * + * @param[in] timer not used + */ +static void comulate_result_read(lv_timer_t * timer) +{ + /*下发数据获取指令*/ + /* 起始地址为 0x00 */ + flux_frame.DATA[0] = 0; + flux_frame.DATA[1] = 0; + + /* 数据长度为 120 */ + flux_frame.DATA[2] = 0; + flux_frame.DATA[3] = 120; + flux_frame.FUNC = FLUX_FUNC_READ; + + /*下发问询120个参数*/ + ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); + + lv_label_set_text(ui_pageHome_labelStartTest,"Test Complete!"); +} \ No newline at end of file diff --git a/components/FluxUI/ui_events.c b/components/FluxUI/ui_events.c index 02be496..b0ed9d2 100644 --- a/components/FluxUI/ui_events.c +++ b/components/FluxUI/ui_events.c @@ -1,8 +1,6 @@ /** - * @file ui_event_wifi.c - * @brief 此文件中专门实现WIFI事件的处理 - * - * 仅仅Debug模式下运行 + * @file ui_event.c + * @brief 此文件中专门实现事件的处理 * * @author wang xiang en * @date 2025-04-19 @@ -24,34 +22,20 @@ #include "FluxProtocol.h" +#if CONFIG_WIFI_SCAN_ENABLE + /*包含SNTP的头文件*/ #include "lwip/apps/sntp.h" -#include +#endif - -/*更新当前测试标准*/ -static void standardVolumeRefresh(void); - -/*根据呼吸频率调整积分时间*/ -static void comulateTimeSend(void); - -/*创建定时器*/ -static void comulateResultRead(lv_timer_t * timer) -{ - /*下发数据获取指令*/ - flux_frame.DATA[1] = 0; - flux_frame.DATA[3] = 120; - flux_frame.FUNC = 0x03; - - /*下发问询120个参数*/ - ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); - - lv_label_set_text(ui_pageHome_labelStartTest,"Test Complete!"); -} - - -/*设备类型选择回调函数*/ +/** + * @brief 更改测试的设备类型 + * + * 设备类型选择回调函数 + * + * @param[in] e 设置页的设备下拉菜单 + */ void on_dropdownDeviceType_valueChanged(lv_event_t * e) { char buf[32]={}; @@ -66,11 +50,15 @@ void on_dropdownDeviceType_valueChanged(lv_event_t * e) }else{ lv_spinbox_set_range(ui_pageHome_spinboxStage,1,6); } - } - -/*SD卡读取回调函数*/ +/** + * @brief 读取当前SD卡剩余空间信息并更新页面 + * + * SD卡读取回调函数 + * + * @param[in] e not used + */ void on_buttonReadSDCard_clicked(lv_event_t * e) { /*首先清空显示页面*/ @@ -88,157 +76,22 @@ void on_buttonReadSDCard_clicked(lv_event_t * e) } - -/************************************ 测试流程函数 ******************************************* */ -/*pageHome 开始测试按键按下回调函数*/ -int32_t timeS = 0; -void on_buttonStartTest_clicked(lv_event_t * e) -{ - - /*下发积分时间*/ -#if 1 - comulateTimeSend(); - uint8_t bytes[4]; - float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); - memcpy(bytes, &time, 4); - - /*下发命令*/ - flux_frame.ADDR = FLUX_ADDR; - flux_frame.FUNC = FLUX_FUNC_SET_SINGLE; - - flux_frame.DATA[0] = 0x00; - flux_frame.DATA[1] = 0x02; - flux_frame.DATA[2] = bytes[3]; - flux_frame.DATA[3] = bytes[2]; - - ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); - -#endif - /*基于定时器进行任务调用*/ - lv_timer_t * comulateResultReadTimer; - comulateResultReadTimer = lv_timer_create(comulateResultRead, 500, NULL); - lv_timer_set_repeat_count(comulateResultReadTimer, 1); - - - timeS = lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); - lv_timer_set_period(comulateResultReadTimer, timeS*1000+2000); - - /*下发启动测试指令*/ - flux_frame_start.ADDR = FLUX_ADDR; - flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE; - - flux_frame_start.DATA[0] = 0x00; - flux_frame_start.DATA[1] = 0x01; - flux_frame_start.DATA[2] = 0x00; - flux_frame_start.DATA[3] = 0x01; - ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start)); - - lv_label_set_text(ui_pageHome_labelStartTest,"Testing..."); - - lv_timer_enable(comulateResultReadTimer); - -} - - -/*pageHome 呼吸频率减操作*/ -void on_buttonRateMinus_clicked(lv_event_t * e) -{ - uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate); - lv_spinbox_set_value(ui_pageHome_spinboxRate,value-5); -} - -/*pageHome 呼吸频率加操作*/ -void on_buttonRatePlus_clicked(lv_event_t * e) -{ - uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate); - lv_spinbox_set_value(ui_pageHome_spinboxRate,value+5); -} - - -/*pageHome 切换挡位之后*/ -void on_spinboxStage_valueChanged(lv_event_t * e) -{ - /*获取当前挡位并更新标准体积数据*/ - int32_t value = lv_spinbox_get_value(e->target); - lv_label_set_text_fmt(ui_pageHome_labelResultStage,"%ld",value); - - standardVolumeRefresh(); -} - - -/*pageHome 频率值改变*/ -void on_spinboxRate_valueChanged(lv_event_t * e) -{ - /*更改下方测试结果部分的频率信息*/ - FluxMachineData.breathRate = lv_spinbox_get_value(e->target); - lv_label_set_text_fmt(ui_pageHome_labelResultRate,"%ld",FluxMachineData.breathRate); - - /*刷新标准体积数据*/ - standardVolumeRefresh(); - - /*下发测试时间*/ - comulateTimeSend(); - - uint8_t bytes[4]; - float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); - memcpy(bytes, &time, 4); - - /*下发命令*/ - flux_frame.ADDR = FLUX_ADDR; - flux_frame.FUNC = FLUX_FUNC_SET_SINGLE; - - flux_frame.DATA[0] = 0x00; - flux_frame.DATA[1] = 0x02; - flux_frame.DATA[2] = bytes[3]; - flux_frame.DATA[3] = bytes[2]; - - ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); - -} - - -/*pageHome 标准体积数据刷新*/ -static void standardVolumeRefresh(void) -{ - /*获取当前的呼吸频率及挡位*/ - fluxProtocol.currentBPM = lv_spinbox_get_value(ui_pageHome_spinboxRate); - fluxProtocol.currentStage = lv_spinbox_get_value(ui_pageHome_spinboxStage); - - /*获取当前测试设备类型*/ - fluxProtocol.currentDevice = lv_dropdown_get_selected(ui_pageSetting_dropdownDeviceType); - - if (fluxProtocol.currentDevice == Spirit3) - { - /*判定当前测试设备为Spirit-3*/ - /*获取标准体积数据*/ - fluxProtocol.nominalVolumeStage = Spirit3_Volume[fluxProtocol.currentStage-1]; - }else if (fluxProtocol.currentDevice == Spirit6) - { - /*判定当前测试设备为Spirit-6*/ - fluxProtocol.nominalVolumeStage = Spirit6_Volume[fluxProtocol.currentStage-1]; - }else if(fluxProtocol.currentDevice == YU_Lite8) - { - /*判定当前测试设备为YU-Lite-8*/ - fluxProtocol.nominalVolumeStage = YULite8_Volume[fluxProtocol.currentStage-1]; - } - - float Volume_nominal = fluxProtocol.nominalVolumeStage /fluxProtocol.currentBPM*1.0; - float VolumeMax = Volume_nominal*1.15; - float VolumeMin = Volume_nominal*0.85; - - lv_label_set_text_fmt(ui_pageHome_labelNominalVolume,"%.2f",Volume_nominal); - lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMax,"%.2f",VolumeMax); - lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMin,"%.2f",VolumeMin); - - /*根据标准值判定当前检测结果是否合格*/ - RefreshResult(); -} - - -/*pageFluxRead 获取当前流量数据*/ +/** + * @brief pageFluxRead 向流量计索要120个参数 + * + * 获取当前流量数据 + * + * @param[in] e not used + */ void on_buttonReadFlux_clicked(lv_event_t * e) { + /*下发数据获取指令*/ + /* 起始地址为 0x00 */ + flux_frame.DATA[0] = 0; flux_frame.DATA[1] = 0; + + /* 数据长度为 120 */ + flux_frame.DATA[2] = 0; flux_frame.DATA[3] = 120; flux_frame.FUNC = FLUX_FUNC_READ; @@ -257,7 +110,6 @@ void on_labelTestVolume_valueChanged(lv_event_t * e) #endif } - /*更新工作模式 —— 功能已屏蔽*/ void on_dropDownWorkmode_valueChanged(lv_event_t * e) { @@ -266,7 +118,6 @@ void on_dropDownWorkmode_valueChanged(lv_event_t * e) #endif } - /*向流量计下发计时时间*/ void on_spinboxTime_valueChanged(lv_event_t * e) { @@ -320,152 +171,18 @@ void on_spinboxTime_valueChanged(lv_event_t * e) } -/*启动流量计*/ +/** + * @brief pageFlux页面中 启动按键(Not Used) + * + * 启动流量计 开始测试 + * + * @param[in] e not used + */ void on_buttonFluxStart_clicked(lv_event_t * e) { FLUX_TEST_START; } - -/*根据spinbox中的值下发积分时间*/ -/*注意:此处修改了spinboxTime 的值,不可以在spinboxTime_valueChanged中调用!!*/ -static void comulateTimeSend(void) -{ - /*获取当前呼吸频率*/ - FluxMachineData.breathRate = lv_spinbox_get_value(ui_pageHome_spinboxRate); - - uint16_t currntTimes = lv_dropdown_get_selected(ui_pageFluxRead_dropdownPulseTimes); - - ESP_LOGI("comulateTimeSend","currentTimes:%d",currntTimes); - - if (currntTimes == 0) - { - /* 10次脉冲计量 */ - switch (FluxMachineData.breathRate) - { - case 15: - /*呼吸频率为15BPM时,积分时间设定为40秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40); - break; - - case 20: - /*呼吸频率为20BPM时,积分时间设定为30秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30); - break; - case 25: - /*呼吸频率为25BPM时,积分时间设定为24秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,24); - break; - case 30: - /*呼吸频率为30BPM时,积分时间设定为20秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,20); - break; - case 35: - /*呼吸频率为35BPM时,积分时间设定为16秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,18); - break; - case 40: - /*呼吸频率为40BPM时,积分时间设定为15秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,15); - break; - default: - break; - } - }else if (currntTimes == 1) - { - /* 20次脉冲 */ - switch (FluxMachineData.breathRate) - { - case 15: - /*呼吸频率为15BPM时,积分时间设定为40秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,80); - break; - - case 20: - /*呼吸频率为20BPM时,积分时间设定为30秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60); - break; - case 25: - /*呼吸频率为25BPM时,积分时间设定为24秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,48); - break; - case 30: - /*呼吸频率为30BPM时,积分时间设定为20秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40); - break; - case 35: - /*呼吸频率为35BPM时,积分时间设定为16秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,36); - break; - case 40: - /*呼吸频率为40BPM时,积分时间设定为15秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30); - break; - default: - break; - } - }else if (currntTimes == 2) - { - /* 30次脉冲 */ - - switch (FluxMachineData.breathRate) - { - case 15: - /*呼吸频率为15BPM时,积分时间设定为40秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,120); - break; - - case 20: - /*呼吸频率为20BPM时,积分时间设定为30秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,90); - break; - case 25: - /*呼吸频率为25BPM时,积分时间设定为24秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,72); - break; - case 30: - /*呼吸频率为30BPM时,积分时间设定为20秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60); - break; - case 35: - /*呼吸频率为35BPM时,积分时间设定为16秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,54); - break; - case 40: - /*呼吸频率为40BPM时,积分时间设定为15秒*/ - lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,45); - break; - default: - break; - } - - } - -} - -/*获取呼吸脉冲次数*/ -void on_dropdownPulseTimes_valueChanged(lv_event_t * e) -{ - /*下发测试时间*/ - comulateTimeSend(); - - uint8_t bytes[4]; - float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime); - memcpy(bytes, &time, 4); - - /*下发命令*/ - flux_frame.ADDR = FLUX_ADDR; - flux_frame.FUNC = FLUX_FUNC_SET_SINGLE; - - flux_frame.DATA[0] = 0x00; - flux_frame.DATA[1] = 0x02; - flux_frame.DATA[2] = bytes[3]; - flux_frame.DATA[3] = bytes[2]; - - ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame)); -} - - /*不执行任何操作*/ void on_buttonTimeUpdate_clicked(lv_event_t * e) { diff --git a/sdkconfig b/sdkconfig index d488d2e..75de70d 100644 --- a/sdkconfig +++ b/sdkconfig @@ -498,13 +498,13 @@ CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y CONFIG_ESPTOOLPY_FLASHFREQ="80m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" +CONFIG_ESPTOOLPY_FLASHSIZE="16MB" CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE=y CONFIG_ESPTOOLPY_BEFORE_RESET=y # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set