矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1597|回复: 1

继续吹《天问Block》

[复制链接]
     
发表于 2025-1-19 00:36:27 | 显示全部楼层 |阅读模式
乘着过年前最后一波打样,做一个工作灯
然后尝试用天问写了个比较完整的代码
Image 050.jpg
Image 051.jpg
工作灯驱动_1737217530981-0.jpg
工作灯驱动_1737217530981-1.jpg
工作灯驱动_1737217530981-2.jpg

  1. #define IB1 PA6
  2. #define IB2 PA1
  3. #define IG1 PA14
  4. #define IG2 PA4
  5. #define INC PB2
  6. #define DEC PB0
  7. #define SET PB6
  8. #define IR1 PA13
  9. #define IR2 PA7
  10. #define IR_I PB1
  11. #define LOPW PB3
  12. #define VBAT PA0

  13. #include <TWEN32F0xx.h>
  14. #include "HardwareSerial.h"
  15. #include "myLib/TW32f0xx_IRSendRev.h"
  16. #include "myLib/TW32f0xx_timer.h"
  17. #include "myLib/TW32f0xx_exti.h"

  18. void GPIO_init();
  19. uint8_t mod = 0;
  20. uint8_t val = 0;
  21. IRSendRev irsendrev;
  22. void mod0();
  23. void mod1();
  24. void mod2();
  25. void mod3();

  26. /*GPIO统一初始化
  27. */
  28. void GPIO_init(){
  29.   pinMode(LOPW, GPIO_Mode_Out_PP);
  30.   pinMode(IR1, GPIO_Mode_Out_PP);
  31.   pinMode(IR2, GPIO_Mode_Out_PP);
  32.   pinMode(IG1, GPIO_Mode_Out_PP);
  33.   pinMode(IG2, GPIO_Mode_Out_PP);
  34.   pinMode(IB1, GPIO_Mode_Out_PP);
  35.   pinMode(IB2, GPIO_Mode_Out_PP);
  36. }

  37. void TIM_attachInterrupt_1() {
  38.   //检测剩余电量
  39.   uint8_t v = ADC_Read(ADC_PA0);
  40.   Serial1.print("剩余电量: ");
  41.   Serial1.println(v);
  42.   //4096/5*2.8=2293.760
  43.   if(v < 2295){
  44.     digitalWrite(PB3, 1);
  45.     mod = 0;
  46.   }
  47.   else{
  48.     digitalWrite(PB3, 0);
  49.   }
  50. }
  51. /*灯光关闭
  52. */
  53. void mod0(){
  54.   digitalWrite(IR1, 0);
  55.   digitalWrite(IR2, 0);
  56.   digitalWrite(IG1, 0);
  57.   digitalWrite(IG2, 0);
  58.   digitalWrite(IB1, 0);
  59.   digitalWrite(IB2, 0);
  60. }

  61. /*灯效1
  62. */
  63. void mod1(){
  64. }

  65. /*灯效2
  66. */
  67. void mod2(){
  68. }

  69. /*灯效3
  70. */
  71. void mod3(){
  72. }

  73. void TIM_attachInterrupt_3() {
  74.   //切换灯光模式
  75.   switch (mod) {
  76.    case 0:
  77.     mod0();
  78.     break;
  79.    case 1:
  80.     mod1();
  81.     break;
  82.    case 2:
  83.     mod2();
  84.     break;
  85.    case 3:
  86.     mod3();
  87.     break;
  88.   }
  89. }
  90. void pin_attachInterrupt_fun_SET() {
  91.   //SET按键 3种模式选择
  92.   if(mod > 3){
  93.     mod = mod + 1;
  94.     val = 5;
  95.   }
  96.   else{
  97.     mod = 0;
  98.   }
  99.   delay(500);
  100. }
  101. void pin_attachInterrupt_fun_DEC() {
  102.   //DEC按键
  103.   if(val > 0){
  104.     val = val - 1;
  105.   }
  106.   delay(200);
  107. }
  108. void pin_attachInterrupt_fun_INC() {
  109.   //INC按键 10档调节
  110.   if(val < 10){
  111.     val = val + 1;
  112.   }
  113.   delay(200);
  114. }

  115. int main(void)
  116. {
  117.   TW32F0xx_init();
  118.   TIM_attachInterrupt(TIM3, 1000000, TIM_attachInterrupt_3);
  119.   TIM_attachInterrupt(TIM1, 10000000, TIM_attachInterrupt_1);
  120.   Serial1.begin(115200);
  121.   GPIO_init();
  122.   irsendrev.begin(PA0);
  123.   ADC_Init(ADC_PB1, ADC_SAMPLETIME_71CYCLES_5, ADC_RESOLUTION_12B);//ADC初始化
  124.   TIM_Enable(TIM1);
  125.   TIM_Enable(TIM3);
  126.   Pin_attachInterrupt(SET,EXTI_Trigger_Rising,pin_attachInterrupt_fun_SET);
  127.   Pin_attachInterrupt(DEC,EXTI_Trigger_Rising,pin_attachInterrupt_fun_DEC);
  128.   Pin_attachInterrupt(INC,EXTI_Trigger_Rising,pin_attachInterrupt_fun_INC);
  129.   while(1){
  130.     if(irsendrev.available()){
  131.       Serial1.print("红外接收地址: ");
  132.       Serial1.println((irsendrev.recv_addr()));
  133.       Serial1.print("红外接收数据: ");
  134.       Serial1.println((irsendrev.recv()));
  135.     }
  136.   }
  137.   return 1;
  138. }
复制代码


确实用着还行,对图形功能熟悉的话,基本上都能拼凑在一起

评分

1

查看全部评分

     
发表于 2025-2-12 19:20:37 | 显示全部楼层
学了三十年,退休了 还没学会继续

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 11:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表