国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

這篇具有很好參考價值的文章主要介紹了6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

設計題

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)
6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)
6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)
6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

節(jié)點1

1.將時鐘樹頻率設置成32MHz

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

2.將GPIO引腳做如下配置:

引腳功能

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

使能中斷

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)
6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)
6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

打開串口通信2

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

3.生成工程代碼

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

4.移植OLED、LoRa庫文件

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

5.編寫邏輯代碼

Task_Main.h
#ifndef _TASK_MAIN_H_
#define _TASK_MAIN_H_

#include "main.h"
#include "stm32l0xx_hal.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "oled.h"
#include "sx127x_lora.h"
#include "usart.h"

void Task_BrdInit(void);
void Task_Main(void);
void key_fun(void);
void led_fun(void);
void oled_dis(void);

#endif
Task_Main.c
#include "Task_Main.h"

radio_handle_t handle;
#define FREQ			445000000L

bool key_flag = 0;
bool lora_flag = 0;
uint8_t LD2=0, LD3=0, LD5=0;

uint32_t count = 0;
uint8_t data[10] = {0};
uint8_t uart_recv_buf[256] = {0};

uint8_t ID = 97;
char lora_send_buf[23] = "ID:97,LD2:0,LD3:0,LD5:0";

int fputc(int ch, FILE *f)
{
    while(((USART2->ISR)&(1<<7))==0);
    USART2->TDR = (uint8_t)ch;
  
    return ch;
}

void Task_Main(void)
{
	/*按鍵檢測*/
	if(key_flag)
	{
		key_flag = 0;
		key_fun();
	}
	/*指示燈狀態(tài)檢測*/
	led_fun();
	/*OLED顯示更新*/
	oled_dis();
}

void Task_BrdInit(void)
{
    //OLED初始化
    OLED_PowerControl(ENABLE);
    HAL_Delay(200);
    OLED_Init();
    OLED_Clear();
	OLED_ShowString(0, 0, (unsigned char *)"      RX:      ", 16);
	OLED_ShowString(0, 2, (unsigned char *)"     NUM:0     ", 16);
  
    //LoRa初始化
    spi_init();
    zm4xx_pin_init();
    handle = radio_zm4xx_inst_init(spi_recv_byte,spi_send_byte,zm4xx_rst_pin_set,zm4xx_sel_pin_set,HAL_Delay,delay_us);
    if(handle != NULL)
    {
      if(RADIO_RET_OK == radio_freq_set(handle, FREQ))
      {
      }
      radio_mode_set(handle, RX_MODE);	//Receive Mode
    } 
	__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
	HAL_UART_Receive_IT(&huart2, uart_recv_buf, 1);
	
	data[0] = '\0';
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_14)
	{
		key_flag = 1;
	}
	if(GPIO_Pin == GPIO_PIN_10)
	{
		lora_flag = 1;
	}
}

void key_fun(void)
{
	sprintf(lora_send_buf, "ID:%2d,LD2:%c,LD3:%c,LD5:%c", ID, LD2, LD3, LD5);
	radio_buf_send(handle, (uint8_t *)lora_send_buf, 23);
	radio_mode_set(handle, RX_MODE);
}

void led_fun(void)
{
	if(LD2)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
	}
	else
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);		
	}
	if(LD3)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
	}
	else
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);		
	}
	if(LD5)
	{
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);
	}
	else
	{
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);		
	}	
}

void oled_dis(void)
{
	char dis1[16] = {0};
	char dis2[16] = {0};	
	
	sprintf(dis1, "      RX:%c", data[0]);
	sprintf(dis2, "     NUM:%d", count);
	
	OLED_ShowString(0, 0, (uint8_t *)dis1, 16);
	OLED_ShowString(0, 2, (uint8_t *)dis2, 16);	
}

stm32l0xx_it.c
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN TD */
extern uint8_t data[10];
extern uint32_t count;
extern uint8_t LD2, LD3, LD5;

/* USER CODE END TD */
/**
  * @brief This function handles USART2 global interrupt / USART2 wake-up interrupt through EXTI line 26.
  */
void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
	
	if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE)==SET)
	{
		data[0] = USART2->RDR;
		switch(data[0])
		{
			case '@':
				if(LD5)
				{
					LD5 = 0;
				}
				else
				{
					LD5 = 1;
				}
				count++;
				break;
			case '#':
				if(LD2)
				{
					LD2 = 0;
				}
				else
				{
					LD2 = 1;
				}	
				count++;
				break;
			case '$':
				if(LD3)
				{
					LD3 = 0;
				}
				else
				{
					LD3 = 1;
				}
				count++;
				break;
			default:
		HAL_UART_Transmit(&huart2, (uint8_t *)"error", 5, 50);				
				break;
		}
	}
  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}
