电子烂人

个性签名:

没用比没有强

  • 2025-03-25
  • 回复了主题帖: 邀你聊一聊:学习MCU的正确方法和你的学习之路

    学个屁,进公司直接对接项目,边做边学,效率高的离谱 大厂打螺丝图一乐,小作坊全栈更锻炼人 另外MCU主要就是学外设之类的,外设的逻辑搞清楚,明白ARM的启动调试流程,其他其实没有太大区别。

  • 回复了主题帖: 【STM32H7S78-DK测评】5.数字时钟

    freebsder 发表于 2025-3-25 11:07 cubemx应该能生成直接支持网络的工程吧 有的,但是放进去之后的BUG没解决,UDP会卡在初始化阶段,之后会发帖子

  • 回复了主题帖: 【STM32H7S78-DK测评】6.移植传感器ISM330

    freebsder 发表于 2025-3-25 11:08 我和你一样,最开始什么都想自己做,结果做下来一算,还不如买现成的,还不担心质量。 目前看来最好的实践方法是先买成品,然后一点点刨析里面的内容

  • 2025-03-24
  • 回复了主题帖: 【STM32H7S78-DK测评】5.数字时钟

    freebsder 发表于 2025-3-24 15:06 你可以找个定时器1s定时读取rtc吧 其实我的想法是扔掉RTC直接用网络来授时接入时钟的。。。可惜LWIP还没塞进去,BUG有点多

  • 回复了主题帖: 【STM32H7S78-DK测评】4.调节二级页面

    随文补一个展示视频: [localvideo]dcc98569716bb26b4b3d3bad0151f2ba[/localvideo]  

  • 回复了主题帖: 【STM32H7S78-DK测评】6.移植传感器ISM330

    freebsder 发表于 2025-3-24 15:08 看来楼主和我一样,很多时候通过充值解决问题。。。 不充钱怎么变强

  • 回复了主题帖: >>征集 | 晒电机控制痛点与难题,一起寻求最优解!

    电机玩的不多,主要用一些直流和步进,也有部分用无刷电机,尤其是飞行器上的无刷电机,一般是无感的 以无感无刷电机为例,很多坛友第一时间提到“发热严重”,一般是线圈或者转轴有问题,损耗造成高摩擦或者电机绕组线圈漏电,属于较为好排查的机械故障。   更难缠的是转动不稳定问题,常见情况为电机出现异常震动,甚至堵转卡死,短时间会直接烧毁电机线圈,这种问题在无感驱动上尤为明显。   一般转动不稳定是相电流不稳定造成的,在无感无刷电机的三相绕组中,如果某一相或者某两相的电流与另外几相相差过大,就会造成电机三相电磁转矩不平衡,使电机运行不稳定,严重时可能导致电机无法转动。这种电流不平衡可能是由于电机绕组本身存在故障,如匝间短路、断路等,或者是驱动器输出电流异常引起的。   另外也可能是驱动器的问题;无感无刷电机的控制依赖于对转子位置的准确估算,以实现正确的换相控制。一单位置估算出现偏差,不准确,就会使电机的换相时机不正确,无法产生持续、稳定的转矩,甚至出现电机卡死的情况。另外如果PI控制器的比例、积分参数亦或者反馈环有问题也会发生一样的故障。   这种情况很难排查清楚,而且容易随着电机老化逐渐严重凸显。一般更先进的解决方案是检测电机震动,或者检测相电流平衡性。  

  • 发表了主题帖: 【STM32H7S78-DK测评】终.试用总结帖

    本帖最后由 电子烂人 于 2025-3-24 13:26 编辑 【感谢】 感谢ST、EEWORLD的小伙伴和各位大佬的支持,尤其感谢@lugl4313820和@NATHAN_XI等多位大佬的鼎力相助,测评学习到了很多东西   原定测评计划: 本次的板卡主要推广ST的屏幕GUI性能,所以主要测评方向为H7S的图像性能和应用,计划使用STM32H7S制作一个实时温度监护器 第一周:测评板卡外观,熟悉手册 第二周:尝试使用TOUCHGFX驱动屏幕,移植FREERTOS系统 第三周:使用RTC定时器,并联合显示屏实现时钟功能 第四周:增加数字温度传感器,尝试在TOUCHGFX中使用图表控件的方式展示出来 第五周:使用NANOEDGE AI功能,实时监测温度数据异常 第六周:移植网络LWIP协议,并实现数据入云功能   实际成果: 【STM32H7S78-DK测评】0.测评计划前瞻 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn) 【STM32H7S78-DK测评】1.收到板卡,简单测评 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn) 【STM32H7S78-DK测评】2.简单TOUCHGFX点屏 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn) 【STM32H7S78-DK测评】3.转轮动效菜单的实现 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn) 【STM32H7S78-DK测评】4.调节二级页面 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn) 【STM32H7S78-DK测评】5.数字时钟 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn) 【STM32H7S78-DK测评】6.移植传感器ISM330 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn) 总结: 这次评测基础任务完成较好,也学习到了很多UI控件和RTOS相关的功能。 可惜的是,最后两个功能NANOEDGE AI 和 lwip_udp 已经在单独的工程里做出来了,但是无法融入到整个做好的TOUCHGFX工程中去 之后会尝试修改并发出DEMO视频。 这个任务之后要短暂封笔了,笔者在忙自己的毕业设计和论文,不可否认的是,H7SR板子的评测为我提供了非常多的经验积累。 再次感谢EEWORLD和各位大佬的支持。

  • 2025-03-23
  • 回复了主题帖: 【STM32H7S78-DK测评】4.调节二级页面

    Jacktang 发表于 2025-2-22 15:10 根据滑动的转轮控件,需要选择所要跳转的页面的思路是什么 就是选中哪一条,就使能哪个跳转按键

  • 2025-03-15
  • 回复了主题帖: [STM32H7R/S]测评 ⑨nano edge ai studio 训练一个模型--下

    重新研究了下,不太明白为什么要在BOOT下运行?是APP跑不起来吗  

  • 发表了主题帖: 【STM32H7S78-DK测评】6.移植传感器ISM330

    本帖最后由 电子烂人 于 2025-3-23 21:51 编辑 0.前言 之前的计划是用传感器子板STEVAL-C34KAT2上的ISM330IS做传感器,但是出了一点意料之外的问题。。。 转接板早在年前就做出来了,主要问题在于那个传感器的连接器座子太不好焊了,而且间距很小很小,手贴了好几次都搞不定。   打不过我还跑不过吗,备用方案启动:直接购入一块类似传感器的扩展板卡   IKS02A1是带一个ISM330DHCX的,相比ISM330IS少了ISPU部分,但是更加精准。   感觉钱包在滴血。。。。但是为了做这个是值得的 1.板卡配置 板卡之间通过ARDUINO UNO接口对插,i2C接口链接,使能板卡上的I2C1即可     IKS02A1的底层代码在X-NUCLEO-MEMS包里有包含,仅需要使能中间件即可使用:   2.传感器代码 这边主要用到的便是ISM330其中的一轴加速度传感器, 底层代码需要移植IKS02A1的BSP包:   主要驱动部分代码参考U575的DataLogTerminal示例: void MX_MEMS_Init(void) { /* USER CODE BEGIN SV */ /* USER CODE END SV */ /* USER CODE BEGIN MEMS_Init_PreTreatment */ /* USER CODE END MEMS_Init_PreTreatment */ /* Initialize the peripherals and the MEMS components */ MX_IKS02A1_DataLogTerminal_Init(); /* USER CODE BEGIN MEMS_Init_PostTreatment */ /* USER CODE END MEMS_Init_PostTreatment */ } /* * LM background task */ int32_t MX_MEMS_Process(void) { /* USER CODE BEGIN MEMS_Process_PreTreatment */ IKS02A1_MOTION_SENSOR_Axes_t acceleration; int32_t i; /* USER CODE END MEMS_Process_PreTreatment */ //MX_IKS02A1_DataLogTerminal_Process(); /* USER CODE BEGIN MEMS_Process_PostTreatment */ for(i = 0; i < IKS02A1_MOTION_INSTANCES_NBR; i++) { IKS02A1_MOTION_SENSOR_GetAxes(i, MOTION_ACCELERO, &acceleration); } return acceleration.x; /* USER CODE END MEMS_Process_PostTreatment */ } /** * [url=home.php?mod=space&uid=159083]@brief[/url] Initialize the DataLogTerminal application * @retval None */ void MX_IKS02A1_DataLogTerminal_Init(void) { //displayFloatToInt_t out_value_odr; //int16_t i; IKS02A1_MOTION_SENSOR_Init(IKS02A1_ISM330DHCX_0, MOTION_ACCELERO | MOTION_GYRO); //IKS02A1_MOTION_SENSOR_Init(IKS02A1_IIS2DLPC_0, MOTION_ACCELERO); //IKS02A1_MOTION_SENSOR_Init(IKS02A1_IIS2MDC_0, MOTION_MAGNETO); /* for(i = 0; i < IKS02A1_MOTION_INSTANCES_NBR; i++) { IKS02A1_MOTION_SENSOR_GetCapabilities(i, &MotionCapabilities[i]); snprintf(dataOut, MAX_BUF_SIZE, "\r\nMotion Sensor Instance %d capabilities: \r\n ACCELEROMETER: %d\r\n GYROSCOPE: %d\r\n MAGNETOMETER: %d\r\n LOW POWER: %d\r\n", i, MotionCapabilities[i].Acc, MotionCapabilities[i].Gyro, MotionCapabilities[i].Magneto, MotionCapabilities[i].LowPower); printf("%s", dataOut); floatToInt(MotionCapabilities[i].AccMaxOdr, &out_value_odr, 3); snprintf(dataOut, MAX_BUF_SIZE, " MAX ACC ODR: %d.%03d Hz, MAX ACC FS: %d\r\n", (int)out_value_odr.out_int, (int)out_value_odr.out_dec, (int)MotionCapabilities[i].AccMaxFS); printf("%s", dataOut); floatToInt(MotionCapabilities[i].GyroMaxOdr, &out_value_odr, 3); snprintf(dataOut, MAX_BUF_SIZE, " MAX GYRO ODR: %d.%03d Hz, MAX GYRO FS: %d\r\n", (int)out_value_odr.out_int, (int)out_value_odr.out_dec, (int)MotionCapabilities[i].GyroMaxFS); printf("%s", dataOut); floatToInt(MotionCapabilities[i].MagMaxOdr, &out_value_odr, 3); snprintf(dataOut, MAX_BUF_SIZE, " MAX MAG ODR: %d.%03d Hz, MAX MAG FS: %d\r\n", (int)out_value_odr.out_int, (int)out_value_odr.out_dec, (int)MotionCapabilities[i].MagMaxFS); printf("%s", dataOut); } */ } 3.屏幕显示 传感器驱动完成后,要反馈到屏幕上,在“电机监测”界面添加一个文本框,设置为带数值的:   之后设置代码: void MonitorView::handleTickEvent () { float acc_Date; tickCounter++; if(tickCounter>1000) { tickCounter = 0; } if (tickCounter % 5 == 0) { if(0 == acc_Date) { acc_Date=MX_MEMS_Process(); Unicode::snprintfFloat(textArea1Buffer,20,"%.1f",acc_Date); textArea1.invalidate(); } } } 4.成果展示 由于地球重力,当被立起来之后加速度计X轴的数值会变大 [localvideo]95cf6d7da7fcd0d7248a27abf985a67a[/localvideo]  

  • 2025-02-28
  • 回复了主题帖: 手机摄像头坏了,有什么实惠点的拍摄方案

    极限零 发表于 2025-2-27 13:09 话说2023年买的,为什么买2020出的手机啊,那几年手机性能更新超快的 一方面是情怀,当时看到简直是梦中神机; 另一方面因为没有喜欢的型号。。。全网除了挖孔屏就是水滴,真的丑

  • 2025-02-27
  • 回复了主题帖: STM32C0移植LSM6DS3数据卡死

    wangerxian 发表于 2025-2-27 16:44 现在ST的硬件IIC还会卡死?没有超时机制吗 就是超时TIMEOUT了

  • 回复了主题帖: STM32C0移植LSM6DS3数据卡死

      初始化配置如图,感觉每次用GIT上的代码都有类似的情况,是代码移植有问题吗?  

  • 发表了主题帖: STM32C0移植LSM6DS3数据卡死

    遇到了之前做评测相似的问题,STM32C0移植LSM6DS3时候,数据不通过RST检测,感觉是一直卡在了复位上 do { lsm6ds3tr_c_reset_get(&dev_ctx, &rst); } while (rst); 手动设置复位寄存器之后,还是只会显示一次数据后卡死,每次显示数据一致   而且这个值完全不像是正常采集出来的值, 具体DEBUG发现是卡在了I2C的timeOUT 函数里 感觉像是压根没有正常读取数据? 贴上原代码来求教,不胜感激 int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC1_Init(); MX_USART1_UART_Init(); MX_I2C1_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ lsm6ds3tr_c_read_data_polling(); } /* USER CODE END 3 */ } /** * [url=home.php?mod=space&uid=159083]@brief [/url] System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_FLASH_SET_LATENCY(FLASH_LATENCY_1); /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { Error_Handler(); } } /* USER CODE BEGIN 4 */ void lsm6ds3tr_c_read_data_polling(void) { /* Initialize mems driver interface */ stmdev_ctx_t dev_ctx; dev_ctx.write_reg = platform_write; dev_ctx.read_reg = platform_read; // dev_ctx.mdelay = platform_delay; dev_ctx.handle = &hi2c1; /* Wait sensor boot time */ HAL_Delay(BOOT_TIME); /* Check device ID */ lsm6ds3tr_c_device_id_get(&dev_ctx, &whoamI); if ( whoamI != LSM6DS3TR_C_ID ) while (1); /*manage here device not found */ /* Restore default configuration*/ lsm6ds3tr_c_reset_set(&dev_ctx, PROPERTY_ENABLE); do { lsm6ds3tr_c_reset_get(&dev_ctx, &rst); } while (rst); /* Enable Block Data Update */ // lsm6ds3tr_c_block_data_update_set(&dev_ctx, PROPERTY_ENABLE); /* Set Output Data Rate */ lsm6ds3tr_c_xl_data_rate_set(&dev_ctx, LSM6DS3TR_C_XL_ODR_12Hz5); lsm6ds3tr_c_gy_data_rate_set(&dev_ctx, LSM6DS3TR_C_GY_ODR_12Hz5); /* Set full scale */ lsm6ds3tr_c_xl_full_scale_set(&dev_ctx, LSM6DS3TR_C_2g); lsm6ds3tr_c_gy_full_scale_set(&dev_ctx, LSM6DS3TR_C_2000dps); /* Configure filtering chain(No aux interface) */ /* Accelerometer - analog filter */ //lsm6ds3tr_c_xl_filter_analog_set(&dev_ctx,LSM6DS3TR_C_XL_ANA_BW_400Hz); /* Accelerometer - LPF1 path ( LPF2 not used )*/ //lsm6ds3tr_c_xl_lp1_bandwidth_set(&dev_ctx, LSM6DS3TR_C_XL_LP1_ODR_DIV_4); /* Accelerometer - LPF1 + LPF2 path */ //lsm6ds3tr_c_xl_lp2_bandwidth_set(&dev_ctx,LSM6DS3TR_C_XL_LOW_NOISE_LP_ODR_DIV_100); /* Accelerometer - High Pass / Slope path */ //lsm6ds3tr_c_xl_reference_mode_set(&dev_ctx, PROPERTY_DISABLE); //lsm6ds3tr_c_xl_hp_bandwidth_set(&dev_ctx, LSM6DS3TR_C_XL_HP_ODR_DIV_100); /* Gyroscope - filtering chain */ //lsm6ds3tr_c_gy_band_pass_set(&dev_ctx,LSM6DS3TR_C_HP_260mHz_LP1_STRONG); /* Read samples in polling mode (no int) */ while (1) { /* Read output only if new value is available */ lsm6ds3tr_c_reg_t reg; lsm6ds3tr_c_status_reg_get(&dev_ctx, ®.status_reg); if (reg.status_reg.xlda) { /* Read magnetic field data */ memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t)); lsm6ds3tr_c_acceleration_raw_get(&dev_ctx, data_raw_acceleration); acceleration_mg[0] = lsm6ds3tr_c_from_fs2g_to_mg( data_raw_acceleration[0]); acceleration_mg[1] = lsm6ds3tr_c_from_fs2g_to_mg( data_raw_acceleration[1]); acceleration_mg[2] = lsm6ds3tr_c_from_fs2g_to_mg( data_raw_acceleration[2]); } if (reg.status_reg.gda) { /* Read magnetic field data */ memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t)); lsm6ds3tr_c_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate); angular_rate_mdps[0] = lsm6ds3tr_c_from_fs2000dps_to_mdps( data_raw_angular_rate[0]); angular_rate_mdps[1] = lsm6ds3tr_c_from_fs2000dps_to_mdps( data_raw_angular_rate[1]); angular_rate_mdps[2] = lsm6ds3tr_c_from_fs2000dps_to_mdps( data_raw_angular_rate[2]); } if (reg.status_reg.tda) { /* Read temperature data */ memset(&data_raw_temperature, 0x00, sizeof(int16_t)); lsm6ds3tr_c_temperature_raw_get(&dev_ctx, &data_raw_temperature); temperature_degC = lsm6ds3tr_c_from_lsb_to_celsius( data_raw_temperature ); } } } /* * @brief Write generic device register (platform dependent) * * @param handle customizable argument. In this examples is used in * order to select the correct sensor bus handler. * @param reg register to write * @param bufp pointer to data to write in register reg * @param len number of consecutive register to write * */ static int32_t platform_write(void *handle, uint8_t reg, const uint8_t *bufp, uint16_t len) { HAL_I2C_Mem_Write(handle, LSM6DS3TR_C_I2C_ADD_L, reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*) bufp, len, 1000); return 0; } /* * @brief Read generic device register (platform dependent) * * @param handle customizable argument. In this examples is used in * order to select the correct sensor bus handler. * @param reg register to read * @param bufp pointer to buffer that store the data read * @param len number of consecutive register to read * */ static int32_t platform_read(void *handle, uint8_t reg, uint8_t *bufp, uint16_t len) { HAL_I2C_Mem_Read(handle, LSM6DS3TR_C_I2C_ADD_L, reg, I2C_MEMADD_SIZE_8BIT, bufp, len, 1000); return 0; } /* * @brief Write generic device register (platform dependent) * * @param tx_buffer buffer to transmit * @param len number of byte to send * */ /* USER CODE END 4 */  

  • 2025-02-26
  • 回复了主题帖: 手机摄像头坏了,有什么实惠点的拍摄方案

    吾妻思萌 发表于 2025-2-26 07:30 听我的 买新手机,手机目前快成生产力了 直播 外卖 滴滴,很多人自媒体小红是都手机用来赚钱了 你换新手机 ... 倒也想换,奈何现在一个新手机顶我一个月工资了 打开电商一看怎么都这么贵,还是买个二手机过度下得了

  • 2025-02-25
  • 发表了主题帖: 手机摄像头坏了,有什么实惠点的拍摄方案

    上周骑车把手机磕了一下,主摄像头摔的不能用了,挺影响拍东西的,最近的帖子都没法贴图片 [localvideo]a6c06c6868c452351213867a0ba95a6b[/localvideo]   这台红米K30陪我征战2年了,还是2020年的机型。换手机的话,也没有看到同款类似的升降摄像头设计,其他的都不喜欢 问下万能的坛友,有什么其他拍摄桌面的方法,拍些开发板就足够了  

  • 2025-02-22
  • 回复了主题帖: 掀桌子了,已提离职。最近求职行情咋样

    说不好找的是没什么本事和技术在身的大学生,1100w的“闲杂人员” 技术过硬的话其实猎头都抢着要,就是薪资待遇好坏的问题了

  • 2025-02-21
  • 回复了主题帖: 【Raspberry Pi 5测评】6.WS2812点灯

    freebsder 发表于 2025-2-20 19:17 点灯没有动图就完全不够炫酷了。 加班要累死了,周末统一补上

  • 2025-02-20
  • 发表了主题帖: 【STM32H7S78-DK测评】4.调节二级页面

    本帖最后由 电子烂人 于 2025-2-20 14:15 编辑 1.前言: 之前的帖子成功实现了主菜单转轮效果(【STM32H7S78-DK测评】3.转轮动效菜单的实现 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn))不过当时只做了只有一个按键,跳转的页面也是固定的。并且由于按键的选区有部分位于转轮的控件区域,偶尔会有无法拖动的情况。 如果要实行跳转的话,官方的办法是在来的基础上加入一个过度页面,这样做更麻烦了。 这篇帖子试一下不同二级页面的设置,并优化一下转轮的“死区”。 2.设计思路: 由于转轮特效只提供基础的选择功能,并在转轮停止后返回一个当前选中的值,如果要加入按键的话,单个按键只能对应一个页面跳转功能。 初始的想法是让按键跳转页面,根据滑动的转轮控件,选择所要跳转的页面。但是 3.页面设置: 在原来的工程的基础上,加入6个二级页面   这六个页面分别对应转盘上的六个选项,再把每个页面保留一个返回键这样页面的返回跳转就做好了。 为了让主页面能精准的跳转到二级页面,在转轮右侧原先按键的位置,放着6个重叠的按键,并设置为隐藏:  分别命名好各种功能,并每一个绑定跳转不同的页面。 在代码中修改,让转轮调用到一个的时候,右侧按键使能并显示当前选中的,其他的被不使能: void mainMenuView::scrollWheel1_ItemSelectedHandler(int16_t itemSelected) { presenter->menuSelected(itemSelected); switch (itemSelected) { case 0://Monitor buttonEnterMonitor.setVisible(true); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 1://Temp buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(true); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 2://AD buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(true); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 3://Details buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(true); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 4://Mesh buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(true); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(false); buttonEnterInfo.invalidate(); break; case 5://Info buttonEnterMonitor.setVisible(false); buttonEnterMonitor.invalidate(); buttonEnterTemp.setVisible(false); buttonEnterTemp.invalidate(); buttonEnterAD.setVisible(false); buttonEnterAD.invalidate(); buttonEnterDetails.setVisible(false); buttonEnterDetails.invalidate(); buttonEnterMesh.setVisible(false); buttonEnterMesh.invalidate(); buttonEnterInfo.setVisible(true); buttonEnterInfo.invalidate(); break; default: break; } } 即可完成二级页面的跳转切换功能。

统计信息

已有184人来访过

  • 芯积分:364
  • 好友:2
  • 主题:62
  • 回复:134

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言