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&lt;&lt;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;
}