DevBoy: рд╕рд┐рдЧреНрдирд▓ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ

рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВ!

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ 4 рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕рд┐рдЧреНрдирд▓ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдП - рджреЛ рдПрдирд╛рд▓реЙрдЧ рдЪреИрдирд▓ рдФрд░ рджреЛ рдкреАрдбрдмреНрд▓реВрдПрдо рдЪреИрдирд▓ред



рдПрдирд╛рд▓реЙрдЧ рдЪреИрдирд▓


STM32F415RG рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ 12-рдмрд┐рдЯ DAC (рдбрд┐рдЬрд┐рдЯрд▓-рд╕реЗ-рдПрдирд╛рд▓реЙрдЧ) рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдЪреИрдирд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рд╕реАрдзреЗ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдХреА рдПрдХ рд▓рд╣рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЯрд╛рдЗрдорд░ рдФрд░ рдбреАрдПрдордП рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд╕рд╛рде рдбреАрдПрд╕реА рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реИред рдЯрд╛рдЗрдорд░ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдмрджрд▓рдХрд░, рдЖрдк рдЙрддреНрдкрдиреНрди рд╕рд┐рдЧреНрдирд▓ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

" рдХреНрд▓рд╛рд╕рд┐рдХ " рддрд░рдВрдЧреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рд╕рд╛рдЗрдирд╕реЙрдЗрдбрд▓, рдореЗрдиреНрдбрд┐рдпрд░, рддреНрд░рд┐рдХреЛрдгреАрдп рдФрд░ рдЖрд░реАред

рдЫрд╡рд┐

рдмрдлрд░ рдореЗрдВ рдЗрди рддрд░рдВрдЧреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ
// ***************************************************************************** // *** GenerateWave ******************************************************** // ***************************************************************************** Result Application::GenerateWave(uint16_t* dac_data, uint32_t dac_data_cnt, uint8_t duty, WaveformType waveform) { Result result; uint32_t max_val = (DAC_MAX_VAL * duty) / 100U; uint32_t shift = (DAC_MAX_VAL - max_val) / 2U; switch(waveform) { case WAVEFORM_SINE: for(uint32_t i = 0U; i < dac_data_cnt; i++) { dac_data[i] = (uint16_t)((sin((2.0F * i * PI) / (dac_data_cnt + 1)) + 1.0F) * max_val) >> 1U; dac_data[i] += shift; } break; case WAVEFORM_TRIANGLE: for(uint32_t i = 0U; i < dac_data_cnt; i++) { if(i <= dac_data_cnt / 2U) { dac_data[i] = (max_val * i) / (dac_data_cnt / 2U); } else { dac_data[i] = (max_val * (dac_data_cnt - i)) / (dac_data_cnt / 2U); } dac_data[i] += shift; } break; case WAVEFORM_SAWTOOTH: for(uint32_t i = 0U; i < dac_data_cnt; i++) { dac_data[i] = (max_val * i) / (dac_data_cnt - 1U); dac_data[i] += shift; } break; case WAVEFORM_SQUARE: for(uint32_t i = 0U; i < dac_data_cnt; i++) { dac_data[i] = (i < dac_data_cnt / 2U) ? max_val : 0x000; dac_data[i] += shift; } break; default: result = Result::ERR_BAD_PARAMETER; break; } return result; } 

рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ рд╕рд░рдгреА рдХреА рд╢реБрд░реБрдЖрдд, рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░, рдЕрдзрд┐рдХрддрдо рдорд╛рди рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рддрд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рд╕рд░рдгреА рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХреА рдПрдХ рд▓рд╣рд░ рдХреЗ рд▓рд┐рдП рдирдореВрдиреЛрдВ рд╕реЗ рднрд░ рдЬрд╛рдПрдЧреА рдФрд░ рдЖрдк рд╕рдордп-рд╕рдордп рдкрд░ рдбреАрдПрд╕реА рдореЗрдВ рдирдП рдореВрд▓реНрдп рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ DAC рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ: рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╕рдиреЗ рдХрд╛ рд╕рдордп ( DAC рдореЗрдВ рдирдпрд╛ рдорд╛рди рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдФрд░ рдЬрдм рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ ) 3 ms рд╣реИред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕рдордп рдЕрдзрд┐рдХрддрдо рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдиреНрдпреВрдирддрдо рд╕реЗ рдЕрдзрд┐рдХрддрдо рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиред рдЬрдм рдореЗрдиреНрдбрд░ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпреЗ рд▓рд┐рдЯрд░реЗрдб рдореЛрд░реНрдЪ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:



рдпрджрд┐ рдПрдХ рд╕рд╛рдЗрдирд╕реЛрдЗрдбрд▓ рддрд░рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рддреЛ рддрд░рдВрдЧреЛрдВ рдХреЗ рдХрд╛рд░рдг рдореЛрд░реНрдЪреЛрдВ рдХреА рд░реБрдХрд╛рд╡рдЯ рдЕрдм рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрд╡реГрддреНрддрд┐ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рд╛рдЗрдирд╕реЛрдЗрдбрд▓ рд╕рд┐рдЧреНрдирд▓ рддреНрд░рд┐рдХреЛрдгреАрдп рдПрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде, рд╕рдВрдХреЗрдд рдЖрдпрд╛рдо рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

1 KHz ( 90% рдЖрдпрд╛рдо ) рдкрд░ рдЬрдирд░реЗрд╢рди:



10 KHz ( 90% рдЖрдпрд╛рдо ) рдкрд░ рдЬрдирд░реЗрд╢рди:



100 KHz ( 90% рдЖрдпрд╛рдо ) рдкрд░ рдЬрдирд░реЗрд╢рди:



рдЪрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВ - рдХреНрдпреЛрдВрдХрд┐ рдирдП рдбреЗрдЯрд╛ рдХреЛ 4 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдбреАрдПрд╕реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, sawtooth рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЕрдиреБрдЧрд╛рдореА рдХрд┐рдирд╛рд░реЗ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХреЗрдд рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдЙрд╕ рдореВрд▓реНрдп рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдкрд╛рд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдореНрди рд╕реНрддрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдирдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ

200 KHz ( 90% рдЖрдпрд╛рдо ) рдкрд░ рдЬрдирд░реЗрд╢рди:



рдпрд╣рд╛рдВ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рддрд░рдВрдЧреЗрдВ рддреНрд░рд┐рдХреЛрдг рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓ рдЧрдИрдВред

рдбрд┐рдЬрд┐рдЯрд▓ рдЪреИрдирд▓


рдбрд┐рдЬрд┐рдЯрд▓ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдЯрд╛рдЗрдорд░ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкреАрдбрдмреНрд▓реВрдПрдо рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред 32-рдмрд┐рдЯ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЯрд╛рдЗрдорд░ рдкреНрд░реА-рдЯрд╛рдЗрдорд░ рдХреЛ рдЧрд┐рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЕрд╡рдзрд┐ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рджреВрд╕рд░реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд░реНрддрд╡реНрдп рдЪрдХреНрд░ рд▓реЛрдб рдХрд░реЗрдВред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЪрд╛рд░ рдЖрдпрддреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рдЧреНрдирд▓, рдЖрд╡реГрддреНрддрд┐ рдФрд░ рдЖрдпрд╛рдо / рдХрд░реНрддрд╡реНрдп рдЪрдХреНрд░ рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рдереАред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрдпрдирд┐рдд рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдбреЗрдЯрд╛ рдХреЛ рд╕рдлреЗрдж рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдЧреНрд░реЗ рдореЗрдВред



рдПрдиреНрдХреЛрдбрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛: рдмрд╛рдпрд╛рдВ рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЪрдпрдирд┐рдд рдЪреИрдирд▓ ( рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди ) рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд╕рд╣реА рдПрдХ рдЖрдпрд╛рдо / рдХрд░реНрддрд╡реНрдп рдЪрдХреНрд░ рдФрд░ рддрд░рдВрдЧ ( рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди ) рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрдЪ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬрдм рдЖрдк рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЪреИрдирд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЖрдк рдПрдХ рд╕рдХреНрд░рд┐рдп рдЪреИрдирд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддрд░рдВрдЧ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рджреЗрд╡рдХреЛрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рд╕рднреА UI рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╡рд╛рд▓реА рд╕рдВрд░рдЪрдирд╛
  // ************************************************************************* // *** Structure for describes all visual elements for the channel ***** // ************************************************************************* struct ChannelDescriptionType { // UI data UiButton box; Image img; String freq_str; String duty_str; char freq_str_data[64] = {0}; char duty_str_data[64] = {0}; // Generator data ... }; // Visual channel descriptions ChannelDescriptionType ch_dsc[CHANNEL_CNT]; 
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб
  // Create and show UI int32_t half_scr_w = display_drv.GetScreenW() / 2; int32_t half_scr_h = display_drv.GetScreenH() / 2; for(uint32_t i = 0U; i < CHANNEL_CNT; i++) { // Generator data ... // UI data int32_t start_pos_x = half_scr_w * (i%2); int32_t start_pos_y = half_scr_h * (i/2); ch_dsc[i].box.SetParams(nullptr, start_pos_x, start_pos_y, half_scr_w, half_scr_h, true); ch_dsc[i].box.SetCallback(&Callback, this, nullptr, i); ch_dsc[i].freq_str.SetParams(ch_dsc[i].freq_str_data, start_pos_x + 4, start_pos_y + 64, COLOR_LIGHTGREY, String::FONT_8x12); ch_dsc[i].duty_str.SetParams(ch_dsc[i].duty_str_data, start_pos_x + 4, start_pos_y + 64 + 12, COLOR_LIGHTGREY, String::FONT_8x12); ch_dsc[i].img.SetImage(waveforms[ch_dsc[i].waveform]); ch_dsc[i].img.Move(start_pos_x + 4, start_pos_y + 4); ch_dsc[i].box.Show(1); ch_dsc[i].img.Show(2); ch_dsc[i].freq_str.Show(3); ch_dsc[i].duty_str.Show(3); } 
