C语言数组&;for循环不能正常工作

C语言数组&;for循环不能正常工作,c,embedded,pic,C,Embedded,Pic,我用的是PIC18F26K83,我试着用NTCALUG02A103F来测量温度。我已经计算了ADC输出和它们所等于的温度。我创建了2个阵列:1个用于ADC值,1个用于该ADC值的温度。在for循环中,我比较来自ADC的值和来自数组的值,如果我的ADC值小于数组值,它将不断递减数组元素,最终将得到258 ADC值,这是我数组的最后一个元素。然而,在for循环中,它永远不会递减。即使我的ADC值为2000,它也不会继续。它在i=32时卡住。代码如下: int i; int temperature;

我用的是PIC18F26K83,我试着用NTCALUG02A103F来测量温度。我已经计算了ADC输出和它们所等于的温度。我创建了2个阵列:1个用于ADC值,1个用于该ADC值的温度。在for循环中,我比较来自ADC的值和来自数组的值,如果我的ADC值小于数组值,它将不断递减数组元素,最终将得到258 ADC值,这是我数组的最后一个元素。然而,在for循环中,它永远不会递减。即使我的ADC值为2000,它也不会继续。它在i=32时卡住。代码如下:

int i;
int temperature;
int temp_data;
int temp_ADC_array[34] = {259,  293,  332,  377,  428,  487,  555,  632,  720,
                          821,  934,  1062, 1203, 1360, 1531, 1715, 1910, 2113,
                          2320, 2528, 2731, 2926, 3108, 3274, 3422, 3552, 3663,
                          3756, 3833, 3895, 3945, 3983, 4013, 4036};
int temp_array[34] = {125, 120, 115, 110, 105, 100, 95,  90,  85,  80, 75, 70,
                      65,  60,  55,  50,  45,  40,  35,  30,  25,  20, 15, 10,
                      5,   0,   -5,  -10, -15, -20, -25, -30, -35, -40};
void main() {
  while (1) {
    temp_data = ADC_READ(3);
    for (i = 33; temp_data < temp_ADC_array[i]; i--) {
      temperature = temp_array[i];
    }
  }

这个答案只是重复我的评论。它的目的是使人们能够接受它作为一个答案,以便人们立即看到这个问题已经解决



我想你的第一个循环可能会在气温升高之前停止 当条件不再为真时指定。也就是说 温度值为1太早了。第二个循环看起来 不过对我来说很好

第一个循环是

void main() {
  while (1) {
    temp_data = ADC_READ(3);
    for (i = 33; temp_data < temp_ADC_array[i]; i--) {
      temperature = temp_array[i];
    }
  }

这应该是可行的,因为它只有在指定了正确的温度后才会中断。

您读取的数据超出了数组,进入项目[-1]等等,因为如果读取的值低于259,循环就不会停止

循环应该被编写为示例

for(i=0; i<SIZE; i++) 
{ 
  if(temp_data < temp_ADC_array[SIZE-1-i]) 
  { 
    found = true; 
    break;
  }
}

for(i=0;iSorry,忘了那一行,i在开头声明。已编辑。谢谢您的代码看起来正确(但不太好)。对于
temp\u Data=2000
您将得到
temperature=40
。您的错误一定是在其他地方。您确定
ADC\u READ
返回正确的值。您还可以添加一些代码,在这些代码中,如果有人更改了我的问题,您可以实际使用temperature…通过编辑我要修复的内容it@GünkutAğabeyoğlu好的。删除了我的答案基于错误的假设我认为您的第一个循环可能在指定温度之前停止,而条件不再为真。这意味着
温度
的值太早了。不过,第二个循环在我看来很好
void main() {
  while (1) {
    temp_data = ADC_READ(3);
    for (i = 33; temp_data < temp_ADC_array[i]; i--) {
      temperature = temp_array[i];
    }
  }
for (i = 0; i < 34; i++) {
  if (temp_data > temp_ADC_array[33 - i]) {
    temperature = temp_array[33 - i];
    break;
  }
}
for(i=0; i<SIZE; i++) 
{ 
  if(temp_data < temp_ADC_array[SIZE-1-i]) 
  { 
    found = true; 
    break;
  }
}