各位老师,这两个很牛逼的编程软件是一样的吗?
怎么名字相同,却大相径庭 刚触发了关键词(一个国产的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;
}
从源码来看的话,其实用的就是 Arduino 的 String 类,直接移植的
功能本来应该是非常的丰富的,但是图形界面提供只提供了几个简单功能
这必须喷一下 本帖最后由 JuncoJet 于 2025-1-25 00:59 编辑
https://mindplus.cc/
这个应该是官网
看了一眼,应该是针对于官方的传感器和开发板做开发
买这些板子应该不便宜,看外观就知道;P
MCU Atmega328 ,性能低又贵,但好像能符合车规
另外没有 IIC SPI 没有中断、没有定时器这些
纯玩…… 看完了,睡觉
舍得花钱的话,买全套也不错,而且都有货号,对照号码直接上手 这个有人能解释一下不 12345647891234579 啥意思???
页:
[1]