main.c
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "Task_Main.h"
/* USER CODE END Includes */
  /* USER CODE BEGIN 2 */
	Task_BrdInit();
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	 Task_Main();
  }
  /* USER CODE END 3 */

節(jié)點2

1.將時鐘樹頻率設置成32MHz

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

2.將GPIO引腳做如下配置:

引腳功能

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

使能中斷

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)
6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)
6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

3.生成工程代碼

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)

4.移植LoRa、OLED庫文件

6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)文章來源地址http://www.zghlxwxcb.cn/news/detail-401972.html

5.編寫邏輯代碼

Task_Main.h

#ifndef _TASK_MAIN_H_
#define _TASK_MAIN_H_

#include "main.h"
#include "stm32l0xx_hal.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "oled.h"
#include "sx127x_lora.h"
#include "adc.h"

void Task_BrdInit(void);
void Task_Main(void);
void get_adc(void);
void oled_dis(void);
void oled_flush(void);
void lora_recv(void);
void get_cmd(void);
void led_fun(void);
	
#endif

Task_Main.c
#include "Task_Main.h"

radio_handle_t handle;
#define FREQ			445000000L

bool key_flag = 0;
bool lora_flag = 0;
bool oled_mode = 0;

uint32_t ADC_Value[20] = {0};
uint8_t LD2=0, LD3=0, LD5=0;
uint32_t num = 0;

uint8_t lora_recv_buf[256] = {0};
uint16_t lora_recv_buf_size = 0;

float vol1 = 3.1;
float vol2 = 0.8;

void Task_Main(void)
{
	/*按鍵檢測*/
	if(key_flag)
	{
		key_flag = 0;
		oled_mode = !oled_mode;
		oled_flush();
	}
	/*ADC檢測*/
	get_adc();
	/*oled顯示刷新*/
	oled_dis();
	/*lora接收檢測*/
	if(lora_flag)
	{
		lora_flag = 0;
		lora_recv();
	}
	/*led狀態(tài)更新*/
	led_fun();
}

void Task_BrdInit(void)
{
    //OLED初始化
    OLED_PowerControl(ENABLE);
    HAL_Delay(200);
    OLED_Init();
    OLED_Clear();
	OLED_ShowString(0, 0, (unsigned char *)"    RP1:3.1V    ", 16);
	OLED_ShowString(0, 2, (unsigned char *)"    RP2:0.8V    ", 16);
  
    //LoRa初始化
    spi_init();
    zm4xx_pin_init();
    handle = radio_zm4xx_inst_init(spi_recv_byte,spi_send_byte,zm4xx_rst_pin_set,zm4xx_sel_pin_set,HAL_Delay,delay_us);
    if(handle != NULL)
    {
      if(RADIO_RET_OK == radio_freq_set(handle, FREQ))
      {
      }
      radio_mode_set(handle, RX_MODE);	//Receive Mode
    } 
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_14)
	{
		key_flag = 1;
	}
	if(GPIO_Pin == GPIO_PIN_10)
	{
		lora_flag = 1;
	}
}

void get_adc(void)
{
	HAL_ADC_Start_DMA(&hadc, ADC_Value, 10);
	vol2 = ((ADC_Value[0]+ADC_Value[2]+ADC_Value[4]+ADC_Value[6]+ADC_Value[8])*3.3)/(4095*5);
	vol1 = ((ADC_Value[1]+ADC_Value[3]+ADC_Value[5]+ADC_Value[7]+ADC_Value[9])*3.3)/(4095*5);	
	vol1 = (int)(vol1*10 + 0.5) * 0.1;
	vol2 = (int)(vol2*10 + 0.5) * 0.1;
}

void oled_dis(void)
{
	char dis_vol1[3] = {0};
	char dis_vol2[3] = {0};
	char dis_num[6] = {0};
	
	if(!oled_mode)
	{
		sprintf(dis_vol1, "%3.1f", vol1);
		sprintf(dis_vol2, "%3.1f", vol2);		

		OLED_ShowString(64, 0, (uint8_t *)dis_vol1, 16);
		OLED_ShowString(64, 2, (uint8_t *)dis_vol2, 16);	
	}
	else
	{
		sprintf(dis_num, "%d", num);
		OLED_ShowString(72, 0, (uint8_t *)dis_num, 16);	
		if(LD2&LD3)
		{
			OLED_ShowString(64, 2, (unsigned char *)"ON ", 16);
		}
		else
		{
			OLED_ShowString(64, 2, (unsigned char *)"OFF", 16);
		}		
	}
}

