Bluetooth komunikácia
Úvodní stránka › Fórum › Hardware › Arduino › Bluetooth komunikácia
- Toto téma obsahuje celkem 15 odpovědí. Do diskuze (3 diskutující) se naposledy zapojil uživatel
MilosMerta a poslední změna proběhla před 7 roky a 2 měsíci.
-
AutorPříspěvky
-
5.4.2017 v 10:25 #10997
MilosMerta
ÚčastníkZdravím vás,
som začiatočník s arduinom. Začal som stavať BLUETOOTH CONTROLED TRACTOR. Mám na to program ale mobil vždy odošle iný znak a kvôli tomu sa mi to nerozbehne. Takže moja otázka znie ako mám spraviť aby bluetooth posielal dáta ake prijme? Používam dosku Arduino nano ATmega 328 a a bluetooth HC-055.4.2017 v 11:54 #10998Dreamer
ÚčastníkTo nechápu a asi nejsem sám. Jako že když dáš v telefonu třeba povel k jízdě vpřed tak aplikace pošle pokaždé jiný kód? Jakou aplikaci v telefonu používáš? A chtělo by to alespoň část kódu který má povely vyhodnocovat sem dát.
5.4.2017 v 15:21 #11002MilosMerta
ÚčastníkAplikácia- Bluetooth RC Controller (Android)
Vždy keď pošle mobil povel vpred tak naskočí iný znak v serial monitor.// CxemCAR 1.0 (06.01.2013) // Project Page: http://solderer.tv/arduino-rc-car/ #include "EEPROM.h" #define D1 2 // direction of motor rotation 1 #define M1 3 // PWM left motor #define D2 4 // direction of motor rotation 2 #define M2 5 // PWM right motor #define HORN 13 // additional channel 1 //#define autoOFF 2500 // milliseconds after which the robot stops when the connection #define cmdL 'L' // UART-command for left motor #define cmdR 'R' // UART-command for right motor #define cmdH 'H' // UART-command for additional channel (for example Horn) #define cmdF 'F' // UART-command for EEPROM operation #define cmdr 'r' // UART-command for EEPROM operation (read) #define cmdw 'w' // UART-command for EEPROM operation (write) char incomingByte; // incoming data char L_Data[4]; // array data for left motor byte L_index = 0; // index of array L char R_Data[4]; // array data for right motor byte R_index = 0; // index of array R char H_Data[1]; // array data for additional channel byte H_index = 0; // index of array H char F_Data[8]; // array data for EEPROM byte F_index = 0; // index of array F char command; // command unsigned long currentTime, lastTimeCommand, autoOFF; void setup() { Serial.begin(9600); // initialization UART pinMode(HORN, OUTPUT); // additional channel pinMode(D1, OUTPUT); // output for motor rotation pinMode(D2, OUTPUT); // output for motor rotation /*EEPROM.write(0,255); EEPROM.write(1,255); EEPROM.write(2,255); EEPROM.write(3,255);*/ timer_init(); // initialization software timer } void timer_init() { uint8_t sw_autoOFF = EEPROM.read(0); // read EEPROM "is activated or not stopping the car when losing connection" if(sw_autoOFF == '1'){ // if activated char var_Data[3]; var_Data[0] = EEPROM.read(1); var_Data[1] = EEPROM.read(2); var_Data[2] = EEPROM.read(3); autoOFF = atoi(var_Data)*100; // variable autoOFF ms } else if(sw_autoOFF == '0'){ autoOFF = 999999; } else if(sw_autoOFF == 255){ autoOFF = 2500; // if the EEPROM is blank, dafault value is 2.5 sec } currentTime = millis(); // read the time elapsed since application start } void loop() { if (Serial.available() > 0) { // if received UART data incomingByte = Serial.read(); // raed byte Serial.println(incomingByte); // výpis dát if(incomingByte == cmdL) { // if received data for left motor L command = cmdL; // current command memset(L_Data,0,sizeof(L_Data)); // clear array L_index = 0; // resetting array index } else if(incomingByte == cmdR) { // if received data for left motor R command = cmdR; memset(R_Data,0,sizeof(R_Data)); R_index = 0; } else if(incomingByte == cmdH) { // if received data for additional channel command = cmdH; memset(H_Data,0,sizeof(H_Data)); H_index = 0; } else if(incomingByte == cmdF) { // if received data for EEPROM op command = cmdF; memset(F_Data,0,sizeof(F_Data)); F_index = 0; } else if(incomingByte == '\r') command = 'e'; // end of line else if(incomingByte == '\t') command = 't'; // end of line for EEPROM op if(command == cmdL && incomingByte != cmdL){ L_Data[L_index] = incomingByte; // store each byte in the array L_index++; // increment array index } else if(command == cmdR && incomingByte != cmdR){ R_Data[R_index] = incomingByte; R_index++; } else if(command == cmdH && incomingByte != cmdH){ H_Data[H_index] = incomingByte; H_index++; } else if(command == cmdF && incomingByte != cmdF){ F_Data[F_index] = incomingByte; F_index++; } else if(command == 'e'){ // if we take the line end Control4WD(atoi(L_Data),atoi(R_Data),atoi(H_Data)); delay(10); } else if(command == 't'){ // if we take the EEPROM line end Flash_Op(F_Data[0],F_Data[1],F_Data[2],F_Data[3],F_Data[4]); } lastTimeCommand = millis(); // read the time elapsed since application start } if(millis() >= (lastTimeCommand + autoOFF)){ // compare the current timer with variable lastTimeCommand + autoOFF Control4WD(0,0,0); // stop the car } } void Control4WD(int mLeft, int mRight, uint8_t Horn){ bool directionL, directionR; // direction of motor rotation L298N byte valueL, valueR; // PWM M1, M2 (0-255) if(mLeft > 0){ valueL = mLeft; directionL = 0; } else if(mLeft < 0){ valueL = 255 - abs(mLeft); directionL = 1; } else { directionL = 0; valueL = 0; } if(mRight > 0){ valueR = mRight; directionR = 0; } else if(mRight < 0){ valueR = 255 - abs(mRight); directionR = 1; } else { directionR = 0; valueR = 0; } analogWrite(M1, valueL); // set speed for left motor analogWrite(M2, valueR); // set speed for right motor digitalWrite(D1, directionL); // set direction of left motor rotation digitalWrite(D2, directionR); // set direction of right motor rotation digitalWrite(HORN, Horn); // additional channel } void Flash_Op(char FCMD, uint8_t z1, uint8_t z2, uint8_t z3, uint8_t z4){ if(FCMD == cmdr){ // if EEPROM data read command Serial.print("FData:"); // send EEPROM data Serial.write(EEPROM.read(0)); // read value from the memory with 0 address and print it to UART Serial.write(EEPROM.read(1)); Serial.write(EEPROM.read(2)); Serial.write(EEPROM.read(3)); Serial.print("\r\n"); // mark the end of the transmission of data EEPROM } else if(FCMD == cmdw){ // if EEPROM data write command EEPROM.write(0,z1); // z1 record to a memory with 0 address EEPROM.write(1,z2); EEPROM.write(2,z3); EEPROM.write(3,z4); timer_init(); // reinitialize the timer Serial.print("FWOK\r\n"); // send a message that the data is successfully written to EEPROM } }
tuto je celý kód
5.4.2017 v 21:03 #11018posjirka
Účastníkvidim dva mozne problem
bud je spatny bluetooth modul nebo seriova komunikace. ruseni rovnou odstreluji protoze to je podle me blbost. pokud bych mel sazet tipoval bych seriova komunikace.
zkus si nechat poslat na serial monitor vsechno co bluetooth prijme a over si tvoji teorii.
pak budes vedet.
no nelibi se mi ze pouzivas interni uart. predpokladam ze mas desku treba arduino nano kde je na tomto portu usb prevodnik. sam o sobe je v pohode ale nemuzes vyuzivat tento port pro pc i pro bluetooth. nikde si to nepsal jen upozornuji.
no pak jedine stabilita krystaly …11.4.2017 v 7:42 #11091MilosMerta
ÚčastníkKde by som mal kupiť bluetooth modul aby som zistil ci ten moj funguje? A aky program na riadenie auta s 1 motorom a servom by ste mi odporucili?
12.4.2017 v 9:57 #11097posjirka
Účastníkve výsledku ani nepotřebuješ žádný další modul.
Použij bud PC nebo mobil, kde máš bluetooh , naistaluj si nějáký bluetooth terminál (já mám windows mobile a tam je BTterminal) a pošli si z arduina něco přes bluetooth a v mobilu to musíš dostat presne v tom stavu.
Navíc i zpětně si můžeš poslat nějákou zprávu,nebo kod jako v tom ovládání a musí to fungovat … tady asi žádná rada nebude přesná a je třeba vyzkoušet všechno co jde …21.6.2017 v 7:50 #11832MilosMerta
ÚčastníkZnaky už prichádzajú tak ako majú, len teraz mám problém s motorom. Rozbehne sa iba ak je zapojený iba jeden pin smeru motora a je prepojený na GND.
21.6.2017 v 8:13 #11833posjirka
Účastníkbez schematu se těžko radí …
21.6.2017 v 9:03 #11834MilosMerta
ÚčastníkTu by mala byť schéma.
Attachments:
21.6.2017 v 10:23 #11837posjirka
Účastník??? to myslíš vážně?
21.6.2017 v 15:11 #11838MilosMerta
ÚčastníkVo fritzingu nieje 12V batéria tak som to spravil takto. Alebo sa Vák nepáči niečo iné?
21.6.2017 v 16:32 #11839posjirka
Účastníktohle není schéma, ale vrabčí hnízdo. Promiň a le z toho opravdu nepoznám co je co. hlavně vůbec netuším co je to za IO u H-mustku = nevím jak má být zapojený, nedodržené barvy vodiču to totálně znepřehlednují.
Vůbec z toho nepoznám kde máš spojenou zem obou zdrojů. jinak ti H-mustek nemuže fungovat … atd.21.6.2017 v 16:43 #11840MilosMerta
ÚčastníkZ mojich súčiastok vo fritzingu chýba L298N,12V batéria. Ďalej tam mám použite Arduino UNO,DC motor,HC-05,batéria 9V.
Keby že zoženiem L298N do fritzingu tak tu schému spravím ináč.
Vodiče na vstup 1,2,ENA-8,7,9
RX,TX-10,1121.6.2017 v 20:00 #11841posjirka
Účastníknevidím tam spojení zemí arduina a H-mustku … Tady bych si hledal chybu.
21.6.2017 v 20:11 #11842posjirka
Účastníkpodívej se sem:
třeba to pomůže… je tam popsáno, že je vhodne použít pullup odpory pro vstupy, atd.. -
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.