91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#串口控制舵機、arduino源碼 及C#源碼及界面

發布時間:2020-06-28 16:17:15 來源:網絡 閱讀:4953 作者:世界都一樣 欄目:開發技術

1.舵機原理簡介

       C#串口控制舵機、arduino源碼 及C#源碼及界面

控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出到電機驅動芯片決定電機的正反轉。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。 

舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍內的角度控制脈沖部分,總間隔為2ms。以180度角度伺服為例,那么對應的控制關系是這樣的:   

0.5ms--------------0度;    

1.0ms------------45度;    

1.5ms------------90度;    

2.0ms-----------135度;    

2.5ms-----------180度;


2.arduino下位機源碼

相關源碼已壓縮上傳,需要請下載對應附件


#include<Servo.h>  //庫文件
Servo servo1;     
static int v=0;
String mycommand="";
void setup()
  {
    Serial.begin(9600);//此處為串口設置的波特率 ,可以修改 必須同上位機設置的波特路一致。
    servo1.attach(3);  // 控制的端口是~3號
    servo1.write(90);
  }
void loop() 
 {
    while(Serial.available()>0)
    {
      mycommand+=char(Serial.read());
      delay(2);
    }
    for(int m=0;m<mycommand.length();m++) // 
       {
          char ch = mycommand[m];   //讀取串口數據
          switch(ch)
             {
                 case '0'...'9':
                       v = v*10 + ch - '0';   //字符轉換成十進制
                        break;
                  case 'a':   //如果數據后帶a,則表示是一號舵機的數據,比如串口發送85a
                        //if(v >= 5 || v <= 175 )   
                         servo1.write(v); // 讓A從66度旋轉到9度 (可修改角度)                     
                         //用于設定舵機旋轉角度的語句,可設定的角度范圍是0°到180°,“V”得到所輸入的值而改變角度,比如85a為85度角
                         Serial.println(v+"°");//舵機角度改變后 發送改變的角度到上位機。
                         v = 0;
                          break;
                     }
   
          }  
   mycommand="";
}



    C#串口控制舵機、arduino源碼 及C#源碼及界面

     

我選擇我的是arduino Uno,舵機的接線方法是紅色(VCC)端接控制板的5V處,棕色端接板子的GND,舵機的橙色線為信號線,接板子上的3號口;







3.C#上位機源碼及界面

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 舵機上位機源碼
{
    public partial class Form1 : Form
    {
        bool open = false;
        public delegate void HandleInterfaceUpdataDelegate(string text);
        private HandleInterfaceUpdataDelegate interfaceUpdataHandle;
        int a;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());//從系統獲取已有串口
            if (comboBox1.Items.Count > 0)
            {
                comboBox1.SelectedIndex = 0;//串口變量初始化
                serialPort1.RtsEnable = true;//DataReceived事件委托
                serialPort1.ReceivedBytesThreshold = 1;//設置 DataReceived 事件發生前內部輸入緩沖區中的字節數
                serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
                comboBox2.SelectedIndex = 6;
            }
            else
            {
                MessageBox.Show("未檢測到設備\r\n");
            }
        }
        //監聽串口
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                string text = string.Empty;
                byte[] result = new byte[serialPort1.BytesToRead];
                serialPort1.Read(result, 0, serialPort1.BytesToRead);
                text = Encoding.UTF8.GetString(result);
            }
            catch 
            {
               
            }
        }
        //串口刷新按鈕
        private void button2_Click(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
            if (comboBox1.Items.Count > 0)
            {
                comboBox1.SelectedIndex = 0;
            }
            else
            {
                MessageBox.Show("未檢測到串口\r\n");
            }
        }
        
        //打開串口
        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (open == false)
            {
                
                if (serialPort1.IsOpen)
                {
                    MessageBox.Show("串口已經打開", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //串口
                if (comboBox1.Text == string.Empty)
                {
                    MessageBox.Show("請選擇串口", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //波特率
                if (comboBox2.Text == string.Empty)
                {
                    MessageBox.Show("請選擇波特率", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                serialPort1.BaudRate = int.Parse(comboBox2.Text);
                try
                {
                    serialPort1.PortName = comboBox1.SelectedItem.ToString();
                    serialPort1.Open();
                }
                catch
                {
                    try
                    {
                        comboBox1.SelectedIndex = comboBox1.SelectedIndex + 1;
                    }
                    catch
                    {
                        comboBox1.SelectedIndex = 0;
                    }
                    serialPort1.Close();
                }
                btnOpen.Text = "關閉";
                comboBox1.Enabled = false;
                comboBox2.Enabled = false;
                open = true;
                trackBarSend_Scroll(this, null);
                btnReserch.Enabled = false;
                btnsend.Enabled = true;
                tbxSend.Enabled = true;
                trackBarSend.Enabled = true;
                pictureBox1.BackColor = Color.Lime;
            }
            else
            {
                try
                {
                    serialPort1.Close();
                    btnOpen.Text = "打開";
                    open = false;
                    comboBox1.Enabled = true;
                    comboBox2.Enabled = true;
                    btnReserch.Enabled = true;
                    btnsend.Enabled = false;
                    tbxSend.Enabled = false;
                    trackBarSend.Enabled = false;
                    pictureBox1.BackColor = Color.Silver;
                }
                catch
                {
                }
            }
        }
        private void trackBarSend_Scroll(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                a = trackBarSend.Value;
                string duojiA = trackBarSend.Value.ToString() + "a";
                try
                {
                    serialPort1.WriteLine(duojiA);
                    tbxSend.Text = a.ToString(); ; ;
                }
                catch
                {
                }
            }
        }
        private void btnsend_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] SendBuf = new byte[100000];
                SendBuf = System.Text.Encoding.Default.GetBytes(tbxSend.Text+"a");
                serialPort1.Write(SendBuf, 0, SendBuf.Length);
            }
            catch (Exception err)
            {
                if (serialPort1.IsOpen)
                    serialPort1.Close();//如果是寫數據時出錯,此時窗口狀態為開,就應關閉串口,防止下次不能使用,串口是不能重復打開和關閉的
                MessageBox.Show(err.ToString(), "錯誤");
            }
        }
        private void tbxSend_ValueChanged(object sender, EventArgs e)
        {
            trackBarSend.Value = (int)tbxSend.Value;
        }
    }
}


   

C#串口控制舵機、arduino源碼 及C#源碼及界面

C#串口控制舵機、arduino源碼 及C#源碼及界面

                                                            未連接設備狀態

C#串口控制舵機、arduino源碼 及C#源碼及界面

                                                                連接設備后

C#串口控制舵機、arduino源碼 及C#源碼及界面

                                            這是自己做的機械臂控制軟件 相關源碼也有

C#串口控制舵機、arduino源碼 及C#源碼及界面

                                                            這是wifi智能小車控制軟件



第一次寫博文,有不好的地方還請多多包涵。

附件:http://down.51cto.com/data/2366150
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北京市| 云阳县| 博乐市| 包头市| 大埔县| 革吉县| 绵竹市| 余江县| 信阳市| 乐清市| 顺平县| 盈江县| 巴林右旗| 三河市| 美姑县| 浑源县| 贵定县| 建平县| 新宁县| 黔西县| 平谷区| 盘锦市| 延寿县| 上饶县| 兰考县| 凭祥市| 江永县| 宝丰县| 阿拉善左旗| 福海县| 德昌县| 东乌珠穆沁旗| 莱阳市| 宁安市| 台中县| 祁阳县| 延吉市| 探索| 革吉县| 和林格尔县| 共和县|