iT邦幫忙

0

藍芽接收並執行動作

目前的構想是利用while(1)持續動作
當a==1時,假設是偵測是否藍芽有傳送過來,
Hwr並接收此値,假設接收的値都為1~10
當Hwr<=6時,讀取另一個寫檔的txt檔案,此値為1~100
假設Hwr是4,而Lwr的値為 100,99,98,97,96,95
並且以ctr = Lwr[Hwr]知道是 ctr = Lwr[4]
來讓ctr =97,並利用ctr =97 而在利用switch case與keybd_event來動作模擬的按鍵

現在不太懂得是Ctr = Lwr[Hwr]; 這一行,明明 ctr =97 卻因FILE 跟INT不符合

int main(void) {
	int a; //bluetooth
	int Hwr;
	int Ctr;
	int  Lwr[6];
	while (1) {
		if (a == 1) {
			
			Hwr =a;
			if (Hwr <= 6){
				FILE *Lwr[6];
			Lwr[6] = fopen("test.txt", "r");//讀檔
			Ctr = Lwr[Hwr];
			}
				else{
				Ctr = Hwr;
				}
		}
            switch(ctr){
            case 97;
            keybd_event(xxxx);
            }
        }

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2017-11-21 08:16:30

光就下面這兩列來看
這輩子 Hwr 只可能是 1,不會是 4

if (a == 1) {			
   Hwr =a;
0
fysh711426
iT邦研究生 2 級 ‧ 2017-11-21 12:57:50
if (Hwr <= 6){
	FILE *Lwr[6];
    Lwr[6] = fopen("test.txt", "r");//讀檔
    Ctr = Lwr[Hwr];
}

先回答您的問題,這裡會出錯是因為,您在 if 內宣告了 FILE *Lwr[6];
這行個意思是,宣告一個大小為 6 的陣列,其內容型態為 FILE *
Lwr[Hwr] 所以這個地方取出來的型態是 FILE *,您將其賦予給 int Ctr,型態不符所以出錯了,
然後還有很多感覺怪怪的地方 XD。
/images/emoticon/emoticon13.gif

看更多先前的回應...收起先前的回應...
pigs0231 iT邦新手 5 級 ‧ 2017-11-22 00:57:45 檢舉

目前寫到這個部分有些問題,
我利用斷點來查詢是否讀到的値
,但是查詢的結果不是讀檔所讀取出來的値
難道利用For迴圈來一個一個抓取test.txt的6筆資料不行嗎?

if (serial.Open(4, 9600)){ 
   printf("Port opened successfully\n"); 
   char *lpBuffer =(char*)malloc(sizeof(char)*50); 
   
   while(1){    
    int Hwr,ctr; 
  int h[6]; 
    int dwBytesRead = serial.ReadData(lpBuffer,1 );  
    lpBuffer [1]=  serial.ReadData(lpBuffer,0); 

    FILE *Lwr; 
    if(dwBytesRead){ 
     Hwr = dwBytesRead; 
     if (Hwr <=6) 
     { 
      Lwr = fopen("C:\\Users\\user\\Desktop\\BlueTooth(2)\\text.txt","r"); 
      for (int i = 0; i < 6; i++)// 
      { 
       fscanf(Lwr,"%d",h[i]); 
      } 
      ctr = h[Hwr]; 
      printf("%d\n",lpBuffer); 
      fclose(Lwr); 
     }else 
     { 
      ctr = Hwr; 
     }  
    }
fysh711426 iT邦研究生 2 級 ‧ 2017-11-22 18:50:11 檢舉

test.txt 的內容是什麼呢?
程式應該是沒問題 (讀檔的部分)。

pigs0231 iT邦新手 5 級 ‧ 2017-11-23 00:40:15 檢舉

test主要是網頁所讀取出來的圖片編號,切換時會將編號重新寫檔
現在有些部分有修正了,但是還是有一些問題
1.讀檔時,所讀取出來的會出現亂碼
2.只能讀取一次test.txt檔案的樣子,如果切換網頁編號會改變,但是如果讀取只能讀取一次,這樣就沒辦法利用switch case在利用keybd-event來操作了。
是否是多寫一個條件,是否有接收到藍芽所傳送過來的値,在利用Hwr=藍芽接收到的値,這樣讀取一次的問題是否就解決了?

int main(){
if (serial.Open(4, 9600)){
		 printf("Port opened successfully\n");
		 char *lpBuffer =(char*)malloc(sizeof(char)*50);
		
		 while(1){			
		int ctr;
		int h	[6];
		int Hwr = serial.ReadData(lpBuffer,1 );	
		lpBuffer [1]=serial.ReadData(lpBuffer,0);
					 
					if (Hwr <=6)
					{
						FILE* Lwr;
						
						fopen_s(&Lwr,"C:\\Users\\user\\Desktop\\BlueTooth(2)\\test.txt","r");
						
						for (int i = 0; i < 6; i++)
						{
							fscanf(Lwr,"%d",&h[i]);
						}
						ctr = h[Hwr];
						printf("%d\n",lpBuffer);
						fclose(Lwr);
					}else
					{
						ctr = Hwr;
					}	
fysh711426 iT邦研究生 2 級 ‧ 2017-11-23 22:09:11 檢舉

測試程式碼,可以重複讀檔。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    while (true)
    {
        int data[5] = {0};

        FILE *pFile = fopen("test.txt", "r");

        for (int i = 0; i < 5; i++)
        {
            fscanf(pFile, "%d", &data[i]);
        }
        fclose(pFile);

        int stop = 0;
    }

    system("pause");
    return 0;
}

text.txt 內容

1 2 3 4 5

我要發表回答

立即登入回答