void oled_flush(void)
{
	char oled_fl1[16] = {0};
	char oled_fl2[16] = {0};	
	
	if(!oled_mode)
	{
		sprintf(oled_fl1, "    RP1:%3.1fV    ", vol1);
		sprintf(oled_fl2, "    RP1:%3.1fV    ", vol2);	
		
		OLED_ShowString(0, 0, (uint8_t *)oled_fl1, 16);
		OLED_ShowString(0, 2, (uint8_t *)oled_fl2, 16);		
	}
	else
	{
		sprintf(oled_fl1, "     NUM:%d", num);
		OLED_ShowString(0, 0, (uint8_t *)"                ", 16);
		OLED_ShowString(0, 0, (uint8_t *)oled_fl1, 16);		
		if(LD2&LD3)
		{
			OLED_ShowString(0, 2, (unsigned char *)"    STA:ON      ", 16);
		}
		else
		{
			OLED_ShowString(0, 2, (unsigned char *)"    STA:OFF     ", 16);
		}
		
	}	
}

void lora_recv(void)
{
	int ret = -1;
	
	ret = radio_buf_recv(handle, lora_recv_buf, &lora_recv_buf_size);
	if((ret== RADIO_RET_OK)&&(lora_recv_buf_size==23))
	{
		get_cmd();
	}
}

void get_cmd(void)
{
	if((lora_recv_buf[3]=='9')&&(lora_recv_buf[4]=='7'))
	{
		LD2 = lora_recv_buf[10];
		LD3 = lora_recv_buf[16];
		LD5 = lora_recv_buf[22];	
		num++;
	}
}

void led_fun(void)
{
	if(LD2==1)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
	}
	else
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);		
	}
	if(LD3==1)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
	}
	else
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);		
	}
	if(LD5==1)
	{
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);
	}
	else
	{
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);		
	}	
}

main.c
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "Task_Main.h"
/* USER CODE END Includes */
  /* USER CODE BEGIN 2 */
	Task_BrdInit();
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	 Task_Main();
  }
  /* USER CODE END 3 */

實驗現(xiàn)象

Node_A

Node_B

