HotRC DS600遥控器+F-06A接收机

news2024/11/24 15:13:12

PWM原理说明
在这里插入图片描述
在这里插入图片描述

DS600遥控器说明
DS600遥控器的默认高电平是1.5ms
1通道 左右
2通道 前后
3通道 接管 上电后是1ms ,按一下是2ms,1ms和2ms切换
在这里插入图片描述
在这里插入图片描述

DS600接收机说明

在这里插入图片描述
在这里插入图片描述

*/
#include "ps2.h"
#include "common.h"

#define LEFT_RIGHT_CHANNEL 0          //DS600 Channel1   
#define FORWARD_BACKWARD_CHANNEL 1    //DS600 Channel2   
#define TAKE_OVER_CHANNEL  2          //DS600 Channel3  

uint32_t DS600_PWM_Start_Channel[5] = {0};
uint32_t DS600_PWM_End_Channel[5] = {0};
uint32_t DS600_H_level_Value_Channel[5] = {0};

uint16_t  DS600_PWM_Value_Mid_High = 1600;
uint16_t  DS600_PWM_Value_Mid_Low =  1400;

int16_t DS600_PWM_Value_Channel[5] = {0};

uint16_t DS600_Loss_Messege_Countnum_Channel[5] = {0};
uint8_t  DS600_Offline_Alarmflag_Channel[5] = {0};
		
void Initial_flysky( uint32_t period, uint32_t scale )
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure; 
	
    TIM_ICInitTypeDef TIM12_ICInitStructure_w;


	RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM12, ENABLE );
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB, ENABLE );

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init( GPIOB, &GPIO_InitStructure );

	GPIO_PinAFConfig( GPIOB, GPIO_PinSource14, GPIO_AF_TIM12 );

	TIM_TimeBaseStructure.TIM_Prescaler = scale;  
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseStructure.TIM_Period = period;
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

	TIM_TimeBaseInit( TIM12, &TIM_TimeBaseStructure );

	TIM12_ICInitStructure_w.TIM_Channel = TIM_Channel_1;
	TIM12_ICInitStructure_w.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
	TIM12_ICInitStructure_w.TIM_ICSelection = TIM_ICSelection_DirectTI;
	TIM12_ICInitStructure_w.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	TIM12_ICInitStructure_w.TIM_ICFilter = 0x00;
	TIM_ICInit( TIM12, &TIM12_ICInitStructure_w );

	TIM_ITConfig( TIM12, TIM_IT_CC1, ENABLE );

	TIM_Cmd( TIM12, ENABLE );
	//Sonar12_NVIC_Configuration();
		
	/* Enable the DMA1_Stream4_TX(UART4_TX) Interrupt */
	NVIC_InitStructure.NVIC_IRQChannel = TIM8_BRK_TIM12_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init( &NVIC_InitStructure );
}

void Flysky_DeInit( void )
{
    NVIC_InitTypeDef NVIC_InitStructure; 

	RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM12, DISABLE ); //½ûÖ¹TIM12ʱÖÓ
	TIM_ITConfig( TIM12, TIM_IT_CC1 | TIM_IT_Update, DISABLE ); //½ûÖ¹¶¨Ê±Æ÷12¸üÐÂÖжÏ
	TIM_Cmd( TIM12, DISABLE ); //½ûÖ¹¶¨Ê±Æ÷12

	NVIC_InitStructure.NVIC_IRQChannel = TIM8_BRK_TIM12_IRQn; //¶¨Ê±Æ÷12ÖжÏ
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÇÀÕ¼ÓÅÏȼ¶1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×ÓÓÅÏȼ¶0
	NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
	NVIC_Init( &NVIC_InitStructure );	
}
  
