[Help] Điều khiển Msp430 qua GUI

lee_trieu

Gà con
Chào mọi người !!
Em có một vấn đề này mong mọi người hướng dẫn em ạ:-s
Em muốn điều khiển một số thiết bị thông qua giao diện GUI. Mọi người hướng dẫn giúp em phải làm như thế nào ạ??? Em chỉ mới biết GUI cho UART thôi ạ:-(
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Thì nó tương đượng vậy đó ;)).. Gửi 1 ký tự hay 1 dãy ký tự lên máy tính rồi GUI sẽ nhận biết mà thực hiện lệnh tương ứng ^^, tương vự cho việc ngược lại
 

lee_trieu

Gà con
Thì nó tương đượng vậy đó ;)).. Gửi 1 ký tự hay 1 dãy ký tự lên máy tính rồi GUI sẽ nhận biết mà thực hiện lệnh tương ứng ^^, tương vự cho việc ngược lại
Ví dụ như em tạo ra 3 Button trên GUI:5cool_sweat:(BT1,BT2,BT3)
vậy vấn đề của mình là gán cho mỗi Button một cái code rồi cho MCU đọc code đó thực hiện lệnh tương ứng hả anh???:-(
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Ví dụ như sự kiện click chuột của button 1 là đưa vô cổng Com ký tự "A" thì MCU đọc về giá trị "A" thì nó thực hiện chức năng được mình gán là "A" như là bật tắt led chẳng hạn :D
 

lee_trieu

Gà con
Ví dụ như sự kiện click chuột của button 1 là đưa vô cổng Com ký tự "A" thì MCU đọc về giá trị "A" thì nó thực hiện chức năng được mình gán là "A" như là bật tắt led chẳng hạn :D
Anh có thể cho em một code ví dụ không anh:-(
Em lấy cái code UART 96000 Echo lại ký tự mình nhập trong sample code đó anh, GUI thì em làm lại y channg như TUT này:
Không hiểu sao khi em nhấn Send lần đầu tiên thì bên Receive echo lại , nhấn lần nữa thì nó không echo lại nữa, phải rút cáp cắm lại nó mới echo mà cũng echo 1 lần thôi là sao anh???:5cool_sweat:
 

dinhbk

Thành Viên PIF
cho mình hỏi xíu: mình tạo GUI, tạo các nút nhấn để điêu khiển, ngoài truy xuất tín hiệu điều khiển xuống cổng com, còn cách truy xuất bằng USB không dây đc phải không à, mà mình chưa biết Module USB không dây đó ntn, truy xuất xuống sao, mong ai biết chỉ cho minh tí
Điều khiển mà gắn dây thì hơi bất tiện, không dây ngon hơn
Cảm ơn!!:)
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Ví dụ như sự kiện click chuột của button 1 là đưa vô cổng Com ký tự "A" thì MCU đọc về giá trị "A" thì nó thực hiện chức năng được mình gán là "A" như là bật tắt led chẳng hạn :D
Anh có thể cho em một code ví dụ không anh:-(
Em lấy cái code UART 96000 Echo lại ký tự mình nhập trong sample code đó anh, GUI thì em làm lại y channg như TUT này:
Không hiểu sao khi em nhấn Send lần đầu tiên thì bên Receive echo lại , nhấn lần nữa thì nó không echo lại nữa, phải rút cáp cắm lại nó mới echo mà cũng echo 1 lần thôi là sao anh???:5cool_sweat:
Theo mình thì nên cho cái code lúc nhận nút bấm bên reiceiver để mọi người ai biết thì giúp đỡ :D....
 

lee_trieu

Gà con
Theo mình thì nên cho cái code lúc nhận nút bấm bên reiceiver để mọi người ai biết thì giúp đỡ :D....
code em viết lại giống cái TUT ở trên đó anh !! Không hiểu sao nó lại bị như vậy nữa??:5cool_sweat:mọi ngươi xem giúp em thử nó lỗi chỗ nào ạ?:-(


PHP:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int intlen = 0;// So cong COM ket noi vao may tinh
        private void timer1_Tick(object sender, EventArgs e)
        {   
            
            string[] ports = SerialPort.GetPortNames();//Lay All COM noi vao PC
            if (intlen != ports.Length)
            {
                intlen = ports.Length;
                cbb_Select_Com.Items.Clear();
                for (int i = 0; i < intlen; i++)
                {
                    cbb_Select_Com.Items.Add(ports[i]);
 
                }
            }
        }
 
        private void bt_Connect_Click(object sender, EventArgs e)
        {
            if (lb_Status.Text == "Disconnected")
            {
                Com.PortName = cbb_Select_Com.Text;
                Com.Open();
                lb_Status.Text = "Connected";
                bt_Connect.Text = "Disconnected";
            }
            else
            {
                Com.Close();
                lb_Status.Text = "Disconnected";
                bt_Connect.Text = "Connected";
 
            }
        }
 
        private void bt_Send_Data_Click(object sender, EventArgs e)
        {
            string s;
            if (lb_Status.Text == "Connected") //Neu Co Ket Noi COM
            {
                s = txt_Send_Data.Text;  //Gan Du Lieu vao Bien S
                Com.WriteLine(s);
                
            }
 
        }
 
        private void OnCom(object sender, SerialDataReceivedEventArgs e)
        {
            //Doc 1 byte se ngat COM
            string s;
            s = Com.ReadExisting(); //Doc tat ca du lieu trong Buff cua cong COM
            //txt_Receive_Data.Text = s;
           Display(s);
        }
        private delegate void DLDisplay(string s);
        private void Display(string s) 
        {
            if (txt_Receive_Data.InvokeRequired)
            {
                DLDisplay sd = new DLDisplay(Display);
                txt_Receive_Data.Invoke(sd, new object[] { s });
            }
            else 
            {
                txt_Receive_Data.Text = s;
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {
            Close();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void txt_Receive_Data_TextChanged(object sender, EventArgs e)
        {
 
        }
    }
}
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Ý mình nói là bên MCU =.=.. hiz..chứ nếu viết giống trong TUT thì không sao au :)
 

lee_trieu

Gà con
Ý mình nói là bên MCU =.=.. hiz..chứ nếu viết giống trong TUT thì không sao au :)
Code em nạp xuống MCU nè anh !! Code mẫu của TI mà:-(

PHP:
#include <msp430g2553.h>
 
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  if (CALBC1_1MHZ==0xFF)// If calibration constant erased
  {
    while(1);                               // do not load, trap CPU!!
  }
  DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  P1SEL2 = BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 104;                            // 1MHz 9600
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
 
  __bis_SR_register( GIE);       // Enter LPM0, interrupts enabled
}
 
//  Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}
 

Carue

Trứng gà
Ví dụ như sự kiện click chuột của button 1 là đưa vô cổng Com ký tự "A" thì MCU đọc về giá trị "A" thì nó thực hiện chức năng được mình gán là "A" như là bật tắt led chẳng hạn :D
Anh có thể cho em một code ví dụ không anh:-(
Em lấy cái code UART 96000 Echo lại ký tự mình nhập trong sample code đó anh, GUI thì em làm lại y channg như TUT này:
Không hiểu sao khi em nhấn Send lần đầu tiên thì bên Receive echo lại , nhấn lần nữa thì nó không echo lại nữa, phải rút cáp cắm lại nó mới echo mà cũng echo 1 lần thôi là sao anh???:5cool_sweat:
Em thử dung cấu trúc trong ngắt nhận như sau:
Code:
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  
while (!(UCA0IFG&UCTXIFG));             // USCI_A0 TX buffer ready?
    switch(UCA0RXBUF)
    {
    case 'A':   // 'A' mở thiết bị
       {
        // công việc 
          break;
       }  

        case 'B':  // đóng thiết bị
      {
  // công việc
                 break;
      }
      default: break;
    }
}
 

lee_trieu

Gà con
Em thử dung cấu trúc trong ngắt nhận như sau:
Code:
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
 
while (!(UCA0IFG&UCTXIFG));            // USCI_A0 TX buffer ready?
    switch(UCA0RXBUF)
    {
    case 'A':  // 'A' mở thiết bị
      {
        // công việc
          break;
      } 
 
        case 'B':  // đóng thiết bị
      {
  // công việc
                break;
      }
      default: break;
    }
}
Cái A, B là mình gửi từ GUI hả anh??? Vậy code trên GUI có thay đổi gì không anh hay giữ nguyên như TUT ạ/?:5cool_sweat:
 

Mr.Trần9x

Trứng gà
The class name '?' is not a valid identifier for this language
ai biet lỗi này chỉ giúp mình với ! Form bị mất hết . hiện ra Error .Help ...
 
Top