ผมต้องการคำนวณค่าเวลาถัดไปที่กำลังจะถึงจาก Array ซึ่งภาษาซีไม่สามารถส่ง array ไปยังฟังก์ชั่นได้ ผมจึงส่งค่าชั่วโมงนาที และตำแหน่งของ array ไปกำหนดภายในฟังก์ชั่น. โดยวิธีการหาเวลาถัดไปที่กำลังจะถึงคือผมได้เปลี่ยนชั่วโมงเป็นนาที แล้วหาค่าน้อยที่สุดที่มากกว่า เวลาปัจจุบัน ถ้าไม่มีเวลาน้อยสุดที่มากกว่าปัจจุบันให้หาค่าเวลาที่น้อยที่สุด เช่น เวลาปัจจุบันคือ 20.00 เวลาถ้าไปจะต้องเป็นค่าระหว่าง 20.01-23.59 ถ้าไม่มีค่าในนี้ เวลาถัดไปจะต้องเป็น 00.00-19.59 ผมได้คำนวณค่าจาก Array แล้วแต่มันแสดงค่าไม่ถูกต้องครับ นี่คือโค้ดครับ
int16 next_time(int16 hr, int16 min, int pos){ //pos is position of array
int16 minimVal1,minimVal2;
int i=0,check;
int16 now_all;
int16 all[5];
int16 hrk[5],mnk[5];
hrk[pos] = hr;
mnk[pos] = min;
all[pos] =(hrk[pos]*60 + mnk[pos]) ; //change hr to min
minimVal2 = (hrk[0]*60) + mnk[0];
now_all = getNow(); // current time
printf("\r\npos=%d a=%ld, n=%ld, hr=%ld, mn=%ld",pos ,all[pos],now_all,hrk[pos],mnk[pos]);
for(i=1;i<pos+1;i++){
if(all[i]>now_all){ /* If have a value more than current time then check =1 */
check=1;
minimVal1 = all[i];
break;
}
if(all[i]<minimVal2){ /* If have no value more than current time then find minimum value of array */
minimVal2 = all[i];
printf("\r\nmin a=%ld, n=%ld, ck=%d",all[i],now_all,check); //It not show valid value
}
}
if(check==1){ /* If have a value more than current time then find minimum value which more than current time. */
for(i=1;i<pos+1;i++){
if(all[i]>now_all){
if(all[i]<minimVal1){
minimVal1 = all[i];
}
}
}
return minimVal1;
}
else{
return minimVal2;
}
}
ผลลัพธ์จากการคำนวณคือ
pos=0 a=540, n=1404, hr=9, mn=0
pos=1 a=960, n=1404, hr=16, mn=0
pos=2 a=1020, n=1404, hr=17, mn=0
min a=448, n=1404, ck=0
ในบรรทัด
min a=448, n=1404, ck=0 ตัวแปร a จะต้องเป็นค่าเดียวกับ all[2] คือ 1020 แต่ได้เป็นค่า a=448 ถ้าเปลี่ยน hr เป็นค่าอื่นพอกำหนดตำแหน่งของ array ที่ pos ไปถึงประมาณค่าที่สองหรือสามก็ขึ้นค่าที่ผิดพลาดแบบนี้มาตลอดเลยครับ บางทีเป็น 256 บางทีก็ 512 บางทีก็ 448 ไม่รู้ว่าเกิดจากอะไรครับ จะต้องแก้ไขยังไงครับ
เขียนโปรแกรมไมโครคอนโทรลเลอร์ด้วย CCS คำนวณค่าเวลาใน Array ครับ
int16 next_time(int16 hr, int16 min, int pos){ //pos is position of array
int16 minimVal1,minimVal2;
int i=0,check;
int16 now_all;
int16 all[5];
int16 hrk[5],mnk[5];
hrk[pos] = hr;
mnk[pos] = min;
all[pos] =(hrk[pos]*60 + mnk[pos]) ; //change hr to min
minimVal2 = (hrk[0]*60) + mnk[0];
now_all = getNow(); // current time
printf("\r\npos=%d a=%ld, n=%ld, hr=%ld, mn=%ld",pos ,all[pos],now_all,hrk[pos],mnk[pos]);
for(i=1;i<pos+1;i++){
if(all[i]>now_all){ /* If have a value more than current time then check =1 */
check=1;
minimVal1 = all[i];
break;
}
if(all[i]<minimVal2){ /* If have no value more than current time then find minimum value of array */
minimVal2 = all[i];
printf("\r\nmin a=%ld, n=%ld, ck=%d",all[i],now_all,check); //It not show valid value
}
}
if(check==1){ /* If have a value more than current time then find minimum value which more than current time. */
for(i=1;i<pos+1;i++){
if(all[i]>now_all){
if(all[i]<minimVal1){
minimVal1 = all[i];
}
}
}
return minimVal1;
}
else{
return minimVal2;
}
}
ผลลัพธ์จากการคำนวณคือ
pos=0 a=540, n=1404, hr=9, mn=0
pos=1 a=960, n=1404, hr=16, mn=0
pos=2 a=1020, n=1404, hr=17, mn=0
min a=448, n=1404, ck=0
ในบรรทัด min a=448, n=1404, ck=0 ตัวแปร a จะต้องเป็นค่าเดียวกับ all[2] คือ 1020 แต่ได้เป็นค่า a=448 ถ้าเปลี่ยน hr เป็นค่าอื่นพอกำหนดตำแหน่งของ array ที่ pos ไปถึงประมาณค่าที่สองหรือสามก็ขึ้นค่าที่ผิดพลาดแบบนี้มาตลอดเลยครับ บางทีเป็น 256 บางทีก็ 512 บางทีก็ 448 ไม่รู้ว่าเกิดจากอะไรครับ จะต้องแก้ไขยังไงครับ