win11系统或者第三方软件截图时候对比度突然拉高解决方法

原因是由于开启了自动HDR,系统识别错了场景,只要在设置里的关掉自动HDR就可以

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言: 为什么我首先想到要做厨房安全系统呢?厨房不仅是一个经常活动的场所,而且是家中危险系数最高的地方,您是否也有这样的担心,担心家人忘记关掉煤气、煲汤时忘记时间……一些小细节的疏忽大意,就可能危害到家庭的健康。 厨房智能监控系统介绍: 该系统可以监测厨房这样需要特别关注安全的地方。设备具备多种传感器接入,并且根据用途自由配置传感器的种类。设备接入云平台,可以通过智能手机实时了解当前状态,通过智能算法评估出安全系数,来做出针对性的防护措施。并且还可以手动作出修正处理。 智能厨房安全监控三部分: 家庭卫士通过多传感器对厨房温湿度、燃气、明火、烟雾进行监控; 通过算法对厨房各项环境数据进行综合评估分析,判断险情; 手机APP远程控制消防设备,处理危险 软件开发过程分析: 软件开发由三部分组成:下位机单片机程序、云端建立、以及手机端APP开发。用机智云做平台开发起来特别快,原因是有Gokit这样的开发板,并且有丰富底层代码范例的Dome程序。另外机智云建立云端数据的界面也特别友好,很适合入门者快速上手。还有最关键的是机智云有多个开源的手机APP的Dome源码提供参考,大大降低了开发门槛。 下位机程序 下位机程序中单片机和WiFi模块的通讯,以及WiFi模块接入以太网的规则,官方代码已经给的很完善了,初学者完全可以绕开这一段直接进行单片机开发,就和大家通常在普通STM32平台做功能一样的。 这里需要提出比较关键的一点是代码中的一个参数:product key。这是我们的设备连接到机智云平台哪一个云数据库的唯一判断依据。我们的开发板就是靠这个识别,来连接到你自己在机智云平台简历的数据接口的。这个product key是你建立属于自己的云端空间时机智云系统分配给你的,这个接下来要说的。我们做下位机单片机程序时,要把这个串码写进去。 官方代码把这个串码做在一个宏里,位于Procotol.h文件里: 为了大家直接在开发板上调试方便,我从官方Dome程序简单修改了一个程序,大家可以下载下来测试。 下位机单片程序参考代码详见附件内容。 注意:由于Gokit2开发板改版了,但是官方历程还未更新,RGB灯那里的代码需要做一些修改,具体位置是在hal_rgb_led.c文件里初始化RGB时需要把GPIOA0拉高: 云端建立 这需要在机智云官网上注册一个账号,然后就可以建立一个属于自己的云端数据空间了,简单四五个步骤就搞定,并且每一步都有指导说明,特别人性化,新手无痛入门! 1、首先要取一个云端设备名称,这个名称就是以后你手机APP上搜到的设备名称,比如我们这里叫做:智能厨房3。当搜到多个设备时,我们可以以设备的MAC地址区分不同设备。 2、然后我们要选择你所使用的开发板,并且选择一个云端范例模板。这里机智云简直就做的是傻瓜模式,我们完全可以利用模板轻松改一个自己的云端数据空间。当然也可以从新建议一个,不过新手建议从模板来改。 3、接下来我们要在模板中修改适合自己的数据,数据名称需要和前边下位机中给出的数据列表对应起来,名称需要完全一致,否则会导致对应不上。 我们开发板用到的设备数据包括如下,云端建立数据时,名称和类型要和下面结构体里定义的一样: 4,最后设置完成之后提交,机智云就会分配给你一个属于你自己的product key。我们需要把它更新到你的下位机单片机程序里。 手机app开发 这个因为有官方开源的Dome源码,所以我们只要有一些安卓或者ios开发基础,就可以轻松的从官方Dome中改一个出来。如果仅仅是学习测试使用,甚至可以直接用官方给的IOE Dome测试,因为这个Dome里没有都设备的product key进行筛选,所以凡是接入到机智云的Gokit开发板在局域网里都能被这个Dome APP找到并连接。 这里给一个智能厨房的APP,大家可以连接到Gokit开发板测试一下。因为是具体应用的APP,所以对product key做了筛选,只识别连入智能厨房云端的在线设备。所以测试时Gokit开发板需要使用前面代码里给的这个这个product key才可以。 APP测试中按如下对应关系参考: 1温湿度对应Gokit开发板上的温湿度传感器,显示温湿度; 2火焰传感器对应开发板上的红外对管传感器,用手遮挡时红外对管时,明火报警; 3换气扇操作对应开发板上的马达,打开换气扇按钮,马达开始正转; 4插座开关对应开发板的RGB LED中的红灯,打开插座开关按钮,红灯亮。 安卓手机客户端详见附件内容。
基于温度湿度一体的传感器DHT11 以下是在51单片机上测试成功的代码 #include<at89x52.h> #include<intrins.h>//加上这句下面的 _nop_();就能用 bit xianshiqiehuan; // sbit dht11_dat=P1^6; //开发板用 sbit dht11_dat=P2^0; //使用版用 unsigned char c,count, dht11temp,dht11dat; unsigned char dht11value[5]; unsigned int x,y,z; unsigned char code dat[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,}; delay() { unsigned char a; for(a=200;a>0;a--); } display(unsigned char x) //使用版用 { P0=dat[(x0)/10];//十位 P2_3=0; delay(); P2_3=1; P0=dat[(x0)];//个位 P2_2=0; delay(); P2_2=1; } /*display(unsigned char x) //开发板用 { P0=dat[(x0)/10];//十位 P1_2=0; delay(); P1_2=1; P0=dat[(x0)];//个位 P1_3=0; delay(); P1_3=1; } */ delay_1s() { unsigned int i=50000; while(i--); } delay_10us() //10us { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } void delayms(unsigned char x) //1ms单位延时程序 { unsigned char j; while(x--) { for(j=0;j<123;j++){;} } } read_dht11() { unsigned char i; dht11_dat=1; _nop_(); //起始 dht11_dat=0;//拉低总线 delayms(18);//手册要求大于18ms dht11_dat=1;//拉高总线等待dht11回应 while(dht11_dat); // 等待dht11回应 若有回应 dht11_dat=0;往下执行 while(!dht11_dat);//回应后dht11将总线拉低80us,过后又将总线拉高,进入下一步 while(dht11_dat); //拉高80us 又变低,往下执行 进入50us延时 for(i=0;i<24;i++) { while(!dht11_dat);//50us过后...... dht11_dat=1;往下执行 delay_10us();delay_10us();delay_10us();//延时30us,查看总线是高是低, dht11temp=0; //先默认为0处理 if(dht11_dat) dht11temp=1; //1处理 dht11dat=dht11dat<<1; //必须先移动再或 若先或再移本次数据就移动了 dht11dat=dht11dat|dht11temp; dht11value[i/8]=dht11dat; while(dht11_dat);//如果处理的是1,30us过后总线还是1,那就在此等待总线变为0进入下一个50us低电平,不然会重复进行0处理 } } main() { delay_1s(); //要求上电等1秒,让dht11稳定 EA=1;//开放中断 TMOD=0x01;//设T0 为16位计数方式 ET0=1;//定时0中断允许 TR0=1;//开启TR0 while(1) { if(!xianshiqiehuan) //显示温度 display(dht11value[2]) ; else {display(dht11value[0]) ; //显示湿度 P0=0x92&0x7f; //千位显 S.代表湿度 P2_5=0; delay(); P2_5=1; } } } dingshi() interrupt 1 //定时器0服务程序 { TH0=0; TL0=0; count++; if(count==55){count=0;read_dht11();xianshiqiehuan=~xianshiqiehuan; } //在切换显示时采集,以防中断采样带来的显示闪烁 }
要在Cesium中拉高已加载的地形高度,你可以使用Cesium的SampledHeightProperty API来监听高度变化,并更新地形的高度。以下是实现拉高地形高度的步骤: 1. 加载地形数据 使用Cesium的TerrainProvider API加载地形数据。Cesium支持多种地形数据源,例如STK World Terrain、Cesium Terrain、Mapbox Terrain等。你可以根据自己的需求选择相应的数据源。 ``` var viewer = new Cesium.Viewer('cesiumContainer'); var terrainProvider = new Cesium.CesiumTerrainProvider({ url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles' }); viewer.terrainProvider = terrainProvider; ``` 2. 监听高度变化 使用Cesium的SampledHeightProperty API监听高度变化。你可以在地形高度变化时更新地形的高度。 ``` var heightProperty = new Cesium.SampledHeightProperty(); heightProperty.addSample(viewer.clock.currentTime, 0); // 初始高度为0 viewer.clock.onTick.addEventListener(function(clock) { var time = clock.currentTime; var height = Math.sin(time.secondsOfDay) * 100; // 模拟高度变化 heightProperty.addSample(time, height); }); viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles', requestVertexNormals: true, requestWaterMask: true, hasVertexNormals: function() { return true; }, hasWaterMask: function() { return true; }, modifyShader: function(shader) { var regex = /terrain\.height\s*[\+\-]\s*(\d+\.?\d*)/g; var result = regex.exec(shader); if (result !== null) { var heightOffset = 'terrain.height + ' + heightProperty.getSample(viewer.clock.currentTime).height.toFixed(2); shader = shader.replace(regex, heightOffset); } return shader; } }); ``` 3. 修改地形着色器 使用Cesium的TerrainProvider API的modifyShader方法修改地形着色器,将地形高度替换为监听的高度。你可以在modifyShader方法中使用正则表达式匹配着色器代码,并将地形高度替换为监听的高度。 ``` modifyShader: function(shader) { var regex = /terrain\.height\s*[\+\-]\s*(\d+\.?\d*)/g; var result = regex.exec(shader); if (result !== null) { var heightOffset = 'terrain.height + ' + heightProperty.getSample(viewer.clock.currentTime).height.toFixed(2); shader = shader.replace(regex, heightOffset); } return shader; } ``` 这样,在地形数据加载完成后,地形就会被拉高到指定高度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值