เขียนโปรแกรมติดต่อ LCD โดยใช้ Arduino ด้วยภาษา C++ 5.5 borland ผ่าน Serial port

เมื่อผมเขียนโปรแกรมด้วยภาษาซี ฝั่ง PC ทำการส่งข้อมูล ให้ LCD ผ่าน serial port โดยคำสั่งเดียว ไม่มีการวนลูป ผลปรากฎ บอร์ด Arduino ไม่ได้รับข้อมูลที่ส่งไป แต่ถ้าผมส่งข้อมูลโดยการวนลูป ข้อมูล จะส่งออกไปอย่างต่อเนื่อง ทำให้บอร์ด ได้รับข้อมูล แล้วแสดงผลที่หน้าจอ LCD ได้
คำถามของคือ เมื่อผมส่งข้อมูลแบบวนลูป อย่างต่อเนื่อง จะทำให้ข้อมูล เต็มจอ LCD ,
ผมต้องการแค่ส่งออกไปแค่ค่าเดียวแล้วแสดงผล ตัวอักขระ ตัวนั้นเลย
ผมต้องทำอย่างไรครับ พอมีวิธีทำให้ ภาษา C (ฝั่งคอมพิวเตอร์) สามารถทำได้ตามที่ต้องการไหมครับ ด้วยแนะนำวิธีเขียนโค้ดให้หน่อยครับ

ตัวอย่าง...
พิมพ์ : ป้อนค่า 'o' แล้วค่าแสดงที่จอ LCD เป็น ooooooooooooooo.....
ค่าที่ถูกต้องควรเป็น :  ป้อนค่า 'o' แล้วค่าแสดงที่จอ LCD เป็น o แค่ค่าเดียว
โค้ดโปรแกรม :

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void times(int x)
{
   int c = 1, d = 1;

   for ( c = 1 ; c <= 32767 ; c++ )
       for ( d = 1 ; d <= x ; d++ )
       {}
}
int main (void) {

    char x=0;
    FILE *serialPort;

    system( "MODE COM3: BAUD=9600 PARITY=n DATA=8 STOP=1" );
    serialPort = fopen("COM3:", "w+" );

    if (serialPort == NULL) {
        printf ("Error: unable to open serial port COM3\n");
        exit (1);
    }
    int i=0;
    while (1) {
            printf("enter your letter :");
            x = getch();
            i=0;
            switch(x){
                case 'o' :
                
                    do{                        
                        fprintf(serialPort, "o");                        
                        i++;
                    }while(i<1000); // if i < 20 , ไม่สามารถส่งข้อมูลได้ , if i < 1000 สามารถส่งข้อมูล บอร์ดได้รับข้อมูลที่ส่งไป
                    times(1);
                     break;
                case 'f' :
                    do{
                    fprintf(serialPort, "f");
                    i++;
                    }while(i<1000);
                    times(1);
                     break;
                case 'w' :
                    do{
                    fprintf(serialPort, "w");
                    i++;
                    }while(i<1000);
                    times(1);
                     break;
            }        
    }
    fclose(serialPort) ;
    return 0;
}
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่