// This version uses call-backs on the event and RX so there's no data handling in the main loop!
// motor one
#include <SPI.h>
#include "Adafruit_BLE_UART.h"
#define ADAFRUITBLE_REQ 10
#define ADAFRUITBLE_RDY 2
#define ADAFRUITBLE_RST 9
//Do code below here
Adafruit_BLE_UART uart = Adafruit_BLE_UART(ADAFRUITBLE_REQ, ADAFRUITBLE_RDY, ADAFRUITBLE_RST);
boolean messageReceived = false;
uint8_t message[20];
int enA = 7;
int in1 = 3;
int in2 = 4;
// motor two
int enB = 8;
int in3 = 5;
int in4 = 6;
/**************************************************************************/
/*!
This function is called whenever select ACI events happen
*/
/**************************************************************************/
void aciCallback(aci_evt_opcode_t event)
{
switch(event)
{
case ACI_EVT_DEVICE_STARTED:
Serial.println(F("Advertising started"));
break;
case ACI_EVT_CONNECTED:
Serial.println(F("Connected!"));
break;
case ACI_EVT_DISCONNECTED:
Serial.println(F("Disconnected or advertising timed out"));
break;
default:
break;
}
}
/**************************************************************************/
/*!
This function is called whenever data arrives on the RX channel
*/
/**************************************************************************/
void rxCallback(uint8_t *buffer, uint8_t len)
{
Serial.print(F("Received "));
Serial.print(len);
Serial.println(F(" bytes: "));
// for(int i=0; i<len; i++)
// Serial.print((char)buffer[i]);
//
// Serial.print(F(" ["));
//
// for(int i=0; i<len; i++)
// {
// Serial.print(" 0x"); Serial.print((char)buffer[i], HEX);
// }
// Serial.println(F(" ]"));
switch(buffer[2]) {
case 53:
Serial.println ( "up");
digitalWrite(7, HIGH);
//Motor 1 forward- right wheel
analogWrite(enA, 255);//Sets speed variable via PWM
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
Serial.println("Motor 1 Forward"); // Prints out “Motor 1 Forward” on the serial monitor
Serial.println(" ");
//motor 2 forward- left wheel
analogWrite(enB, 255);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Motor 2 Forward");
Serial.println(" ");
delay(1000);
//motor 1 stop
analogWrite(enA, 0);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
Serial.println("Motor 1 Stop");
Serial.println(" ");
//motor 2 stop
analogWrite(enB, 0);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Motor 2 Stop");
Serial.println(" ");
break;
case 54:
Serial.println ( "down");
digitalWrite(7, LOW);
//motor 1 backwards
analogWrite(enA, 255);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
Serial.println("Motor 1 Reverse");
Serial.println(" ");
//motor 2 backwards
analogWrite(enB, 255);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
Serial.println("Motor 2 Reverse");
Serial.println(" ");
delay(1000);
//motor 1 stop
analogWrite(enA, 0);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
Serial.println("Motor 1 Stop");
Serial.println(" ");
//motor 2 stop
analogWrite(enB, 0);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Motor 2 Stop");
Serial.println(" ");
break;
case 55:
Serial.println ( "left");
// motor 1 forward- right wheel
analogWrite(enA, 255);//Sets speed variable via PWM
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
Serial.println("Motor 1 Forward"); // Prints out “Motor 1 Forward” on the serial monitor
Serial.println(" ");
// motor 2 backwards- left wheel
analogWrite(enB, 255);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
Serial.println("Motor 2 Reverse");
Serial.println(" ");
delay(1000);
//motor 1 stop
analogWrite(enA, 0);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
Serial.println("Motor 1 Stop");
Serial.println(" ");
//motor 2 stop
analogWrite(enB, 0);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Motor 2 Stop");
Serial.println(" ");
break;
case 56:
Serial.println ( "right");
//motor 1 backwards- left wheel
analogWrite(enA, 255);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
Serial.println("Motor 1 Reverse");
Serial.println(" ");
//motor 2 forwards- right wheel
analogWrite(enB, 255);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Motor 2 Forward");
Serial.println(" ");
break;
delay(1000);
//motor 1 stop
analogWrite(enA, 0);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
Serial.println("Motor 1 Stop");
Serial.println(" ");
//motor 2 stop
analogWrite(enB, 0);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("Motor 2 Stop");
Serial.println(" ");
}
/* Echo the same data back! */
uart.write(buffer, len);
}
/**************************************************************************/
/*!
Configure the Arduino and start advertising with the radio
*/
/**************************************************************************/
// connect motor controller pins to Arduino digital pins
void setup(void){
// set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
while(!Serial); // Leonardo/Micro should wait for serial init
Serial.println(F("Adafruit Bluefruit Low Energy nRF8001 Callback Echo demo"));
uart.setRXcallback(rxCallback);
uart.setACIcallback(aciCallback);
uart.setDeviceName("AMY"); /* 7 characters max! */
uart.begin();
pinMode(7, OUTPUT);
}
/**************************************************************************/
/*!
Constantly checks for new events on the nRF8001
*/
/**************************************************************************/
void loop()
{
uart.pollACI();
}
Comments