光线跟踪钛合金猫眼-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: createskyblue

光线跟踪钛合金猫眼

[复制链接]
发表于 2020-1-31 16:34 | 显示全部楼层
不错啊,学习一下算法。
发表于 2020-2-7 21:56 | 显示全部楼层

这创意着实不错!
发表于 2020-2-9 16:42 | 显示全部楼层
多谢分享,给力
发表于 2020-2-11 22:51 | 显示全部楼层
特别有意思,学习一下,谢谢分享
发表于 2020-2-16 16:44 | 显示全部楼层
你好,我有两个问题
1.IrisSideList = IrisSideList[i + 1];
    IrisSide += IrisSideList;
为何不直接写成一行  IrisSide += IrisSideList[i + 1]; ?
2.IrisSide = IrisSide / 6;
你循环累加了7次,要求平均值的话为什么这里要除6?
 楼主| 发表于 2020-3-3 11:27 | 显示全部楼层
本帖最后由 createskyblue 于 2020-3-3 11:42 编辑
虚空黄瓜皇 发表于 2020-2-16 16:44
你好,我有两个问题
1.IrisSideList = IrisSideList;
    IrisSide += IrisSideList;

第一点是这样的IrisSideList = IrisSideList[i + 1];
0 1 2 3 4 5 6
a b c d e f  g  处理前
b c d e f g g  处理后

是丢弃最后一个数字
IrisSide += IrisSideList;
IrisSide=b+c+d+e+f+g+g <--注意有两个g
并让数列向前移位
第二点实际上原本是没问题的,因为g重复两遍!但是刚刚发现第一步处理中忘记不要把第7个数加进去导致了误差,感谢提出这个问题,我会发布修复更新

修复后
[mw_shl_code=arduino,true]void iris(int x, int y) {
  u8g2.setDrawColor(0);
  //u8g2.drawFilledEllipse(64, 32, map(analogRead(A0), 0, 1023, 1, 64), 25);
  /*
     平滑光线变化
  */

  IrisSide = 0;
  for (byte i = 0; i < 7; i++) {
    //丢弃列表最后一个数据并写入新的环境光线强度采样
    IrisSideList = IrisSideList[i + 1];
   
if (i!=6)  IrisSide += IrisSideList;
    //Serial.println(String("[") + i + String("]") + String(" : ") + IrisSideList + String("   "));
  }
  IrisSideList[7] = (analogRead(A1) + analogRead(A2)) / 2;
  // Serial.println(IrisSide);
  IrisSide = IrisSide / 6;
  //Serial.println(IrisSide);
  u8g2.drawFilledEllipse(64 + x, 32 + y, map(IrisSide, 0, 1023, 21, 9), map(IrisSide, 0, 1023, 24, 21));
}[/mw_shl_code]
发表于 2020-3-15 17:42 | 显示全部楼层
good exampel
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:34 , Processed in 0.079927 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表