亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

部分代碼如下:為什么用MFC寫的上位機調試就不行了?

部分代碼如下:為什么用MFC寫的上位機調試就不行了?

揚帆大魚 2022-07-14 13:09:52
case 'a':while(p9<180){data = Serial.read();if(data=='k'){break;}p9=p9+1;servo9.write(p9);delay(15);}break;當無線串口收到a的時候,舵機開始轉動,當串口收到k的時候,舵機停止轉動,用arduino編譯器的串口調試都沒問題,但是用MFC寫的上位機調試就不行了。求高手解答
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

char data;
if(Serial.available>0){
data = Serial.read();
}
最好寫成這樣
兩邊寫的端口號和比特率多少 都一樣嗎
SendData((char*)&val,sizeof(val));

查看完整回答
反對 回復 2022-07-18
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

舵機是一種位置伺服的驅動器,主要是由外殼、電路板、無核心馬達、齒輪與位置檢測器所構成。其工作原理是由接收機或者單片機發出信號給舵機,其內部有一個基準電路,產生周期為20ms,寬度為1.5ms 的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。經由電路板上的IC 判斷轉動方向,再驅動無核心馬達開始轉動,透過減速齒輪將動力傳至擺臂,同時由位置檢測器送回信號,判斷是否已經到達定位。適用于那些需要角度不斷變化并可以保持的控制系統。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。一般舵機旋轉的角度范圍是0 度到180 度。
  舵機有很多規格,但所有的舵機都有外接三根線,分別用棕、紅、橙三種顏色進行區分,由于舵機品牌不同,顏色也會有所差異,棕色為接地線,紅色為電源正極線,橙色為信號線。
  舵機的轉動的角度是通過調節PWM(脈沖寬度調制)信號的占空比來實現的,標準PWM(脈沖寬度調制)信號的周期固定為20ms(50Hz),理論上脈寬分布應在1ms到2ms 之間,但是,事實上脈寬可由0.5ms 到2.5ms 之間,脈寬和舵機的轉角0°~180°相對應。有一點值得注意的地方,由于舵機牌子不同,對于同一信號,不同牌子的舵機旋轉的角度也會有所不同。
   用Arduino 控制舵機的方法有兩種,一種是通過Arduino 的普通數字傳感器接口產生占空比不同的方波,模擬產生PWM 信號進行舵機定位,第二種是直接利用Arduino 自帶的Servo 函數進行舵機的控制,這種控制方法的優點在于程序編寫,缺點是只能控制2 路舵機,因為Arduino 自帶函數只能利用數字9、10 接口。Arduino 的驅動能力有限,所以當需要控制1 個以上的舵機時需要外接電源。
  方法一:

  將舵機接數字 9 接口上。
  編寫一個程序讓舵機轉動到用戶輸入數字所對應的角度數的位置,并將角度打印顯示到屏幕上。
  
  int servopin=9;//定義數字接口9 連接伺服舵機信號線
  int myangle;//定義角度變量
  int pulsewidth;//定義脈寬變量
  int val;
  void servopulse(int servopin,int myangle)//定義一個脈沖函數
  {
  pulsewidth=(myangle*11)+500;//將角度轉化為500-2480 的脈寬值
  digitalWrite(servopin,HIGH);//將舵機接口電平至高
  delayMicroseconds(pulsewidth);//延時脈寬值的微秒數
  digitalWrite(servopin,LOW);//將舵機接口電平至低
  delay(20-pulsewidth/1000);
  }
  void setup()
  {
  pinMode(servopin,OUTPUT);//設定舵機接口為輸出接口
  Serial.begin(9600);//連接到串行端口,波特率為9600
  Serial.println("servo=o_seral_simple ready" ) ;
  }
  void loop()//將0 到9 的數轉化為0 到180 角度,并讓LED 閃爍相應數的次數
  {
  val=Serial.read();//讀取串行端口的值
  if(val>'0'&&val<='9')
  {
  val=val-'0';//將特征量轉化為數值變量
  val=val*(180/9);//將數字轉化為角度
  Serial.print("moving servo to ");
  Serial.print(val,DEC);
  Serial.println();
  for(int i=0;i<=50;i++) //給予舵機足夠的時間讓它轉到指定角度
  {
  servopulse(servopin,val);//引用脈沖函數
  }
  }
  }
  方法二
  先具體分析一下 Arduino 自帶的Servo 函數及其語句,來介紹一下舵機函數的幾個常用語句吧。
  1、attach(接口)——設定舵機的接口,只有數字9 或10 接口可利用。
  2、write(角度)——用于設定舵機旋轉角度的語句,可設定的角度范圍是0°到180°。
  3、read()——用于讀取舵機角度的語句,可理解為讀取最后一條write()命令中
  的值。
  4、attached()——判斷舵機參數是否已發送到舵機所在接口。
  5、detach()——使舵機與其接口分離,該接口(數字9 或10 接口)可繼續被用作PWM 接口。
  注:以上語句的書寫格式均為“舵機變量名.具體語句()”例如:myservo.attach(9)。
  仍然將舵機接在數字9 接口上即可。
  參考源程序B:
  #include <Servo.h>//定義頭文件,這里有一點要注意,可以直接在Arduino 軟件菜單欄單擊Sketch>Importlibrary>Servo,調用Servo 函數,也可以直接輸入#include <Servo.h>,但是在輸入時要注意在#include 與<Servo.h>之間要有空格,否則編譯時會報錯。
  Servo myservo;//定義舵機變量名
  void setup()
  {
  myservo.attach(9);//定義舵機接口(9、10 都可以,缺點只能控制2 個)
  }
  void loop()
  {
  myservo.write(90);//設置舵機旋轉的角度
  }


查看完整回答
反對 回復 2022-07-18
  • 2 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號