uint16_t PPM_Sample_Cnt=0;
uint32_t PPM_Time=0;
uint16_t PPM_Okay=0;
uint16_t PPM_Databuf[8]={0};
uint8_t TIM12_CH1_CAPTURE_STA=0;
void TIM8_BRK_TIM12_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM12,TIM_IT_CC1)==!RESET)//
	{
		if(TIM12_CH1_CAPTURE_STA&0x01)//
		{
			PPM_Time=TIM_GetCapture1(TIM12);
			if(PPM_Time>0)
				PPM_Time++;			
			if(PPM_Okay==1)
			{
				PPM_Databuf[PPM_Sample_Cnt]=PPM_Time;

				if( PPM_Databuf[4] < 800 )
				{
					PPM_Databuf[0] = 0;PPM_Databuf[1] = 0;
				}

				PPM_Sample_Cnt++;
				if(PPM_Sample_Cnt>8)
					PPM_Okay=0;
			}
			if(PPM_Time>3000)//
			{
				PPM_Okay=1;
				PPM_Sample_Cnt=0;
			}    

			TIM_OC1PolarityConfig(TIM12,TIM_ICPolarity_Rising);
			TIM12_CH1_CAPTURE_STA=0;//
		}
		else
		{
			TIM_SetCounter(TIM12,0);//           
			TIM12_CH1_CAPTURE_STA|=0x01;//
			TIM_OC1PolarityConfig(TIM12,TIM_ICPolarity_Falling); 
		}        
	}
	
	TIM_ClearITPendingBit(TIM12, TIM_IT_CC1|TIM_IT_Update);   
}  

void Init_DS600(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
 	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB, ENABLE ); //ʹÄÜGPIOBʱÖÓ
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE ); //ʹÄÜGPIOCʱÖÓ
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE, ENABLE ); //ʹÄÜGPIOEʱÖÓ
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ʹÄÜSYSCFGʱÖÓ
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊä³öģʽ
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  GPIO_Init(GPIOB, &GPIO_InitStructure);//³õʼ»¯
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊä³öģʽ
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕͨÊä³öģʽ
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  GPIO_Init(GPIOE, &GPIO_InitStructure);//³õʼ»¯

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14);//PF6 Á¬½Óµ½ÖжÏÏß6
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource9);//PF6 Á¬½Óµ½ÖжÏÏß6
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);//PF6 Á¬½Óµ½ÖжÏÏß6
		
    EXTI_InitStructure.EXTI_Line = EXTI_Line14 | EXTI_Line9 | EXTI_Line11;//LINE14
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖжÏʼþ
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //shangϽµÑØ´¥·¢ 
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ʹÄÜLINE6
    EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ
		
	
	  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//ÍⲿÖжÏ5
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//ÇÀÕ¼ÓÅÏȼ¶3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×ÓÓÅÏȼ¶2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
    NVIC_Init(&NVIC_InitStructure);
		
		NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//ÍⲿÖжÏ5
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//ÇÀÕ¼ÓÅÏȼ¶3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×ÓÓÅÏȼ¶2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
    NVIC_Init(&NVIC_InitStructure);

}

//ÍⲿÖжϷþÎñº¯Êý
void EXTI9_5_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line9) != RESET)
  {
         if(GPIOC->IDR & GPIO_Pin_9)
         {
           DS600_PWM_Start_Channel[TAKE_OVER_CHANNEL] = micros();
         }
         else
         {
						  DS600_PWM_End_Channel[TAKE_OVER_CHANNEL]= micros();
					    DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL] = DS600_PWM_End_Channel[TAKE_OVER_CHANNEL] - DS600_PWM_Start_Channel[TAKE_OVER_CHANNEL];
					 
						 if(DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL]>900 && DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL]<2100)
							 {
								  //stop
									 DS600_PWM_Value_Channel[TAKE_OVER_CHANNEL] = DS600_H_level_Value_Channel[TAKE_OVER_CHANNEL];
								  
								  DS600_Loss_Messege_Countnum_Channel[TAKE_OVER_CHANNEL] = 0;
								  DS600_Offline_Alarmflag_Channel[TAKE_OVER_CHANNEL] = 0;
								 
							 }
							 else
							 {
							    DS600_PWM_Value_Channel[TAKE_OVER_CHANNEL] = 1500;
							 }
         }
				 
     EXTI_ClearITPendingBit(EXTI_Line9);
  }
}

