SerialPort ComPort = new SerialPort();
string[] ports = SerialPort.GetPortNames();
foreach(string portName in ports)
{
ComPort.PortName = portName;
ComPort.BaudRate = 115200;
ComPort.Parity = Parity.None;
ComPort.StopBits = StopBits.One;
ComPort.ReadTimeout = 500;
ComPort.WriteTimeout = 500;
try
{
ComPort.Open();
...
}
catch
{
ComPort.Close()
}
}
給自己的學習記錄
2017年2月15日 星期三
使用 C# 判斷有那些 Serial Port
2016年11月22日 星期二
7zip batch file (add data into filename)
將 7zip 的壓縮指令寫成 batch file. 方便使用
setlocal
set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%
set yyyymmdd_hhmm=%date:~0,4%%date:~5,2%%date:~8,2%_%hh%%time:~3,2%
7z a zip_file%yyyymmdd_hhmm%.7z *.* -x!*.obj -r -x!obj
move zip_file%yyyymmdd_hhmm%.7z ..\backup\
其中 -x 是排除檔案的選項.
-x!*.obj --- *.obj 不加入到壓縮檔裡
-x!obj --- obj 檔名(或目錄名)不加入到壓縮檔裡
而 -r 是包含子目錄
C# 呼叫 win32 API
在呼叫的函式前加入 win32API 的宣告
[DllImport("Kernel.dll")]
static extern uint QueryDosDevice(string lpDeviceName, IntPtr lpTargetPath, uint ucchMax);
public int queryFunc()
{
...
QueryDosDevice(...);
...
}
2016年11月3日 星期四
如何一次設定一個 Click Event Handler 到同一 StackPanel 裡的所有Button
ref : http://stackoverflow.com/questions/37876936/event-handler-formatting-multiple-buttons-wpf?noredirect=1&lq=1
有這樣的做法, 在前面指定 Button.Click :
有這樣的做法, 在前面指定 Button.Click :
<StackPanel Button.Click="button_Click" Grid.RowSpan="20">
<Button Grid.Column="0" Grid.Row="0" FontWeight="Bold" BorderBrush="Black" Style="{StaticResource greenButton}">LT 1</Button>
<Button x:Name="btn100" Grid.Column="0" Grid.Row="2" Style="{StaticResource greenButton}">100</Button>
<Button x:Name="btn101" Grid.Column="0" Grid.Row="3" Style="{StaticResource greenButton}">101</Button>
<Button x:Name="btn102" Grid.Column="0" Grid.Row="4" Style="{StaticResource greenButton}">102</Button>
</StackPanel>
但是這樣會有 null exception 跑出來, 當然可以用 (e.OriginalSource as Button) 來避這個問題,
也可以在 Style 裡用 EventSetter :
<Style x:Key="greenButton" TargetType="Button">
...
<EventSetter Event="Click" Handler="button_Click"/>
</Style>
WPF Binding
將 TextBox 裡的值隨著 ListBox 的選項改變
如下圖, TextBox 裡顯示 ListBox 選的項目:
<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="100" Margin="401,312,0,0" VerticalAlignment="Top" Width="100" >
<ListBoxItem>Line 1</ListBoxItem>
<ListBoxItem>Line 2</ListBoxItem>
</ListBox>
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="207,290,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120">
<TextBox.Text>
<Binding ElementName="listBox" Path="SelectedItem.Content"></Binding>
</TextBox.Text>
</TextBox>
如下圖, TextBox 裡顯示 ListBox 選的項目:
2016年10月24日 星期一
MSP430 LaunchPad Timer_0 Interrupt
Using Timer_0 Interrupt to Toggle LED on MSP430 LaunchPad
#include <msp430.h>
#define OUTPUT_PIN BIT0
/*
* main.c
*
* Testing timer_0 interrupt to toggle LED (P1.0)
*/
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1DIR |= OUTPUT_PIN; // Set P1.0 and P1.6 to output direction
P1OUT |= OUTPUT_PIN;
P1OUT ^= (OUTPUT_PIN);
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
CCTL0 = CCIE;
TACTL = TASSEL_2 + ID_3 + MC_1; // Set the timer A to SMCLCK, UP to TACCR0, Input Divider: /8
TACCR0 = 50000-1; // 50ms @(8MHz/8)
__enable_interrupt();
__bis_SR_register(LPM0 + GIE); // LPM0 with interrupts enabled
while(1);
}
// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
static unsigned char ucCount = 0;
if(ucCount++ >= 20){
P1OUT ^= OUTPUT_PIN;
ucCount = 0;
}
}
2016年8月25日 星期四
LME288 的處理方法
- Run command prompt as Administrator.
- Type (without quotes) "bcdedit /set IncreaseUserVa 3072"
- Reboot computer.
訂閱:
文章 (Atom)