胆中波 发表于 2025-1-24 23:36:24

各位老师,这两个很牛逼的编程软件是一样的吗?

怎么名字相同,却大相径庭

JuncoJet 发表于 2025-1-25 00:14:43

刚触发了关键词(一个国产的8位单片机厂家,坛里不能说)
用天问吧,支持众多单片机,已写360代码,未见明显问题
除了字符串操作稍微弱一点,String 类型没有提供图形编程的功能
没有别的明显问题



#define IR1 PA13
#define IR2 PA7
#define IG1 PA14
#define IG2 PA4
#define IB1 PA6
#define IB2 PA1
#define BINC PB2
#define BDEC PB0
#define BSET PB6
#define IR_I PB1
#define LOPW PB3
#define VBAT PA0
#define ADC_VBAT ADC_PA0

#include <TWEN32F0xx.h>
#include "myLib/TW32f0xx_timer.h"
#include "HardwareSerial.h"
#include "myLib/TW32f0xx_IRSendRev.h"

void GPIO_init();
void mod0();
void mod1();
void mod2();
void mod3();
void mod4();
void mod5();
void mod6();
void mod7();
void loadMod();
uint8_t mod = 0;
uint8_t val = 5;
bool en = 0;
uint64_t tick = 0;
uint64_t pwck = 0;
uint8_t c = 0;
const uint8_t mylist[]={(1<<5), 0, (1<<5), 0, (1<<0), 0, (1<<0), 0, (1<<2), 0, (1<<2), 0, (1<<3), 0, (1<<3), 0};
const uint8_t mylist2[]={((1<<5)|(1<<4)), 0, ((1<<5)|(1<<4)), 0, ((1<<0)|(1<<2)), 0, ((1<<0)|(1<<2)), 0, ((1<<2)|(1<<1)), 0, ((1<<2)|(1<<1)), 0, ((1<<3)|(1<<5)), 0, ((1<<3)|(1<<5)), 0};
IRSendRev irsendrev;
void uartSync();
void getKeys();
void autoTim();

/*GPIO统一初始化
*/
void GPIO_init(){
pinMode(VBAT, GPIO_Mode_AIN);
pinMode(BINC, GPIO_Mode_IN_FLOATING);
pinMode(BSET, GPIO_Mode_IN_FLOATING);
pinMode(BDEC, GPIO_Mode_IN_FLOATING);
pinMode(LOPW, GPIO_Mode_Out_PP);
pinMode(IR1, GPIO_Mode_Out_PP);
pinMode(IR2, GPIO_Mode_Out_PP);
pinMode(IG1, GPIO_Mode_Out_PP);
pinMode(IG2, GPIO_Mode_Out_PP);
pinMode(IB1, GPIO_Mode_Out_PP);
pinMode(IB2, GPIO_Mode_Out_PP);
}

/*灯光关闭
*/
void mod0(){
digitalWrite(IR1, 0);
digitalWrite(IR2, 0);
digitalWrite(IG1, 0);
digitalWrite(IG2, 0);
digitalWrite(IB1, 0);
digitalWrite(IB2, 0);
}

/*灯效1
*/
void mod1(){
digitalWrite(IR1, 1);
digitalWrite(IR2, 1);
}

/*灯效2
*/
void mod2(){
digitalWrite(IR1, 1);
digitalWrite(IR2, 1);
digitalWrite(IG1, 1);
digitalWrite(IG2, 1);
}

/*灯效3
*/
void mod3(){
digitalWrite(IG1, 1);
digitalWrite(IG2, 1);
}

/*灯效4
*/
void mod4(){
digitalWrite(IG1, 1);
digitalWrite(IG2, 1);
digitalWrite(IB1, 1);
digitalWrite(IB2, 1);
}

/*灯效5
*/
void mod5(){
digitalWrite(IB1, 1);
digitalWrite(IB2, 1);
}

/*灯效6
*/
void mod6(){
digitalWrite(IB1, 1);
digitalWrite(IB2, 1);
digitalWrite(IR1, 1);
digitalWrite(IR2, 1);
}

/*灯效7
*/
void mod7(){
digitalWrite(IR1, 1);
digitalWrite(IR2, 1);
digitalWrite(IG1, 1);
digitalWrite(IG2, 1);
digitalWrite(IB1, 1);
digitalWrite(IB2, 1);
}

void TIM_attachInterrupt_1() {
uint8_t *p;
if(mod == 8){
    p = mylist;
}
else if(mod == 9){
    p = mylist2;
}
if(p[(int)(c)]){
    for (int i = 0; i < 6; i = i + 1) {
      if(((p>>i)&1)){
      //1.RGB|2.RGB
      switch (i) {
         case 0:
          digitalWrite(IB2, 1);
          break;
         case 1:
          digitalWrite(IG2, 1);
          break;
         case 2:
          digitalWrite(IR2, 1);
          break;
         case 3:
          digitalWrite(IB1, 1);
          break;
         case 4:
          digitalWrite(IG1, 1);
          break;
         case 5:
          digitalWrite(IR1, 1);
          break;
      }
      }
      else{
      switch (i) {
         case 0:
          digitalWrite(IB2, 0);
          break;
         case 1:
          digitalWrite(IG2, 0);
          break;
         case 2:
          digitalWrite(IR2, 0);
          break;
         case 3:
          digitalWrite(IB1, 0);
          break;
         case 4:
          digitalWrite(IG1, 0);
          break;
         case 5:
          digitalWrite(IR1, 0);
          break;
      }
      }
    }
}
else{
    mod0();
}
if(c < sizeof(mylist)/sizeof(mylist)){
    c = c + 1;
}
else{
    c = 0;
}
}
/*载入灯效
*/
void loadMod(){
switch (mod) {
   case 0:
    mod0();
    break;
   case 1:
    mod1();
    break;
   case 2:
    mod2();
    break;
   case 3:
    mod3();
    break;
   case 4:
    mod4();
    break;
   case 5:
    mod5();
    break;
   case 6:
    mod6();
    break;
   case 7:
    mod7();
    break;
}
}