рд╕реНрдХреНрд░реАрди рдЕрдкрдбреЗрдЯ рдХреЛрдб
  for(uint32_t i = 0U; i < CHANNEL_CNT; i++) { ch_dsc[i].img.SetImage(waveforms[ch_dsc[i].waveform]); snprintf(ch_dsc[i].freq_str_data, NumberOf(ch_dsc[i].freq_str_data), "Freq: %7lu Hz", ch_dsc[i].frequency); if(IsAnalogChannel(i)) snprintf(ch_dsc[i].duty_str_data, NumberOf(ch_dsc[i].duty_str_data), "Ampl: %7d %%", ch_dsc[i].duty); else snprintf(ch_dsc[i].duty_str_data, NumberOf(ch_dsc[i].duty_str_data), "Duty: %7d %%", ch_dsc[i].duty); // Set gray color to all channels ch_dsc[i].freq_str.SetColor(COLOR_LIGHTGREY); ch_dsc[i].duty_str.SetColor(COLOR_LIGHTGREY); } // Set white color to selected channel ch_dsc[channel].freq_str.SetColor(COLOR_WHITE); ch_dsc[channel].duty_str.SetColor(COLOR_WHITE); // Update display display_drv.UpdateDisplay(); 

рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдЖрдпрдд рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╢реЗрд╖ рддрддреНрд╡ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ )ред рдпрджрд┐ рдЖрдкрдиреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП: ch_dsc [i] .box.SetCallback (& тАЛтАЛCallback, this, nullptr, i); рдПрдХ рдкрд╛рд╢ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдХреНрд▓рд╛рд╕ рдХреЗ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрдереИрддрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛, рдпрд╣ рдкреЙрдЗрдВрдЯрд░, рдФрд░ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ - рдПрдХ рдкреЙрдЗрдВрдЯрд░ ( рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ - nullptr рдкрд╛рд╕ рд╣реИ рдФрд░ рдПрдХ рдирдВрдмрд░ ( рдЪреИрдирд▓ рдирдВрдмрд░ рдкреНрд░реЗрд╖рд┐рдд рд╣реИ )ред

рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреА рдмреЗрдВрдЪ рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдпрд╛рдж рд╣реИ рдХрд┐ " рд╕реНрдЯреЗрдЯрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЧреИрд░-рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ ред" рддреЛ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ ред рдЪреВрдБрдХрд┐ рдПрдХ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдп рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рд╕рджрд╕реНрдп рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдЙрд╕рдХреА рдкрд╣реБрдБрдЪ рд╣реЛрддреА рд╣реИ, рдпрджрд┐ рдЙрд╕рдХрд╛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ / рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рдЕрдм рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 // ***************************************************************************** // *** Callback for the buttons ********************************************* // ***************************************************************************** void Application::Callback(void* ptr, void* param_ptr, uint32_t param) { Application& app = *((Application*)ptr); ChannelType channel = app.channel; if(channel == param) { // Second click - change wave type ... } else { app.channel = (ChannelType)param; } app.update = true; } 

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, " рдЬрд╛рджреВ " рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдирд┐рдЬреА рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд рдХрдХреНрд╖рд╛ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рджрд╕реНрдп рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реИрд╕реЗ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдп ( рд╕реНрдХреНрд░реАрди рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ ) рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕рд░рд▓ " рд╢рд╛рдо рдХреА рдЬреЛрдбрд╝реА " рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

рдЬрдирд░реЗрдЯрд░ рд╕реНрд░реЛрдд рдХреЛрдб GitHub рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛: https://github.com/nickshl/WaveformGenerator
рдЕрдм DevCore рдХреЛ рдПрдХ рдЕрд▓рдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЦреИрд░, рдореБрдЭреЗ рд╕рд┐рдЧреНрдирд▓ рдЬрдирд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдпрд╣ рдЕрдЧрд▓реЗ ( рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдПрдХ ) рд▓реЗрдЦ рдореЗрдВ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/hi425409/


All Articles