可以使用(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 ;
}
答案 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,满量程输入为10V。它在该范围内是线性的,因此不需要表格或循环:
#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;
}