2013年11月14日 星期四
BluetoothChatService改良
最近都在處理android藍芽傳輸的問題,雖然以前處理過不過被eclipse吃掉了,後面也忘記怎麼用,然後同學說官方有提供bluetooth chat的範例直接改比較快,但後來發現此範例字串有漏接的情況,最後改BluetoothchatService中ConnectThread的run部份解決了此問題,程式碼如下
```Java
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
// Keep listening to the InputStream while connected
while (true) {
Scanner scanner = new Scanner(mmInStream);
while( scanner.hasNext()) {
String readMessage = scanner.nextLine();
mHandler.obtainMessage(Oscillator.MESSAGE_READ, -1, -1, readMessage)
.sendToTarget();
}
}
}
```
2013年1月1日 星期二
RS232傳輸(使用DMAR-128開發板,開發環境為AVR Studio)
這是用來練習如何在AVR單晶片上利用RS232傳輸,電腦端輸入數值傳送到開發板,透過七段顯示器顯示數值,程式碼如下:
#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/delay.h>
#include <string.h>
#include <stdio.h>
#define F_CPU 7372800
#define BAURDRATE 9600
#define UBRR_VALUE (unsigned char)((unsigned long)F_CPU/(16*(unsigned long)BAURDRATE)-1)
#define UBRR_VALUE_H (unsigned char)UBRR_VALUE>>8
#define UBRR_VALUE_L (unsigned char)UBRR_VALUE
#define D_LE0 PORTD &= ~(1 << PD4)
#define D_LE1 PORTD |= (1 << PD4)
#define W_LE0 PORTD &= ~(1 << PD5)
#define W_LE1 PORTD |= (1 << PD5)
#define DATA PORTA
#define SIZE 8
unsigned char str[SIZE];
unsigned char getstr[SIZE];
short int counter = -1;
void initialize(void);
void show_one(unsigned char,unsigned char);
void show(unsigned char[]);
void uart0Init(void)
{
UBRR0H = UBRR_VALUE_H;
UBRR0L = UBRR_VALUE_L;
UCSR0B = _BV(RXEN1) | _BV(RXCIE1) | _BV(TXEN1);
UCSR0C = _BV(UCSZ11) | _BV(UCSZ10);
}
SIGNAL(SIG_USART0_RECV)
{
//str[++counter] = UDR0;
//if (counter== 7)counter = -1;
getstr[++counter] = UDR0;
while(!(UCSR0A&_BV(UDRE1)));
UDR0=getstr[counter];
if (!getstr[counter] | getstr[counter] == (unsigned char)13) {
getstr[counter] = 0;
strcpy(str,getstr);
counter = -1;
}
}
int main(void)
{
initialize();
uart0Init();
sei();
while(1){
show(str);
}
return 0;
}
void show_one(unsigned char number,unsigned char place) {
unsigned char pattern[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x40,0x79};
D_LE1;
W_LE1;
DATA=~(0x01<<place);
W_LE0;
DATA=pattern[number];
D_LE0;
return;
}
void show(unsigned char seg7[]) {
unsigned char i;
for(i=0;seg7[i];i++) {
show_one(seg7[i]-'0',SIZE-(strlen(seg7)-1-i)-1);
_delay_ms(1);
}
for(i=i;i<SIZE;i++) {
show_one(0,SIZE-i-1);
_delay_ms(1);
}
_delay_ms(1);
return;
}
void initialize(void) {
DDRA=0XFF;
PORTA=0xFF;
DDRC=0XF0;
PORTC=0xF0;
DDRD=0XFF;
PORTD=0xFF;
}
2012年11月10日 星期六
Wav Player
前幾天心血來潮,想說用java寫個音樂撥放器於是就做了這個,在處理撥放動作是用DataSourceLine,把AudioInputStream的資料讀進來並寫到DataSourceLine,然後再利用他相關方法來控制播放,但他可以使用的方法太少,最後就改用Clip物件來做!
程式碼:
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.swing.*;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
class MODE{final static int PLAY=0,PAUSE=1,STOP=2,REPLAY=3,OPEN=4;}
public class MediaPlayer implements ActionListener{
JFrame f;
JButton btnPlay, btnPause, btnStop, btnReplay, btnOpen;
JSlider sldTime;
JPanel p;
FileDialog flg;
AudioInputStream audioInputStream;
AudioFormat audioFormat;
Clip clip;
File file;
final String strCmd[]={"btnPlay","btnPause","btnStop","btnReplay","btnOpen"};
String filePath="";
Thread myThread;
public static void main(String [] arg)
{
new MediaPlayer();
}
public void AudioLoad()
{
filePath = flg.getDirectory()+flg.getFile();
f.setTitle(filePath);
if (clip != null)
clip.close();
clip = null;
audioInputStream = null;
file = null;
audioFormat = null;
file = new File(filePath);
try {
audioInputStream = AudioSystem.getAudioInputStream(file);
} catch (UnsupportedAudioFileException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
audioFormat = audioInputStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, audioFormat);
try {
clip = (Clip) AudioSystem.getLine(info);
clip.open(audioInputStream);
} catch (LineUnavailableException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
public MediaPlayer()
{
f = new JFrame("MyFrame");
p = new JPanel(new FlowLayout());
f.setLayout(new BorderLayout());
btnPlay = new JButton();
btnPause = new JButton();
btnStop = new JButton();
btnReplay = new JButton();
btnOpen = new JButton();
sldTime = new JSlider(0,100,0);
btnPlay.setIcon(new ImageIcon("./image/play.png"));
btnPause.setIcon(new ImageIcon("./image/pause.png"));
btnStop.setIcon(new ImageIcon("./image/stop.png"));
btnReplay.setIcon(new ImageIcon("./image/replay.png"));
btnOpen.setIcon(new ImageIcon("./image/open.png"));
btnPlay.setActionCommand("btnPlay");
btnPause.setActionCommand("btnPause");
btnStop.setActionCommand("btnStop");
btnReplay.setActionCommand("btnReplay");
btnOpen.setActionCommand("btnOpen");
btnPlay.addActionListener(this);
btnPause.addActionListener(this);
btnReplay.addActionListener(this);
btnStop.addActionListener(this);
btnOpen.addActionListener(this);
flg = new FileDialog(f, "開啟媒體檔", FileDialog.LOAD);
p.add(btnPlay);
p.add(btnPause);
p.add(btnStop);
p.add(btnReplay);
p.add(btnOpen);
f.add(p, BorderLayout.SOUTH);
f.add(sldTime, BorderLayout.NORTH);
f.pack();
f.setVisible(true);
}
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String cmd = e.getActionCommand();
int id = -1;
for (int i = 0; i <strCmd.length; i++)
if(strCmd[i] == cmd) id=i;
switch (id) {
case MODE.PLAY:
clip.start();
new Timer(1, new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
sldTime.setMaximum((int) audioInputStream.getFrameLength());
sldTime.setValue(clip.getFramePosition());
}}).start();
break;
case MODE.PAUSE:
clip.stop();
break;
case MODE.STOP:
AudioLoad();
break;
case MODE.REPLAY:
AudioLoad();
clip.start();
break;
case MODE.OPEN:
flg.show();
if(!flg.getFile().equals("null"))
AudioLoad();
break;
default:
}
}
}
執行結果:
訂閱:
文章 (Atom)
