QT Quick Arduino Bluetooth Help
-
hey guys i need alot of help i cant seem to wrap my brain around this i am very new to qt quick application but i got an interface design for my project but i am having trouble figuring out how to interface my program with bluetooth i am having trouble finding some simple examples of transmitting data from my qt quick application to my arduino.
My project:
I am building a automated mobile bar. i plan to send a string of data say for example the name of a drink from the QT Quick program over bluetooth to the arduino. the arduino will then take that string and run certain motors based on the input. i already have the arduino program running and controlling certain motors based on a string input through the serial monitor. and i already have the desired layout with my qt quick program. but i cant seem to figure out a way for my qt quick program to send a string based on a drink selected over bluetooth to my arduino. -
My Qt Code i havent altered anything but the main.qml file
@import QtQuick 2.0
import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0Rectangle {
id: root
width: 800
height: 666
color: "#2b3049"
border.width: 9
border.color: "#ffffff"
opacity: 1Button { id: button1 x: 421 y: 589 width: 356 height: 27 text: "Dispense" } Rectangle { id: rectangle1 x: 20 y: 19 width: 383 height: 597 color: "#ffffff" border.width: 7 border.color: "#000000" anchors.bottomMargin: 32 anchors.bottom: parent.bottom TableView { id: drinkTable x: 7 y: 6 width: 368 height: 583 anchors.bottomMargin: 8 anchors.leftMargin: 7 anchors.topMargin: 6 anchors.rightMargin: 8 anchors.fill: rectangle1 TableViewColumn{ role: "name" } model: drinkList } ListModel { id: drinkList ListElement{ name: "Long Island" ingredients :"1/2 oz triple sec \n1/2 oz light rum \n1/2 oz gin \n1/2 oz vodka \n1/2 oz tequila \n1 oz sour mix \nCola " picture: "http://0.tqn.com/d/cocktails/1/I/I/-/-/-/113253549628.jpg" serial: "LONGIS" } ListElement{ name: "White Russian" ingredients : "1 1/2 oz vodka \n3/4 oz Kahlua coffee liqueur \n3/4 oz cream" picture: "http://0.tqn.com/d/cocktails/1/I/e/N/-/-/svedka-ice-kaffe.jpeg" serial: "WHITERU" } ListElement{ name: "Taquila Sunrise" ingredients : "4 oz orange juice \n2 oz tequila \n1/2 oz grenadine \nOrange slice for garnish \nMaraschino cherry for garnish" picture: "http://0.tqn.com/d/cocktails/1/I/3/K/-/-/tequila-sunrise.jpg" serial: "TEQUILASU" } } } Rectangle { id: rectangle2 x: 421 y: 19 width: 356 height: 547 color: "#ffffff" border.width: 7 border.color: "#000000" anchors.bottomMargin: 82 anchors.bottom: parent.bottom ListView { x: 94 y: 23 width: 169 height: 183 anchors.leftMargin: 57 anchors.topMargin: 7 anchors.rightMargin: 57 anchors.bottomMargin: 133 Text { text: drinkList.get(drinkTable.currentRow).ingredients } } Image { id: image1 x: 66 y: 249 width: 225 height: 249 fillMode: Image.PreserveAspectFit source: drinkList.get(drinkTable.currentRow).picture } } StatusBar { id: status_bar1 x: 0 y: 645 width: 286 height: 21 }
}
@i want to Take the serial part of the list element and transmit it to arduino
-
Here is my arduino code
@#include <Arduino.h>
//pin assignment
//Enable Pins
const int EnablePinMotor12 = 22; //enable pin l293d pin 1
const int EnablePinMotor34 = 24; //enable pin l293d pin 9
const int EnablePinMotor56 = 26; //enable pin l293d pin 1 chip 2//PWM Pins
const int PWM1 = 2; //PWM Input motor 1 pin 2
const int PWM2 = 3; //PWM Input motor 2 pin 7
const int PWM3 = 4; //PWM Input motor 3 pin 10
const int PWM4 = 5; //PWM Input motor 4 pin 15
const int PWM5 = 6; //PWM Input motor 5 pin 2 chip 2
const int PWM6 = 7; //PWM Input motor 6 pin 7 chip 2//Buttron pins
const int button1Pin = 23; // the number of the pushbutton pin
const int button2Pin = 25; // the number of the pushbutton pin
const int button3Pin = 27; // the number of the pushbutton pin
const int button4Pin = 29; // the number of the pushbutton pin
const int button5Pin = 31; // the number of the pushbutton pin
const int button6Pin = 33; // the number of the pushbutton pin// LED pins
const int Ledpin1 = 13; //Led PIn//Status Variable
int button1State = 0; // variable for reading the pushbutton status
int button2State = 0; // variable for reading the pushbutton status
int button3State = 0; // variable for reading the pushbutton status
int button4State = 0; // variable for reading the pushbutton status
int button5State = 0; // variable for reading the pushbutton status
int button6State = 0; // variable for reading the pushbutton status// Ingredient Variables
int ingredient1 = 0;
int ingredient2 = 0;
int ingredient3 = 0;
int ingredient4 = 0;
int ingredient5 = 0;
int ingredient6 = 0;String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
String savedDrink = "";void error(uint8_t flag, uint8_t values){
Serial.print("ERROR: ");
Serial.print(flag);
}
void setup(){//Pin Mode assignment
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
pinMode(button3Pin, INPUT);
pinMode(button4Pin, INPUT);
pinMode(button5Pin, INPUT);
pinMode(button6Pin, INPUT);pinMode(EnablePinMotor12, OUTPUT);
pinMode(EnablePinMotor34, OUTPUT);
pinMode(EnablePinMotor56, OUTPUT);pinMode(PWM1, OUTPUT);
pinMode(PWM2, OUTPUT);
pinMode(PWM3, OUTPUT);
pinMode(PWM4, OUTPUT);
pinMode(PWM5, OUTPUT);
pinMode(PWM6, OUTPUT);pinMode(Ledpin1, OUTPUT);
delay(1000);
Serial.begin(9600);
Serial.println("DRINKING COMMENCE");
inputString.reserve(200);
savedDrink.reserve(200);
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}
void buttonState(){button1State = digitalRead(button1Pin); button2State = digitalRead(button2Pin); button3State = digitalRead(button3Pin); button4State = digitalRead(button4Pin); button5State = digitalRead(button5Pin); button6State = digitalRead(button6Pin);
}
@ -
@
void motorControl(){if (inputString == "FLUSH\n"){
Serial.println ("STARTING FULL SYSTEM FLUSH"); Serial.println ("ENABLING MOTORS"); digitalWrite(EnablePinMotor12, HIGH); digitalWrite(EnablePinMotor34, HIGH); digitalWrite(EnablePinMotor56, HIGH); Serial.println ("ACTIVATING"); analogWrite(PWM1, 175); analogWrite(PWM2, 175); analogWrite(PWM3, 175); analogWrite(PWM4, 175); analogWrite(PWM5, 175); analogWrite(PWM6, 175); Serial.println ("DISPENSING"); delay(2000); Serial.println ("DEACTIVATING"); analogWrite(PWM1, 0); analogWrite(PWM2, 0); analogWrite(PWM3, 0); analogWrite(PWM4, 0); analogWrite(PWM5, 0); analogWrite(PWM6, 0); Serial.println ("DISABLING MOTORS"); digitalWrite(EnablePinMotor12, LOW); digitalWrite(EnablePinMotor34, LOW); digitalWrite(EnablePinMotor56, LOW);
}
if (inputString == "M1\n"){Serial.println ("STARTING MOTOR 1"); Serial.println ("ENABLING MOTOR 1"); digitalWrite(EnablePinMotor12, HIGH); Serial.println ("ACTIVATING MOTOR 1"); analogWrite(PWM1, 175); Serial.println ("DISPENSING"); delay(2000); Serial.println ("DEACTIVATING"); analogWrite(PWM1, 0); Serial.println ("DISABLING MOTOR 1"); digitalWrite(EnablePinMotor12, LOW);
}
if (inputString == "M2\n"){Serial.println ("STARTING MOTOR 2"); Serial.println ("ENABLING MOTOR 2"); digitalWrite(EnablePinMotor12, HIGH); Serial.println ("ACTIVATING MOTOR 2"); analogWrite(PWM2, 175); Serial.println ("DISPENSING"); delay(2000); Serial.println ("DEACTIVATING"); analogWrite(PWM2, 0); Serial.println ("DISABLING MOTOR 2"); digitalWrite(EnablePinMotor12, LOW);
}
if (inputString == "M3\n"){Serial.println ("STARTING MOTOR 3"); Serial.println ("ENABLING MOTOR 3"); digitalWrite(EnablePinMotor34, HIGH); Serial.println ("ACTIVATING MOTOR 3"); analogWrite(PWM3, 175); Serial.println ("DISPENSING"); delay(2000); Serial.println ("DEACTIVATING"); analogWrite(PWM3, 0); Serial.println ("DISABLING MOTOR 3"); digitalWrite(EnablePinMotor34, LOW);
}
if (inputString == "M4\n"){Serial.println ("STARTING MOTOR 4"); Serial.println ("ENABLING MOTOR 4"); digitalWrite(EnablePinMotor34, HIGH); Serial.println ("ACTIVATING MOTOR 4"); analogWrite(PWM4, 175); Serial.println ("DISPENSING"); delay(2000); Serial.println ("DEACTIVATING"); analogWrite(PWM4, 0); Serial.println ("DISABLING MOTOR 4"); digitalWrite(EnablePinMotor34, LOW);
}
if (inputString == "M5\n"){Serial.println ("STARTING MOTOR 5"); Serial.println ("ENABLING MOTOR 5"); digitalWrite(EnablePinMotor56, HIGH); Serial.println ("ACTIVATING MOTOR 5"); analogWrite(PWM5, 175); Serial.println ("DISPENSING"); delay(2000); Serial.println ("DEACTIVATING"); analogWrite(PWM5, 0); Serial.println ("DISABLING MOTOR 5"); digitalWrite(EnablePinMotor56, LOW);
}
if (inputString == "M6\n"){
Serial.println ("STARTING MOTOR 6"); Serial.println ("ENABLING MOTOR 6"); digitalWrite(EnablePinMotor56, HIGH); Serial.println ("ACTIVATING MOTOR 6"); analogWrite(PWM6, 175); Serial.println ("DISPENSING"); delay(2000); Serial.println ("DEACTIVATING"); analogWrite(PWM6, 0); Serial.println ("DISABLING MOTOR 6"); digitalWrite(EnablePinMotor56, LOW);
}
}
void loop(){
buttonState();
motorControl();/* if (button1State == HIGH) {
digitalWrite(EnablePinMotor12, HIGH);
Ledpin1 == HIGH;
analogWrite(PWM1, 175);
delay(2000);
digitalWrite(EnablePinMotor12, LOW);
Ledpin1 == LOW;
}
else {
digitalWrite(EnablePinMotor12, LOW);
}*/if (stringComplete) { // print the string when a newline arrives:
Serial.println(inputString);
savedDrink = inputString;
// clear the string:
inputString = "";
stringComplete = false;
}
}
@as you see in my code my if statement under my motorControl function will run certain motor based on a serial string input
The idea seems basic to me just simply call the mac address of the bluetooth module transmit the string but i know the coding is more complicated then that
can someone please help me Thank you
PS. Moderators i posted this where is best see fit but i wasn't sure so if there is a better place for this to be post it would be much appreciated if this topic was pushed to the most helpful location Thank you
-
oh and i also want to have show in the status bar connected but i'm sure if i could figure out the basics of using bluetooth i hopefully might be able to figure out how to say if the device is connected
-
In case use Bluetooth SPP, you can try the QtSerialPort module.
In this case:
- You should make a Bluetooth SPP connection between PC and Arduino (pair).
- Use QSerialPortInfo to select desired serial device (will be the virtual serial port by Bluetooth connection on Windows or /dev/rfcommX on Linux).
- Use QSerialPort to read/write your control commands.
PS: But the Qt Quick here no make sense.. Seems.. Because QtSerialPort can be use from the C++ code.
-
do you think you can link me an example of that so i can see what your talking about i am new to qt programming and i dont know how to install a module add-on for windows and i cant seem to find out how