到了這里,關于6 -【第十三屆】藍橋杯物聯(lián)網試題 (省賽題)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 第十三屆藍橋杯省賽Python 組

    第十三屆藍橋杯省賽Python 組

    本次所有代碼均存放于倉庫: Github :GxlHus/Algorithm at 藍橋杯 (github.com) Gitee :Algorithm: 算法解題 - Gitee.com 原題目:第十三屆藍橋杯大賽軟件賽省賽_PB.pdf · AYO/Algorithm - Gitee.com 本次省賽題目總體來說不難,總體質量比較高,尤其是后邊幾道題,雖然能輕易做出來,但是想跑通所

    2023年04月17日
    瀏覽(26)
  • 第十三屆藍橋杯省賽 python B組復盤

    第十三屆藍橋杯省賽 python B組復盤

    ?????? 備戰(zhàn)藍橋杯第一彈–復盤 思路 (當時第一次參加藍橋杯,當時現(xiàn)場心里小鹿亂撞,用排序輸出了還每個字母數數驗證一番(滑稽)) 字符串轉列表 列表排序 列表轉字符串 代碼 思路 當時在現(xiàn)場程序沒跑出來 想著那個數取余2余1,取余4余1,取余8余1可以只看取余8余1的,

    2023年04月20日
    瀏覽(26)
  • 【藍橋杯Web】第十三屆藍橋杯(Web 應用開發(fā))省賽真題

    【藍橋杯Web】第十三屆藍橋杯(Web 應用開發(fā))省賽真題

    第十三屆藍橋杯全國軟件和信息技術專業(yè)人才大賽(軟件類)新開了Web應用開發(fā)比賽,本文介紹第十三屆藍橋杯Web應用開發(fā)的省賽題目以及解析。 題目描述:使用Flex屬性快速完成布局。 題目分析:主要涉及的是Flex彈性布局的知識,主要包括主軸方向和是否換行。 題目代碼:

    2023年04月10日
    瀏覽(27)
  • 第十三屆藍橋杯大賽軟件賽省賽(C++研究生組)

    可以證明,只要首先裁剪最外圍的 4 4 4 條邊,之后無論怎樣裁剪,次數都是最少。對于 n n n 行 m m m 列的二維碼,至少需要裁剪 n m + 3 nm + 3 nm + 3 次,因此答案為 20 × 22 + 3 = 443 20times 22+3=443 20 × 22 + 3 = 443 。 證明:只需證明裁掉邊界后至少還需裁剪 n m ? 1 nm-1 nm ? 1 次。 n

    2023年04月10日
    瀏覽(25)
  • 【藍橋杯嵌入式】第十三屆藍橋杯嵌入式省賽客觀題以及詳細題解

    【藍橋杯嵌入式】第十三屆藍橋杯嵌入式省賽客觀題以及詳細題解

    題解: ??概念題。 MCO引腳,是單片機對外提供時鐘的引腳。 HSE,高速外部時鐘信號,時鐘源由外部晶體/陶瓷諧振器與外部時鐘; HSI,高速的內部時鐘,由內部8MHz的RC振蕩器產生,可直接作為系統(tǒng)時鐘或在2分頻后作為PLL輸入; SYSCLK,是系統(tǒng)時鐘; HSE/2,對高速外部時鐘進

    2023年04月16日
    瀏覽(787)
  • 第十三屆藍橋杯 Java C組省賽 C 題——紙張尺寸(AC)

    在 ISO 國際標準中定義了 A0 紙張的大小為 1189mm × 841mm, 將 A0 紙 沿長邊對折后為 A1 紙, 大小為 841mm × 594mm, 在對折的過程中長度直接取 下整 (實際裁剪時可能有損耗)。將 A1 紙沿長邊對折后為 A2 紙, 依此類推。 輸入紙張的名稱, 請輸出紙張的大小。 輸入一行包含一個字符串表示

    2024年02月11日
    瀏覽(27)
  • 第十三屆藍橋杯 C++ B組省賽 C 題——刷題統(tǒng)計(AC)

    小明決定從下周一開始努力刷題準備藍橋杯競賽。他計劃周一至周五每天 做 a a a 道題目, 周六和周日每天做 b b b 道題目。請你幫小明計算, 按照計劃他將在 第幾天實現(xiàn)做題數大于等于 n n n 題? 輸入一行包含三個整數 a , b a,b a , b 和 n n n . 輸出一個整數代表天數。 10 20 99 8 1 ≤

    2024年01月20日
    瀏覽(30)
  • 看看去年藍橋考了什么,第十三屆藍橋杯省賽(C/C++ 大學B組)題解

    看看去年藍橋考了什么,第十三屆藍橋杯省賽(C/C++ 大學B組)題解

    本題為填空題,只需要算出結果后,在代碼中使用輸出語句將所填結果輸出即可。 九進制正整數 (2022)9 轉換成十進制等于多少? 最大運行時間:1s 最大運行內存: 512M 這是一道經典的進制轉換題目,具體可以點進鏈接看看這篇文章。進制轉換點擊這里?。?! 本題為填空題,只

    2024年02月02日
    瀏覽(54)
  • 第十三屆藍橋杯 Java B 組省賽 D 題—— 最少刷題數(AC)

    小藍老師教的編程課有 N N N 名學生, 編號依次是 1 … N 1…N 1 … N 。第 i i i 號學生這學期 刷題的數量是 A i A_{i} A i ? 。 對于每一名學生, 請你計算他至少還要再刷多少道題, 才能使得全班刷題 比他多的學生數不超過刷題比他少的學生數。 第一行包含一個正整數 N N N 。 第二

    2023年04月09日
    瀏覽(29)
  • 2022 第十三屆藍橋杯大賽軟件賽省賽(第二場),C/C++ 大學B組題解

    2022 第十三屆藍橋杯大賽軟件賽省賽(第二場),C/C++ 大學B組題解

    2022 第十三屆藍橋杯大賽軟件賽省賽(第二場),C/C++ 大學B組題解 補題鏈接:地址 第1題 —— 練習 (5分) 題意:過了樣例交上去0分,問可能是ABC的哪一種 顯然都是,答案:ABC 第2題 —— 三角回文數 (5分) 題意:求第一個大于某2e8的數的回文數,且滿足他可以等于1+2+…

    2023年04月09日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包