//ÍⲿÖжϷþÎñº¯Êý
void EXTI15_10_IRQHandler(void)
{
	 if(EXTI_GetITStatus(EXTI_Line11) != RESET)
  {
         if(GPIOE->IDR & GPIO_Pin_11)
         {
           DS600_PWM_Start_Channel[FORWARD_BACKWARD_CHANNEL] = micros();
         }
         else
         {
						  DS600_PWM_End_Channel[FORWARD_BACKWARD_CHANNEL]= micros();
					    DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] = DS600_PWM_End_Channel[FORWARD_BACKWARD_CHANNEL] - DS600_PWM_Start_Channel[FORWARD_BACKWARD_CHANNEL];
					 
						 if(DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL]>900 && DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL]<2100)
							 {
								 //PPMINF[5]=PPM_end[5]-INF_DAT[PPM_mid5];
								 if( (DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] > DS600_PWM_Value_Mid_Low) && (DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] < DS600_PWM_Value_Mid_High) )
								 {
								  //stop
									 DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
								 }
								 else
								 {
								  //move
									 if(DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] >= DS600_PWM_Value_Mid_High)
									 {
									   DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] - DS600_PWM_Value_Mid_High;									 
									 }
									 else
									 {
									    DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = DS600_H_level_Value_Channel[FORWARD_BACKWARD_CHANNEL] - DS600_PWM_Value_Mid_Low;
									 }

								 }
								 	DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
								  DS600_Offline_Alarmflag_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
							 }
							else
							 {
							   DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
							 }
         }
     EXTI_ClearITPendingBit(EXTI_Line11);
  }
	
 if(EXTI_GetITStatus(EXTI_Line14) != RESET)
  {
         if(GPIOB->IDR & GPIO_Pin_14)
         {
           DS600_PWM_Start_Channel[LEFT_RIGHT_CHANNEL] = micros();
         }
         else
         {
						  DS600_PWM_End_Channel[LEFT_RIGHT_CHANNEL]= micros();
					    DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] = DS600_PWM_End_Channel[LEFT_RIGHT_CHANNEL] - DS600_PWM_Start_Channel[LEFT_RIGHT_CHANNEL];
					 
						 if(DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL]>900 && DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL]<2100)
							 {
								 //PPMINF[5]=PPM_end[5]-INF_DAT[PPM_mid5];
								 if( (DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] > DS600_PWM_Value_Mid_Low) && (DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] < DS600_PWM_Value_Mid_High) )
								 {
								  //stop
									 DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = 0;
								 }
								 else
								 {
								  //move
									 if(DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] >= DS600_PWM_Value_Mid_High)
									 {
									   DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] - DS600_PWM_Value_Mid_High;									 
									 }
									 else
									 {
									    DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = DS600_H_level_Value_Channel[LEFT_RIGHT_CHANNEL] - DS600_PWM_Value_Mid_Low;
									 }

								 }
								 
								  DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL] = 0;
								  DS600_Offline_Alarmflag_Channel[LEFT_RIGHT_CHANNEL] = 0;
							 }
							else
							 {
							   DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = 0;
							 }
         }
     EXTI_ClearITPendingBit(EXTI_Line14);
  }
}

