野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20960|回复: 7

如何判断多个变量中,变量值相同的最多的变量

[复制链接]
发表于 2014-7-19 18:06:34 | 显示全部楼层 |阅读模式
无线遥控按一下按键,就会连续发5个相同的码出去,接收到第一个码后就做判断,不接收剩下的4个码,但如果第一个码受到干扰的,那么码就不对,而我又只接收了第一个码做判断,这样数据就不正确,所以我想把所有码接收下来,再去判断出其中相同值最多的那个值作为接收到的标准数据。

请教学习后,思路是这样的。

int main()
{
        unsigned char c;
        int receivedata[5]={1,2,3,3,4};
        int element[5] = {-1,-1,-1,-1,-1};
        int sum[5] = {0,0,0,0,0};
        for(int i=0;i<5;i++)
        {
          for(int j=0;j<5;j++)
          {
                if(receivedata[i]==element[j])    //判断是否与存好的变量相等
                {
                  sum[j]++;                      //相等则在sum[]相应的位置加1,表示有两个相同的变量
                  break;
                }
                else if(element[j]==-1)
                {
                  element[j]=receivedata[i];     //如果不相等,则为新变量,存入element中
                  sum[j]++;
                  break;
                }
          }
        }
        int max = sum[0];

        for(int i=0;i<5;i++)
        {
                if(sum[i]>max)             //比较相同数量大小
                    max=sum[i];
        }
       for(int i=0;i<5;i++)
       {
        if(max==sum[i])
        {
                receive_dat[c]=element[i];   //保存相同变量最后的变量,可以是多个最多
                c++;
        }
      }


期待大神们给出最后的方法:

回复

使用道具 举报

发表于 2014-7-19 18:09:17 | 显示全部楼层
每次都接收5个码,5个码相同就当按下了那个按键,如果5个码不相同就当没接收到
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-19 18:12:41 | 显示全部楼层
姬银瑶 发表于 2014-7-19 18:09
每次都接收5个码,5个码相同就当按下了那个按键,如果5个码不相同就当没接收到

那这样做的话,就是容易受干扰,稍微干扰一下,就不行了,我们要做的是,在不是很强的干扰下,还可以正确收码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-19 18:16:25 | 显示全部楼层
姬银瑶 发表于 2014-7-19 18:09
每次都接收5个码,5个码相同就当按下了那个按键,如果5个码不相同就当没接收到

那些编码IC为什么要做成,按下按键连续发码,就是因为如果按下按键只发一个码,那这个码受到干扰后就没有了,发多个码就是为了增强接码率,我按下按键后,即使前面干扰了,后面还是可以接收判断。
回复 支持 反对

使用道具 举报

发表于 2014-7-19 19:54:05 | 显示全部楼层
有心人 发表于 2014-7-19 18:16
那些编码IC为什么要做成,按下按键连续发码,就是因为如果按下按键只发一个码,那这个码受到干扰后就没有 ...

你改成有时间限制的就好了,在一个短时间内,只能触发按键一次
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-21 09:23:51 | 显示全部楼层
慕娅娜 发表于 2014-7-19 19:54
你改成有时间限制的就好了,在一个短时间内,只能触发按键一次

有时间限制,那要是在这限制的时间内,受到干扰,那我按下按键就没反应咯
回复 支持 反对

使用道具 举报

发表于 2014-7-21 09:40:58 | 显示全部楼层
有心人 发表于 2014-7-21 09:23
有时间限制,那要是在这限制的时间内,受到干扰,那我按下按键就没反应咯

怎么会没反应,如果你接收到了A,就延时不接收后面的AAAA,过了这段时间再重新检测
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-22 09:49:02 | 显示全部楼层
慕娅娜 发表于 2014-7-21 09:40
怎么会没反应,如果你接收到了A,就延时不接收后面的AAAA,过了这段时间再重新检测

那如果你接受到的这个A是受到干扰的呢?那按下按键就是没反应咯,所以建议还是全部接收下来,再去取相同值最多的变量
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 19:30 , Processed in 0.029466 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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