void TIM_attachInterrupt_3() {
en = !en;
if(en){
    loadMod();
    TIM_Duty_Updata(TIM3, ((val + 1) * 20)*1);
}
else{
    mod0();
    TIM_Duty_Updata(TIM3, ((11 - val) * 20)*1);
}
}
/*描述该功能...
*/
void uartSync(){
Serial1.print("X ");
Serial1.print(mod);
Serial1.print(", ");
Serial1.println(val);
}

/*描述该功能...
*/
void getKeys(){
if(digitalRead(BSET)){
    //SET按键 3种模式选择
    if(mod < 9){
      mod = mod + 1;
    }
    else{
      mod = 0;
    }
    Serial1.print("BSET ");
    Serial1.println(mod);
    autoTim();
    uartSync();
    delay(300);
}
if(digitalRead(BDEC)){
    //DEC按键
    if(val > 0){
      val = val - 1;
    }
    Serial1.print("BDEC ");
    Serial1.println(val);
    uartSync();
    delay(200);
}
if(digitalRead(BINC)){
    //INC按键 10档调节
    if(val < 10){
      val = val + 1;
    }
    Serial1.print("BINC ");
    Serial1.println(val);
    uartSync();
    delay(200);
}
}

/*描述该功能...
*/
void autoTim(){
if((mod == 8) || (mod == 9)){
    TIM_Disable(TIM3);
    TIM_Enable(TIM1);
}
else{
    TIM_Disable(TIM1);
    TIM_Enable(TIM3);
}
}

int main(void)
{
TW32F0xx_init();
TIM_attachInterrupt(TIM3, 1, TIM_attachInterrupt_3);
TIM_attachInterrupt(TIM1, 50000, TIM_attachInterrupt_1);
Serial1.begin(115200);
//1.RGB|2.RGB
//1.RGB|2.RGB
Serial1.println("开始初始化...");
GPIO_init();
Serial1.println("GPIO初始化完成!");
irsendrev.begin(IR_I);
Serial1.println("红外初始化完成!");
ADC_Init(ADC_VBAT, ADC_SAMPLETIME_71CYCLES_5, ADC_RESOLUTION_12B);//ADC初始化
TIM_Enable(TIM3);
Serial1.println("初始化完成!");
while(1){
    tick = millis();
    if(tick >= pwck){
      //检测剩余电量
      uint32_t v = ADC_Read(ADC_VBAT);
      Serial1.print("剩余电量: ");
      Serial1.println(v);
      //4096/5*2.8=2293.760
      if(v < 2295){
      digitalWrite(LOPW, 1);
      mod = 0;
      }
      else{
      digitalWrite(LOPW, 0);
      }
      // 10秒
      pwck = tick + 10000;
    }
    if(Serial1.available() > 0){
      String s = Serial1.readString();
      if(s[(int)(0)] == 'X'){
      //"X 8, 10"
      String ss = s;
      ss[(int)(3)] = 0;
      mod = String(&ss).toInt();
      val = String(&s).toInt();
      autoTim();
      Serial1.print("mod ");
      Serial1.print(mod);
      Serial1.print(", ");
      Serial1.print("val ");
      Serial1.println(val);
      }
    }
    if(irsendrev.available()){
      uint32_t v = irsendrev.recv_addr();
      Serial1.print("红外接收地址: ");
      Serial1.println(v);
      Serial1.print("红外接收数据: ");
      Serial1.println((irsendrev.recv()));
      if(v){

      }
      uartSync();
    }
    getKeys();
}
return 1;
}

JuncoJet 发表于 2025-1-25 00:32:00




从源码来看的话,其实用的就是 Arduino 的 String 类,直接移植的
功能本来应该是非常的丰富的,但是图形界面提供只提供了几个简单功能
这必须喷一下

JuncoJet 发表于 2025-1-25 00:50:00

本帖最后由 JuncoJet 于 2025-1-25 00:59 编辑

https://mindplus.cc/
这个应该是官网
看了一眼,应该是针对于官方的传感器和开发板做开发
买这些板子应该不便宜,看外观就知道;P
MCU Atmega328 ,性能低又贵,但好像能符合车规
另外没有 IIC SPI 没有中断、没有定时器这些
纯玩…… 看完了,睡觉


JuncoJet 发表于 2025-1-25 01:08:04




舍得花钱的话,买全套也不错,而且都有货号,对照号码直接上手

胆中波 发表于 2025-1-26 20:52:08

这个有人能解释一下不

irf5401 发表于 2025-1-26 21:06:46

12345647891234579

胆中波 发表于 2025-2-2 07:59:34

啥意思???
页: [1]
查看完整版本: 各位老师,这两个很牛逼的编程软件是一样的吗?