从范围值使用for循环

时间:2015-08-27 01:16:12

标签: c pic

我从这张表中得到了一些数据: enter image description here

可以使用(for loop)吗?

最近,我使用了(if else)函数,但它似乎太长了。

我是C编程新手。这里是我完成的代码(if else)函数:

        if (0 < result < 409  ) // 0 to 408
        {
            volt = 0 ;
        }
        else if (409 < result < 818 ) //408 to 817
        {
            volt = 1 ;
        }
        else if (818 < result < 1227 ) //818 to 1226
        {
            volt = 2 ;
        }
        else if (1227 < result < 1636 ) //1227 to 1635
        {
            volt = 3 ;
        }
        else if (1636 < result < 2045 ) // 1636 to 2044
        {
            volt = 4 ;
        }
        else if (2045 < result < 2454 ) // 2045 to 2453
        {
            volt = 5 ;
        }
        else if (2454 < result < 2863 ) //2454 to 2862
        {
            volt = 6 ;
        }
        else if (3271 < result < 2863 ) //2863 to 3271
        {
            volt = 7 ;
        }
        else if (3860 < result < 3272 ) //3272 to 3860
        {
            volt = 8 ;
        }
        else if (4094 < result < 3861 ) //3861 to 4094
        {
            volt = 9 ;
        }

        else if (result >= 4095 ) //4095++
        {
            volt = 10 ;
        }

2 个答案:

答案 0 :(得分:0)

同样关于paxdiablo所说的第一部分,但为了回答你的问题,你可以把它放到for循环中,但是如果你看一下你的数字,每个{的数字范围{ {1}} / if代码块是相同的; 409.然后在那个区块里面,你设置伏特=你所在的部分的编号。在第一部分,你设置伏特= 0,在第二部分它的伏特= 1,依此类推。由于每个部分的范围每次增加409,您只需替换您所写的所有内容即可 else if

请记住(假设结果是整数)c语言将使用整数除法处理volt = result / 409。因此,如果结果是&gt; = 0且&lt; 409,结果/ 409等于0.如果结果是&gt; = 409且&lt; 818,则结果/ 409将等于1,依此类推。然而,这确实意味着如果结果= 4094,伏特将等于9,这不是你的图表所说的应该发生但可能是你想要的。

如果你需要做类似的事情(不断增加的范围),那么你可能会想要使用for循环。 for循环也应该更快(我认为)。你必须再次使用你的范围以409的常数增量上升的事实,所以做类似的事情

result/409

答案 1 :(得分:0)

它只是一个12位(4096计数)ADC,满量程输入为1​​0V。它在该范围内是线性的,因此不需要表格或循环:

#define ADC_BITS       12
#define ADC_MIN_VOLTS  0
#define ADC_MAX_VOLTS  10

#define ADC_COUNTS     (1 << ADC_BITS)
#define ADC_VRANGE     (ADC_MAX_VOLTS - ADC_MIN_VOLTS)


double adc_counts_to_volts(int counts)
{
    return counts * (double)ADC_VRANGE / ADC_COUNTS;
}

您可以将其替换为整数版本以提供整数输出:

int adc_counts_to_volts(int counts)
{
    return counts * ADC_VRANGE / ADC_COUNTS;
}