void DS600_online_check(void)
{
   DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL]++;
   DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL]++;	 
   DS600_Loss_Messege_Countnum_Channel[2]++;
	
	 if(DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL] > 10)
	 {
	    DS600_Loss_Messege_Countnum_Channel[LEFT_RIGHT_CHANNEL] = 0;
		  DS600_Offline_Alarmflag_Channel[LEFT_RIGHT_CHANNEL] = 1;
		  DS600_PWM_Value_Channel[LEFT_RIGHT_CHANNEL] = 0;
	 }
	 
	 if(DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL] > 10)
	 {
	    DS600_Loss_Messege_Countnum_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
		  DS600_Offline_Alarmflag_Channel[FORWARD_BACKWARD_CHANNEL] = 1;
		  DS600_PWM_Value_Channel[FORWARD_BACKWARD_CHANNEL] = 0;
	 }
	 
	 if(DS600_Loss_Messege_Countnum_Channel[TAKE_OVER_CHANNEL] > 10)
	 {
	    DS600_Loss_Messege_Countnum_Channel[TAKE_OVER_CHANNEL] = 0;
		  DS600_Offline_Alarmflag_Channel[TAKE_OVER_CHANNEL] = 1;
		  DS600_PWM_Value_Channel[TAKE_OVER_CHANNEL] = 1500;
	 }
	 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1327770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工具系列:PyCaret介绍_多分类代码示例

&#x1f44b; 工具系列&#xff1a;PyCaret介绍_多分类代码示例 PyCaret 介绍 PyCaret是一个开源的、低代码的Python机器学习库&#xff0c;可以自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具&#xff0c;可以大大加快实验周期并提高生产效率。 与其他开…

理解按需自动导入 unplugin-auto-import unplugin-vue-components

文章目录 unplugin-auto-import基础使用构建工具引入插件配置插件 import&#xff1a;配置自动导入规则使用预设自动引入第三方库自动导入 TypeScript 类型vue 预设的自动导入配置 dts&#xff1a;让编辑器环境识别 ts 类型eslintrc&#xff1a;解决 eslint 检查错误dirs&#…

AI 论文精读,中文视频讲解:剖析人工智能本质 | 开源日报 No.120

mli/paper-reading Stars: 21.8k License: Apache-2.0 深度学习论文精读是一个深度学习相关论文列表&#xff0c;包括计算机视觉、生成模型、自然语言处理等多个领域。 该项目的核心优势和特点包括&#xff1a; 提供了大量关于深度学习各领域热门文章内容对不同年份发表的有较…

数据类型,运算符,表达式复习

本章没太需要复习的&#xff0c;重点复习一下逗号表达式还有习题吧 总结 表达式1&#xff0c;表达式2 计算的过程为&#xff0c;先算表达式1&#xff0c;再算表达式2&#xff0c;整个表达式的值为表达式2的值 还可以无限套娃&#xff0c;像这样(&#xff08;a&#xff0c;b&…

03-JVM对象创建与内存分配机制深度剖析

文章目录 对象的创建对象创建的主要流程一、类加载检查二、分配内存划分内存的方法解决并发问题的方法 三、初始化零值四、设置对象头五、执行<init>方法 对象半初始化对象大小与指针压缩什么是java对象的指针压缩&#xff1f;为什么要进行指针压缩&#xff1f; 对象内存…

Linux常用的基础命令

一、通配符 1、定义&#xff1a; 有些符号不表示原来的意思&#xff0c;它代表了一类字符 " * "&#xff1a;代表任意长度的字符&#xff0c;不能显示隐藏文件 " ? "&#xff1a;代表任意一个字符 2、作用&#xff1a; 去匹配文件的名字。 例如&am…

『Linux升级路』基础开发工具——gdb篇

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、背景知识介绍 二、gdb指令介绍 一、背景知识介绍 在软件开发中&#xff0c…

用Go语言实现HTTP API的安全验证

HTTP API的安全验证&#xff0c;通常我们会使用诸如OAuth、API密钥、JWT&#xff08;JSON Web Tokens&#xff09;等方法。这里&#xff0c;我将向您展示如何使用JWT在Go语言中实现HTTP API的安全验证。 1. JWT简介 JWT是一种开放标准&#xff08;RFC 7519&#xff09;&#…

软件项目安全保证措施

