#include "BluetoothSerial.h"
#include <driver/adc.h>
#include <math.h>
#include <LSM303C.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
static uint32_t last_send = 0;
#define X_in 36
#define Y_in 39
#define bttn1 35
#define bttn2 34
#define bttn3 32
#define bttn4 33
#define bttn5 27
#define bttn6 26
#define bttn7 25
#define rx 3
#define tx 1
#define chan1 15
#define chan2 4
#define red 17
#define blue 5
#define green 18
#define splitvolt 14
#define sda 21
#define scl 22
int x;
int y;
int b1;
int b2;
int b3;
int b4;
int b5;
int b6;
int b7;
int counter = 0;
int aState;
int aLastState;
//LSM303C myIMU(sda,scl);
String message = "";
uint8_t* temp[8];
int p = 0;
String color = "";
char Data;
String sensor = "";
char sens_data;
BluetoothSerial SerialBT;
void setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
Serial.begin(57600);
SerialBT.begin("ESP32"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
pinMode(X_in, INPUT);
pinMode(Y_in, INPUT);
pinMode(bttn1, INPUT_PULLUP);
pinMode(bttn2, INPUT_PULLUP);
pinMode(bttn3, INPUT_PULLUP);
pinMode(bttn4, INPUT_PULLUP);
pinMode(bttn5, INPUT_PULLUP);
pinMode(bttn6, INPUT_PULLUP);
pinMode(bttn7, INPUT_PULLUP);
pinMode(chan1, INPUT);
pinMode(chan2, INPUT);
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(splitvolt, INPUT);
aLastState = digitalRead(chan1);
digitalWrite(green,1);
digitalWrite(red,1);
digitalWrite(blue,1);
//myIMU.begin();
delay(5000);
}
void loop() {
//SerialBT.flush();
Serial.println("beginning");
String message = "";
adc1_config_width(ADC_WIDTH_BIT_10); //Range 0-1023
aState = digitalRead(chan1);
if (aState != aLastState){
if (digitalRead(chan2) != aState) {
counter++;
if(counter > 20){
counter = 0;
}
}
else{
counter--;
if (counter < 0){
counter = 20;
}
}
}
if(counter < 10){
message += "0";
}
message += counter;
aLastState = aState;
Serial.println("after rotary encoder");
x = adc1_get_raw(ADC1_CHANNEL_0);
int X = map(x, 0, 1023, 0, 255);
if(X < 10){
message += "00";
}
else if( X > 9 && X < 100){
message += "0";
}
message += X;
y = adc1_get_raw(ADC1_CHANNEL_3);
int Y = map(y, 0, 1023, 0, 255);
if(Y < 10){
message += "00";
}
else if(Y > 9 && Y < 100){
message += "0";
}
message += Y;
Serial.println("After Joystick");
if(digitalRead(bttn1)== 0){
message += "0";
p++;
}
else{
message += "1";
p++;
}
if(digitalRead(bttn2)== 0){
message += "0";
p++;
//SerialBT.end();
//SerialBT.begin("ESP32");
}
else{
message += "1";
p++;
}
if(digitalRead(bttn3)== 0){
message += "1";
p++;
}
else{
message += "0";
p++;
}
if(digitalRead(bttn4)== 0){
message += "1";
p++;
}
else{
message += "0";
p++;
}
if(digitalRead(bttn5)== 0){
message += "1";
p++;
}
else{
message += "0";
p++;
}
if(digitalRead(bttn6)== 0){
message += "1";
p++;
}
else{
message += "0";
p++;
}
if(digitalRead(bttn7)== 0){
message += "1";
p++;
}
else{
message += "0";
p++;
}
Serial.println("after buttons");
/*
LSM303C_sensor a = myIMU.read_acc();
a.raw.x = abs(a.raw.x);
if(a.raw.x < 10){
message += "000";
}
else if(a.raw.x > 9 && a.raw.x < 100){
message += "00";
}
else if(a.raw.x > 99 && a.raw.x < 1000){
message += "0";
}
message += a.raw.x;
a.raw.y = abs(a.raw.y);
if(a.raw.y < 10){
message += "000";
}
else if(a.raw.y > 9 && a.raw.y < 100){
message += "00";
}
else if(a.raw.y > 99 && a.raw.y < 1000){
message += "0";
}
message += a.raw.y;
a.raw.z = abs(a.raw.z);
if(a.raw.z < 10){
message += "000";
}
else if(a.raw.z > 9 && a.raw.z < 100){
message += "00";
}
else if(a.raw.z > 99 && a.raw.z < 1000){
message += "0";
}
message += a.raw.z; */
//message += "000000000000";
message += "f";
Serial.println(message);
//SerialBT.print(message);
uint32_t now = millis();
if (SerialBT.hasClient()) {
if (50 < now-last_send) {
SerialBT.print(message);
last_send = now;
}
}
else{
SerialBT.end();
SerialBT.begin("ESP32");
delay(5000);
}
delay(1);
//delay(20);
if (SerialBT.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
char Data = SerialBT.read();
if (Data != '\n'){
color += String(Data);
}
else{
color = "";
}
// Serial.println(color);
if (color == "green"){
digitalWrite(green,0);
digitalWrite(blue,1);
digitalWrite(red,1);
}
else if (color == "red"){
digitalWrite(red,0);
digitalWrite(green,1);
digitalWrite(blue,1);
}
else if (color == "blue"){
digitalWrite(blue,0);
digitalWrite(green,1);
digitalWrite(red,1);
}
else if (color == "purple"){
digitalWrite(blue,0);
digitalWrite(red,0);
digitalWrite(green,1);
}
else if (color == "yellow"){
digitalWrite(blue,1);
digitalWrite(red,0);
digitalWrite(green,0);
}
else if (color == "cyan"){
digitalWrite(blue,0);
digitalWrite(red,1);
digitalWrite(green,0);
}
else if (color == "white"){
digitalWrite(blue,0);
digitalWrite(red,0);
digitalWrite(green,0);
}
else if (color == "off"){
digitalWrite(green,1);
digitalWrite(blue,1);
digitalWrite(red,1);
}
}
Serial.println("after send");
delay(20);
}