From 3ea7aac1f414fabfcec7704f9a987fda77b6f42a Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Sun, 26 Oct 2025 18:56:52 -0600 Subject: [PATCH] add other audio --- ch32v-insert-coin/audio/button_3.raw | Bin 2133 -> 1413 bytes ch32v-insert-coin/audio/coin2.raw | Bin 0 -> 3871 bytes .../src/insert_coin/insert_coin.rs | 45 +++++++----------- ch32v-insert-coin/src/main.rs | 7 +-- ch32v-insert-coin/src/system.rs | 1 + 5 files changed, 21 insertions(+), 32 deletions(-) create mode 100644 ch32v-insert-coin/audio/coin2.raw diff --git a/ch32v-insert-coin/audio/button_3.raw b/ch32v-insert-coin/audio/button_3.raw index eb62b2dd1e0a6a0e78d8639ce93c155f8d332ecb..0477e753eb20c05749decf3a1665218f4d1b953e 100644 GIT binary patch literal 1413 zcma)(QEr1U5Ja&=B>KlnM1tD{i30?w+{fG?+_>|0O-V@AHZr!Eot>E_X64t~b=t;m zIJUf{eqdYjeDSSW^8GR`!hbsFOW>z7&qz~R zZry;92-{erfz4j7G2P3-r|iML`E;M7Q~0R+mnGj=n@z{UyE!jI z#~m57Uc_+depQaO+M&kX92yF%c|d%DdhZ1?SYxgKDdY}^9m+`~t0;0>oK|jXIQ4^(h*4Fo1;VS1RjEqYh?_#<6>tyYfn9e+_;Yni=_aNX3G*`W^^-22~Y@!BAdp zY2DpEM*5kl*q2xG^APv^WMNq?escfof&0&gIAhli)|e6(6F^4ykSMJcW5HrB2OdUS z(kBR(GQGF8vx}$RPOL`L=T=f%(Rc49J>?A$wX{_P1)qK z+;cb0_pkb7ZsRok-A&t%uiZQbJgD)2@a`MMfb@v?U7TKtDZ5&u}{ z;!l6t9@fW~fzcoiWEhT4(wb}yC~cLweht;0{;c2Odf*PF z#!ApILuEC`PV^SNHmclA1`EKVdxqIx(d`hDzGM*ttwk-Zs&bzxp-1_2_?uV29_L=uQcd15uZsS1W^vS3T3L8(=&#u(J@mc z8E&iAwwi$3wpK)ZVjTf9l~R{M7d7<_h-?xY^K8=4DFqfiwAYOwVE6_r3!)R&lHB!x z0`>;N709fHh1xTl-;^IA$mcNMD{^PjQwZU2SmGBTM&qrVxr;Xl9jsxkQP&=QN`F#nA|j_G`ww$TX(#{y diff --git a/ch32v-insert-coin/audio/coin2.raw b/ch32v-insert-coin/audio/coin2.raw new file mode 100644 index 0000000000000000000000000000000000000000..1caabb9a9d26122a2c50fdd4ccd50ecb1cbeabda GIT binary patch literal 3871 zcmXw6;cDYL6P3V%7`C7R2^>h?MFI=fumuZbaG?7xHq@|zdm)AdT*!TwEp%b;kHQ98 z$U?t&`OYYNn_w%_Xmn=g%xFqN6TVU=NkkZEGEuq0CMksEpF)}_$7q+`ICq=2zxygm z=dFzM`FtX+Kdt@4Ki_usbT8`kDUNn|ZnwjwJ__%);$doLQ`vA1VXj*-sc@)>%sl$_ zp7w7q&AeF`YB&|5c|3^^FYPLNOXQ-9!Q9t#)dtrYAEhb;{-l1ZNqTG6Rp}B@(K!H| zhbW~Eq)h85Xe|I7(4~t!5JYVuuxH;&(bfv4O_3-m*E*OeNDJW~ z*6OfI`?#dBA>A5MqR_|su57QBzoWhiud*{hORX_7`sVQF*Q?9QE0Ngq(_HPlm9|35 z-i{};a7+>ws8BFalB#T5kW51LurY+VIAN>i=tvcaCQQ?B+ODr((vP8uhn4VUbr@z@ ztqp}ATiM#<*Vl&?>AjHcX8nB^E9-+zizgf^q>rG3bQZb@uFMf&=MsR3B;Z+1USSAX z2?O~V3mIS!7AXF=SxV_keR$B_;j4c>m@j3S-aqX;?S74y$9O1YcU_I$WMgfA?0gdQ zDztTHlBaU%hvxpJ`)25+Q&+tmBlV32BP1=*D-%sk+pB*zO?4-qrt?}eE2cS_sVq#Gt46ff zad%fC2WYep=*!J+VSfU{Y(w<#f(Qby*xFM6A z8PTg%R|ql|1VCbgJ)$i*Avl4AVBI)^*+EW0En`ArM9vimK@gI_z$M|&1bo#FN`!Y3gnfifyc0?z3sP(p%w0Ve0{l;9I~;7n-67pGt~bCQRcU}@4Y35kXkOyU5G5q81} z013Ym94sbq9Qn?i4v8ZHW3%P#A-08)vsoOSJi*f#LM2XwESB=&JdsuZd1mqKIi6r& zV+N{OIxB=C=Bzdr>5C{$I>PO&Mh1wmJxG5H7z3DyFNXs&96HoA8w5%Ko5FfAmydyZ zhyg2%opG{HzpirRTE08+p9S@Ke|{=U%#!-zq-Pi%{FxOaQa-{C)@%n+Wt;YFH|r7WMbXba(C!{ zJ`I;u`t&qT+aA6Rn-R5^v_+BiEpF#2b%kzLrE&AhqJ+0j85dD9kiUo)XC~i91))e& zbYNn39-IY`%zspM6e&l|5ru;yc#5=QRZ(Lk7 zijWMDf~P@C5G|pyaiKsYK@Xgp=%O$mx0p(f{A3D%(|AWTf`!1RZzTXN-W z!6r^3P824If>!nf4?rDBR!rz zLh;mJKF!~E-aP4bwJGN?&?-ge$`z@rM@0soJazDVK%R4gMJ5rB6Pk%I{9YYR`6QTYGs$V7uz51jM|*gQN(ZC;b9DA-H5l% z;rXt%sU427-oM8Fa8{~=;=$@;WhX0>#$}Xh8?0KEKA>lebqq&iLTJofsi|~_s(7XO z0sSp5TeFY2c?&hZSNR^mjV@!2t9>lVlxT$_Dp}N~Gkinxg@(cnR{4gKpT$F%b#0B^ z#{z~x*3f<~B!Z^-(uy$X=wLVQWL!jTkcK)mM@bNuE|is;yI1BfF8X9T4`)==iQdlx zrR-joYNlL0TN3b zY~E^-)@a5f#t06q%aKKV!8tTA9A>^W@bf={;c!5afMJyD9QI@}PHbf3tu8RT&=MrL zOr=7*I7QsBaG0DO(xI#Ook3DGEbq!n@fny87TN^53zg{xD6q>K)HTb90Z5|N#ZXgW zb^n^;Nt|ar%Ly8e!c6ES{#_r>fh&y(d-SZjSJT|1#TYwTpoP*P$TTl?b1gsKc?$eW+gbY4vxD?p0H0SA?U3b2R7-`rB+l~q7DqKeKE zohL$_#h7tW2MC}IUSL2zJHJ3!d@$QSu8j@chQckXM-R#OFrUkNJ#HM%^jt!?QRO)E z_5BAo(-dH!i7CdD%+cEmL+ { +pub struct SimplePwmCore<'d, T: GeneralInstance16bit> { pwm: core::cell::RefCell>, } @@ -43,17 +42,12 @@ impl<'d, T: GeneralInstance16bit> SimplePwmCore<'d, T> { // } } - - - pub struct CoreConfig { pub tick_rate_hz: usize, } impl CoreConfig { pub fn new(tick_rate_hz: usize) -> Self { - Self { - tick_rate_hz, - } + Self { tick_rate_hz } } } @@ -70,25 +64,20 @@ pub struct InsertCoin<'a, T: GeneralInstance16bit> { pub led0: LedService, pub led1: LedService, // led2: LedService, - pub dac: DacService<'a>, } impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> { - pub fn new(config: CoreConfig, pwm_core: SimplePwmCore<'a, T>) -> Self { - - // LED0 servicer setup let led0 = LedService::new(ch32_hal::timer::Channel::Ch3); // LED1 servicer setup let led1 = LedService::new(ch32_hal::timer::Channel::Ch1); - // DAC servicer setup - let dac_sample_rate_hz = 16000; - let dac_tick_per_service = config.tick_rate_hz/(dac_sample_rate_hz); + let dac_sample_rate_hz = 4000; + let dac_tick_per_service = config.tick_rate_hz / (dac_sample_rate_hz); let dac_service_data = TickServiceData::new(dac_tick_per_service); let dac = DacService::new(ch32_hal::timer::Channel::Ch4, dac_service_data); @@ -105,28 +94,28 @@ impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> { /// takes self reference and runs pub fn service(&mut self) { - - if self.is_active() { + if self.is_active() { self.dac.tick(); - if self.led0.need_service() { - self.pwm_core.write_amplitude(self.led0.channel, self.led0.amplitude); + self.pwm_core + .write_amplitude(self.led0.channel, self.led0.amplitude); self.led0.service(); } if self.led1.need_service() { - self.pwm_core.write_amplitude(self.led1.channel, self.led1.amplitude); + self.pwm_core + .write_amplitude(self.led1.channel, self.led1.amplitude); self.led1.service(); } if self.dac.need_service() { self.dac.service(); // TODO: adpcm-pwm-dac:e4c811653781e69e40b63fd27a8c1e20 - self.pwm_core.write_amplitude(self.dac.channel, self.dac.get_amplitude() as u8); + self.pwm_core + .write_amplitude(self.dac.channel, self.dac.get_amplitude() as u8); } } - } // /// consumes self and runs @@ -134,7 +123,6 @@ impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> { // let mut delay = Delay; // let tick_interval_us = 1000000/self.config.tick_rate_hz; - // let mut led0_index = 0; // let led0_dcs = [0u8, 25u8, 50u8, 75u8, 100u8, 75u8, 50u8, 25u8]; @@ -143,12 +131,11 @@ impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> { // loop { // self.dac.tick(); - // if(self.led0.need_service()) { // self.led0.set_amplitude(led0_dcs[led0_index]); // self.pwm_core.write_amplitude(self.led0.channel, self.led0.amplitude); - + // led0_index += 1; // if led0_index > led0_dcs.len() - 1 { // led0_index = 0; @@ -159,7 +146,7 @@ impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> { // if(self.led1.need_service()) { // self.led1.set_amplitude(led1_dcs[led1_index]); // self.pwm_core.write_amplitude(self.led1.channel, self.led1.amplitude); - + // led1_index += 1; // if led1_index > led1_dcs.len() - 1 { // led1_index = 0; @@ -178,7 +165,7 @@ impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> { // } pub fn is_active(&self) -> bool { - self.core.active + self.core.active } pub fn set_active(&mut self, active: bool) { diff --git a/ch32v-insert-coin/src/main.rs b/ch32v-insert-coin/src/main.rs index 54ce5dd..d59d44f 100644 --- a/ch32v-insert-coin/src/main.rs +++ b/ch32v-insert-coin/src/main.rs @@ -268,7 +268,8 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! { pwm.set_polarity(led0_ch, OutputPolarity::ActiveLow); pwm.set_polarity(led1_ch, OutputPolarity::ActiveLow); - let sample_rate_hz = 16000; + let sample_rate_hz = 4000; + // let sample_rate_hz = 16000; let dac_tick_per_service = 5; let tick_rate_hz = sample_rate_hz * dac_tick_per_service; @@ -374,10 +375,10 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! { let tick_interval_us = 1000000 / interfaces.config.tick_rate_hz - 10; // dac data - // let coin_sound = include_bytes!("../audio/coin.raw"); + // let coin_sound = include_bytes!("../audio/coin2.raw"); // let coin_sound = include_bytes!("../audio/sweep_dpcm_u4.raw"); - let coin_sound = include_bytes!("../audio/button_1.raw"); + let button_sound_1 = include_bytes!("../audio/button_1.raw"); let button_sound_2 = include_bytes!("../audio/button_2.raw"); let button_sound_3 = include_bytes!("../audio/button_3.raw"); diff --git a/ch32v-insert-coin/src/system.rs b/ch32v-insert-coin/src/system.rs index 97b43e4..0ee18a6 100644 --- a/ch32v-insert-coin/src/system.rs +++ b/ch32v-insert-coin/src/system.rs @@ -48,6 +48,7 @@ pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags { if (bits & (0x1 << button_pin)) != 0x0 { #[cfg(feature = "enable_print")] println!("main_btn irq!"); + input_flags.main_btn_flag = true; // CHECK PC6 // unsafe { // let mut val = 0;