一、 身份鉴别 二、 访问控制 三、 通信完整性、保密性 四、 抗抵赖 五、 数据完整性 六、 数据保密性 七、 应用安全支撑系统设计 软件开发全流程文档支撑下载&#xff1a;软件项目开发全套文档下载-CSDN博客

VScode 工作区配置 和 用户配置

一、工作区配置 通常不同的项目都有不同的配置&#xff0c;我一般都是使用eslint和prettier一起用&#xff0c;所以经常会有这几个文件&#xff1a; 这里简单介绍一下这几个文件的作用吧。 1.vscode文件夹下 一般有两个文件&#xff0c;extensions.json和settings.json。 e…

基于Java SSM框架实现人事员工考勤签到请假管理系统项目【项目源码+论文说明】

基于java的SSM框架实现人事员工考勤签到请假管理系统演示 摘要 在高速发展的时代&#xff0c;众多的软件被开发出来&#xff0c;给用户带来了很大的选择余地&#xff0c;而且人们越来越追求更个性的需求。在这种时代背景下&#xff0c;人们对人事管理系统越来越重视&#xff0…

Java Web Day06_JQuery基础

课程安排 jQuery是什么 框架&#xff08;framework&#xff09;是一个框子——指其约束性&#xff0c;也是一个架子——指其支撑性。是一个基本概念上的结构&#xff0c;用于去解决或者处理复杂的问题。 jQuery是目前使用最广泛的javascript函数库&#xff0c;极大地简化了ja…

100GPTS计划-AI学术AcademicRefiner

地址 https://chat.openai.com/g/g-LcMl7q6rk-academic-refiner https://poe.com/AcademicRefiner 测试 减少相似性 增加独特性 修改http://t.csdnimg.cn/jyHwo这篇文章微调 专注于人工智能、科技、金融和医学领域的学术论文改写&#xff0c;秉承严格的专业和学术标准。 …

华为OD机试 - 发广播 - 并查集(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、并查集Java 实现并查集 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&…

机器学习算法(11)——集成技术(Boosting——梯度提升)

一、说明 在在这篇文章中&#xff0c;我们学习了另一种称为梯度增强的集成技术。这是我在机器学习算法集成技术文章系列中与bagging一起介绍的一种增强技术。我还讨论了随机森林和 AdaBoost 算法。但在这里我们讨论的是梯度提升&#xff0c;在我们深入研究梯度提升之前&#xf…

【算法设计与分析】——动态规划算法

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

OpenAI公布ChatGPT安全框架

12月19日&#xff0c;OpenAI在官网公布了“准备框架”&#xff08;Preparedness Framework&#xff09;测试版。该文档详细介绍了OpenAI是如何保证ChatGPT等产品的安全防护措施、开发和部署流程。 OpenAI表示&#xff0c;随着大模型的功能迭代不断完善&#xff0c;其能力已经开…

Diss一下ApiPost国产软件

如图所示&#xff0c;我用ApiPost和PostMan调用同一个接口同样的参数。 后端返回的数字是20231204183521830&#xff0c;在ApiPost中却变成了20231204183521832。不能理解为什么数字会2 。 而PostMan这边返回的值是正确的。 看来ApiPost确实是遥遥领先了

30. MVC设计模式

JavaEE 开发流程 ↓MVC的概念 MVC是Model-View-Controller的简称&#xff0c;即模型-视图-控制器。 MVC是一种设计模式&#xff0c;它把应用程序分成三个核心模块&#xff1a;模型、视图、控制器&#xff0c;它们各自处理自己的任务。 模型(model) 模型是应用程序的主体部分…

本地使用 docker 运行OpenSearch + Dashboard + IK 分词插件

准备基础镜像 注意一定要拉取和当前 IK 分词插件版本一致的 OpenSearch 镜像: https://github.com/aparo/opensearch-analysis-ik/releases 写这篇文章的时候 IK 最新版本 2.11.0, 而 dockerhub 上 OpenSearch 最新版是 2.11.1 如果版本不匹配的话是不能用的, 小版本号对不上…