Projekte
BirgerT
BlueModul_Test_Setup
nibo_blue.h
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
BlueModul_Test_Setup
main.c
nibo_blue.h
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7416 private projects
378 public projects
16172649 lines compiled
58122 builds
NIBO
@
bluemodul_test_setup/nibo_blue.h [read only]
////////////////////////////////////////////////////////////////////////// // // NIBO_BLUE Test- und Konfigurationsprogramm für das Nibo-Blue Modul // am UART von NiboBurger oder Nibobee // // (c) Birger Töpelmann toepelmann(A)web.de Version 160227a // // Das Nibo-Blue Modul ist ein Bluetooth Slave HC-06, das sich mit dem // Bluetoth von Smartphone und PCs (Notebooks) als relativ problem- und // drahtloser Schnittstellenadapter pairen lässt. // // Die NiboBee / NiboBurger Terminal APP zur Fernsteuerung mit dem // niboprot verwendet die Default Einstellungen (Auslieferungszustand): // 9600 Baud, 8 Datenbits, No Parity, 1 Stoppbit // ID (Name) "linvor" und Pincode "1234" // // Solange das Blue-Modul keine aktive Bluetooth Verbindung zum // Mastergerät (Smartphone o. Notebook) hat, lassen sich die Einstellungen // über AT Kommandos abfragen und konfigurieren; // bei aktiver Bluetooth Verbindung mit dem Mastergerät reagiert das Modul // nicht mehr auf die AT Kommandos - die Zeichen werden 1:1 zum Mastergerät // gesendet. // // Ist das Blue Modul mit Spannung versorgt zeigt die blaue LED auf dem // Modul den Verbindungsstatus an: // Blinken = keine Verbindung zum Mastergerät // Dauerlicht = Verbindung zum Mastergerät hergestellt. // // Unter den Projekten auf roboter.cc gibt es das NiboBee Projekt // "nibobee_probe_blue" von workwind, mit dem die evtl. geänderte // Baudrate des Blue Moduls zwar ermittelt aber nicht eingestellt werden // kann. // // Wird diese nibo_blue.h im Hauptprogramm vor der main() eingefügt, // können im eigenen Projekt die Funktionen aus "nibobee_probe_blue.cpp" // verwendet und zusätzlich die Baudrate (und andere Parameter) des // Blue Moduls verstellt werden. // // TODO // // ////////////////////////////////////////////////////////////////////////// // /* BSD-License: Copyright (c) by Birger Töpelmann, contact BirgerT at roboter.cc, Germany Modified programs to run the NIBO Burger Robot Kit by nicai-systems, based on and partially taken from the original niborobolib Copyright (c) by Nils Springob, nicai-systems, Germany All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name nicai-systems nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // #ifndef NIBO_BLUE_H_ #define NIBO_BLUE_H_ // #define BLUE_NEW_BAUD 6 // Index der gewünschten Baudrate // // * = Standard --- LED Binärcode Anzeige -- // Index Kommando Baudrate LED1 LED2 LED3 LED4 // 1 AT+BAUD1 1200 AN aus aus aus // 2 AT+BAUD2 2400 aus AN aus aus // 3 AT+BAUD3 4800 AN AN aus aus // 4* AT+BAUD4 9600* aus aus AN aus // 5 AT+BAUD5 19200 AN aus AN aus // 6 AT+BAUD6 38400 aus AN AN aus // 7 AT+BAUD7 57600 AN AN AN aus // bei Error ????? AN AN AN AN // // zusätzlich veränderbare Parameter werden an das Blue Modul gesendet, // wenn das "#define" nicht auskommentiert wird // // neue Bluetoth ID setzen //#define BLUE_NEW_NAME "NiboBurger" // max. 20 Zeichen // neue Bluetooth PIN setzen //#define BLUE_NEW_PIN "1234" // #if 1 // UART Kommunikation mit uart_funktionen der Niborobolib #define BLUE_SETBAUD(x) usart_setbaudrate((uint16_t)x); usart_enable() #define BLUE_PUTCHAR(x) usart_putchar(x) #define BLUE_RX_EMPTY() usart_rxempty() #define BLUE_GETCHAR() usart_getchar() #define BLUE_PUTSTRP(x) usart_write_P(x) #define BLUE_DISABLE() usart_disable() #else // UART Kommunikation mit uart_funktionen von BirgerT #define BLUE_SETBAUD(x) uart_init((uint32_t)x) #define BLUE_PUTCHAR(x) uart_txd_char(x) #define BLUE_RX_EMPTY() (!uart_rxd_avail()) #define BLUE_GETCHAR() uart_rxd_char() #define BLUE_PUTSTRP(x) uart_txd_strP(x) #define BLUE_DISABLE() uart_disable() #endif // #define BLUE_SUCCESS 1 #define BLUE_ERROR -1 // // led_setall(led1,led2,led3,led4); gibt's nur beim Niboburger, // deshalb für den Nibobee // void blue_setleds(uint8_t led1, uint8_t led2, uint8_t led3, uint8_t led4) { led_set(1,led1); led_set(2,led2); led_set(3,led3); led_set(4,led4); } ////////////////////////////////////////////////////////////////////////// // // blue_probe() initialisiert den UART mit der übergebenen Baudrate und // sendet dann das Testkommando "AT", stimmt die Baudrate des UART mit // der Baudrate des Blue Moduls überein, antwortet das Blue Modul mit "OK". // // Über die LEDs wird der Baudraten Index als Binärcode (hex) angezeigt: // LED1 LED2 LED3 LED4 Testbaudrate // an aus aus aus 1200 Baud // aus an aus aus 2400 " // an an aus aus 4800 " // aus aus an aus 9600 " (Default Einstellung) // an aus an aus 19200 " // aus an an aus 38400 " // an an an aus 57600 " // // wurde die richtige Baudrate erkannt, blinken die LEDs 5x // uint8_t blue_probe(uint16_t baud, uint8_t led) { uint8_t err = 0; // Den Index der Baudrate als Binärcode auf die LEDs 1..4 blue_setleds(led&1,led&2,led&4,led&8); // UART mit der Testbaudrate initialisieren BLUE_SETBAUD(baud); delay(500); // ggf. vorhandene Zeichen aus Empfangsbuffer "löschen" while (!BLUE_RX_EMPTY()) { BLUE_GETCHAR(); } // Blue Modul Testkommando BLUE_PUTCHAR('A'); BLUE_PUTCHAR('T'); // Bluemodul braucht 'ne Sekunde für die Antwort delay(1200); blue_setleds(0, 0, 0, 0); // (Wenn kein Zeichen empfangen wurde -> Error) || // (Wenn die empfangenen Zeichen nicht "OK" sind -> Error) err = (BLUE_RX_EMPTY() || BLUE_GETCHAR() != 'O'); err |= (BLUE_RX_EMPTY() || BLUE_GETCHAR() != 'K'); while(!err) { // Antwort vom Blue Modul war "OK" -> for (uint8_t i = 5; i>0; --i) { delay(250); blue_setleds(led&1,led&2,led&4,led&8); delay(250); blue_setleds(0, 0, 0, 0); } // for return BLUE_SUCCESS; } // while return BLUE_ERROR; } // blue_probe() ////////////////////////////////////////////////////////////////////////// // // blue_echo() hilft beim Testen der Bluetooth Verbindung zwischen dem // Blue Modul und dem Mastergerät. Ein über das Blue Modul empfangenes // "Bit" wird sofort und Baudraten unabhängig zurück gesendet. // Bei bestehender Bluetooth Verbindung sollte das Terminalprogramm die // gesendeten Zeichen empfangen und anzeigen (Echo). // Die Pegel vom RX- und TX-Pin werden mit den LEDs 2 und 3 angezeigt. // (LED 3 leucht (fast) dauernd, LED 2 blitzt mit den gesendeten "Einsen") // void blue_echo() { // UART ausschalten, damit RX- und TX-Pins als normale IOs funktionieren BLUE_DISABLE(); // TX-Pin als Ausgang PORTD |= (1<<PD1); DDRD |= (1<<PD1); while(1){ if (PIND & (1<<PD0)) { // RX-Pin (PD0) ist 1 dann TX-Pin (PD1) auf 1 PORTD |= (1<<PD1); led_set(2,0); led_set(3,1); } else { // RX-Pin ist 0 dann TX-Pin auf 0 PORTD &= ~(1<<PD1); led_set(2,1); led_set(3,0); } } // while } // blue_echo() ////////////////////////////////////////////////////////////////////////// // // blue_set(baudidx) sendet die AT Kommando zum Einstellen der Baudrate // sowie bei Bedarf auch andere Parameter an das Blue Modul. // Nach jedem AT Kommando soll man 1 Sekunde warten, bevor das nächste // Kommando geschickt wird. // // baudidx ist eine Ziffer zwischen 1 und 7 // blue_set(6); oder blue_set('6'); -> Baudrate 38400 einstellen // // die AT Kommandos zum Einstellen der Baudrate: // AT+BAUD1 -> 1200 Baud // AT+BAUD2 -> 2400 Baud // AT+BAUD3 -> 4800 Baud // AT+BAUD4 -> 9600 Baud (Standard) // AT+BAUD5 -> 19200 Baud // AT+BAUD6 -> 38400 Baud // AT+BAUD7 -> 57600 Baud // AT+BAUD8 -> 115200 Baud (nicht mit usart_setbaud(uint16_t baud); ) // AT+BAUD9 -> 230400 Baud (nicht mit usart_setbaud(uint16_t baud); ) // void blue_set(char baudidx) { #ifdef BLUE_NEW_NAME // neue ID setzen (max. 20 Zeichen lang) BLUE_PUTSTRP(PSTR("AT+NAME"BLUE_NEW_NAME)); delay(1200); // die Antwort aus dem Empfangsbuffer "löschen" while (!BLUE_RX_EMPTY()) { BLUE_GETCHAR(); } #endif #ifdef BLUE_NEW_PIN // neue PIN setzen (4 Ziffern) BLUE_PUTSTRP(PSTR("AT+PIN"BLUE_NEW_PIN)); delay(1200); // die Antwort aus dem Empfangsbuffer "löschen" while (!BLUE_RX_EMPTY()) { BLUE_GETCHAR(); } #endif // Baudindex als uint8_t 1..7 -> char '1'..'7' if ((baudidx > 0) && (baudidx < 8)) { baudidx += '0'; } // ungültiger Baudindex -> Default 9600 Baud if (!((baudidx > '0') && (baudidx < '8'))) { baudidx = '4'; } // Baudrate einstellen BLUE_PUTSTRP(PSTR("AT+BAUD")); BLUE_PUTCHAR(baudidx); delay(1200); // die Antwort aus dem Empfangsbuffer "löschen" while (!BLUE_RX_EMPTY()) { BLUE_GETCHAR(); } } ////////////////////////////////////////////////////////////////////////// // // blue_testbaud() probiert nacheinander die möglichen Baudraten solange // durch, bis die Kommunikation mit dem Blue Modul "OK" ergab. // Wurde keine Baudrate erkannt, wechselt das Programm in den Echo Modus; // bei dem ein über Bluetooth empfangenes Zeichen Baudraten unabhängig // sofort zurück gesendet wird. // Siehe auch blue_probe() und blue_echo() // const uint16_t blue_baudtab[] PROGMEM = {1200, 2400, 4800, 9600, 19200, 38400, 57600}; uint16_t blue_baud = 0; // enthält die zuletzt getestete Baudrate // void blue_testbaud() { BLUE_DISABLE(); // TX Pin als Ausgang setzen -> BREAK = Reset des Blue Modul UARTs? PORTD |= (1<<PD1); DDRD |= (1<<PD1); blue_setleds(1, 1, 1, 1); delay(200); blue_setleds(0, 0, 0, 0); uint8_t tests = 0; // sizeof(blue_baudtab) / sizeof(blue_baudtab[0]); while(tests < sizeof(blue_baudtab) / sizeof(blue_baudtab[0])) { blue_baud = pgm_read_word(&blue_baudtab[tests]); if(blue_probe(blue_baud, tests+1) == BLUE_SUCCESS) { // Test == "OK" -> Ende blue_setleds(0, 0, 0, 0); return; } tests++; } // Alle Baudratentest nicht "OK" -> Alle LEDs blinken und.. for (uint8_t i = 5; i>0; --i) { delay(250); blue_setleds(1, 1, 1, 1); delay(250); blue_setleds(0, 0, 0, 0); } // for // ..ab in den ECHO-Modus, zum Testen der Verbindung PC <-> Blue Modul while (1) { blue_echo(); } } #endif /* NIBO_BLUE_H_ */
Compiler results:
Werbung
Online
arielkellum0637061
armanddelatorre8855
BoxerOwela
brandi20b03191419
clemmielcg304935418
elvialavender09
FloKre
GordonQuams
leliabaughan2211
lemuelhuggard0635103
marina42362450713
Marinabmz
maxiepalfreyman85
michalexds7707020940
nathan04b66219486217
orlandostockwell
shellachen05598945
warren38l1013290