C语言数组和for循环无法正常工作

Gün*_*ğlu 0 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;
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];
    }
  }
Run Code Online (Sandbox Code Playgroud)

编辑:此for循环也不起作用:

for (i = 0; i < 34; i++) {
  if (temp_data > temp_ADC_array[33 - i]) {
    temperature = temp_array[33 - i];
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑2:我使用led进行测试,电路上没有USB,因此无法使用调试器。这是我测试温度的方法:(我检查LED的闪烁)

for(i; temperature>=0; temperature=temperature-10){
  led=1;
  delay_ms(1000);
  led=0;
  delay_ms(1000);
}   
delay_ms(5000);

Run Code Online (Sandbox Code Playgroud)

luc*_*rot 5

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


我认为当条件不再成立时,在分配温度之前,您的第一个循环可能会停止。这意味着温度值过早为一。虽然第二个循环对我来说很好

第一个循环是

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

而且问题在于一旦条件temp_data < temp_ADC_array[i]不再满足,它就会停止循环。因此,如果发生这种情况i==0,温度仍将保持在temp_array[1]

第二个循环是

for (i = 0; i < 34; i++) {
  if (temp_data > temp_ADC_array[33 - i]) {
    temperature = temp_array[33 - i];
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

这应该起作用,因为只有分配正确的温度它才会破裂。