Fórum témák

» Több friss téma
Cikkek » Bluetooth-UART modul használata
Bluetooth-UART modul használata
Szerző: Fizikus, idő: Júl 24, 2010, Olvasva: 44151, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   5 / 6

A BT kapcsolat teszeléséhez kicsit átalakítottam a robotomat:

Az alábbi ábrán látható a megvalósított PC <-> BT <-> AVR kommunikáció vázlata:

A mellékelt egyszerű programot az ATmega8-as mikrovezérlőbe égetve, a billentyűzetről, a vezetéknélküli soros BT porton keresztül küldött karakterekkel távirányítható a robot.

A vezérlőprogram az UART-on érkező karakterektől függően irányítja a robotot, és a fogadott karakternek megfelelő parancsokat egy rövid üzenet küldésével visszajelzi:

(Ahhoz hogy az alábbi kód működjön, kell az előző cikkben leírt motor.h kód is! (LINK))

  1. /*BT tesztprogram: Robot Taviranyito
  2. Hardver:    ATmega8 @ 7.372800MHz
  3. PC Szoftver: Hyper terminal @ 9600 baud, Nincs Paritas Bit, 1 Stop Bit, Flow Control = NONE
  4. */
  5.  
  6. #define F_CPU 7372800UL  // rendszer orajel: 7.3728 MHz
  7. #define USART_BAUDRATE 9600  // soros kommunikacio sebessege: 9600 bps
  8. #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1)  // UBRR
  9.  
  10. #include <avr/io.h>
  11. #include <avr/interrupt.h>
  12. #include <inttypes.h>
  13. #include <util/delay.h>
  14. #include <util/motor.h>
  15.  
  16. void KonfigUART()  // UART beallitasa
  17. {
  18.     // 9600 bps soros kommunikacio sebesseg beallitasa
  19.     UBRRL = UBRR_ERTEK;        // UBRR_ERTEK also 8 bitjenek betoltese az UBRRL regiszterbe
  20.     UBRRH = (UBRR_ERTEK>>8);   // UBRR_ERTEK felso 8 bitjenek betoltese az UBRRH regiszterbe
  21.    // Aszinkron mod, 8 Adat Bit, Nincs Paritas Bit, 1 Stop Bit
  22.     UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
  23.    //Ado es Vevo aramkorok bekapcsolasa + az RX interrupt engedelyezese
  24.     UCSRB |= (1 << RXEN) | (1 << RXCIE) | (1 << TXEN);   //
  25. }
  26.  
  27. char UARTAdatFogad() // Ez a fuggveny a beerkezo adatokat kiolvassa az UDR regiszter bejovo pufferebol
  28. {
  29.    while(!(UCSRA & (1<<RXC)))  // Varakozas amig nincs uj bejovo adat
  30.    {
  31.       //  Varakozas
  32.    }
  33.    //Most mar van beerkezett adat, amit kiolvasunk a pufferbol
  34.    return UDR;
  35. }
  36.  
  37. void UARTAdatKuld(char data)  // Ez a fuggveny a kuldendo adatot beirja az UDR regiszter kimeno pufferjebe
  38. {
  39.    while(!(UCSRA & (1<<UDRE))) // Varakozas amig az Ado kesz nem lesz az adatkuldesre
  40.    {
  41.       //   Varakozas
  42.    }
  43.    // Az Ado mar kesz az adatkuldesre, a kuldendo adatot a kimeno pufferjebe irjuk
  44.    UDR=data;
  45. }
  46.  
  47. void UARTSzovegKuld( char *p)
  48. {
  49.     while(*p)
  50.     {
  51.       UARTAdatKuld( *p++);
  52.     }
  53. }
  54.  
  55. int main(void) // Foprogram
  56. {
  57.     KonfigUART(); // UART Konfiguralasa
  58.  
  59.     sei();    // Altalanos megszakitasok engedelyezese
  60.    
  61.     while(1)
  62.     {
  63.         // Ures ciklus (mindent az ISR-en belul kezelunk)
  64.     }
  65.     return 0;
  66. }
  67.  
  68.  
  69. ISR(USART_RXC_vect)  // RX interrupt, ezek az utasitasok futak le ha bejovo adat erkezik
  70. {
  71.         char data;    
  72.  
  73.     data = UARTAdatFogad();     // A berekezo bajt fogadasa
  74.    
  75.     if(data == 'e') // Ha a fogadott bajt 'e'-vel egyezik meg, ELORE
  76.     {
  77.         elore(100);
  78.         UARTSzovegKuld("Elore");   // Szoveg kiirasa
  79.         UARTAdatKuld('n');     // Kovetkezo sor
  80.         UARTAdatKuld('r');     // Ugras a sor elejere
  81.     }
  82.     else if(data == 'h')  // Ha a fogadott bajt 'h'-val egyezik meg, HATRA
  83.     {
  84.         hatra(100);
  85.         UARTSzovegKuld("Hatra");   // Szoveg kiirasa
  86.         UARTAdatKuld('n');     // Kovetkezo sor
  87.         UARTAdatKuld('r');     // Ugras a sor elejere
  88.     }
  89.         else if(data == 'j')  // Ha a fogadott bajt 'j'-vel egyezik meg, FORDUL JOBBRA
  90.     {
  91.         fordul_jobb(50);
  92.         UARTSzovegKuld("Fordulas Jobbra");   // Szoveg kiirasa
  93.         UARTAdatKuld('n');     // Kovetkezo sor
  94.         UARTAdatKuld('r');     // Ugras a sor elejere
  95.     }
  96.         else if(data == 'b')  // Ha a fogadott bajt 'b'-vel egyezik meg, FORDUL BALRA
  97.     {
  98.         fordul_bal(50);
  99.         UARTSzovegKuld("Fordulas Balra");   // Szoveg kiirasa
  100.         UARTAdatKuld('n');     // Kovetkezo sor
  101.         UARTAdatKuld('r');     // Ugras a sor elejere
  102.     }
  103.     else if(data == 's')  // Ha a fogadott bajt 's'-sel egyezik meg, STOP
  104.     {
  105.         motor_stop(mind);
  106.         UARTSzovegKuld("STOP");   // Szoveg kiirasa
  107.         UARTAdatKuld('n');     // Kovetkezo sor
  108.         UARTAdatKuld('r');     // Ugras a sor elejere
  109.     }
  110. }


A cikk még nem ért véget, lapozz!
Következő: »»   5 / 6
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem