Skip to content

Instantly share code, notes, and snippets.

@gundamsan
Created November 13, 2016 02:45
Show Gist options
  • Save gundamsan/d630791b9f9b608bbc7460442e8d9a8d to your computer and use it in GitHub Desktop.
Save gundamsan/d630791b9f9b608bbc7460442e8d9a8d to your computer and use it in GitHub Desktop.
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char ssid[] = "ESP8266";
const char pass[] = "password";
#define DEBUG Serial
#define ON_BOARD_LED 14
#define DRV8830_A1_A0_0_0 0b1100000
#define DRV8830_A1_A0_0_open 0b1100001
#define DRV8830_A1_A0_0_1 0b1100010
#define DRV8830_A1_A0_open_0 0b1100011
#define DRV8830_A1_A0_open_open 0b1100100
#define DRV8830_A1_A0_open_1 0b1100101
#define DRV8830_A1_A0_1_0 0b1100110
#define DRV8830_A1_A0_1_open 0b1100111
#define DRV8830_A1_A0_1_1 0b110100
const int motorL = DRV8830_A1_A0_open_open;
const int motorR = DRV8830_A1_A0_open_1;
const int PACKET_SIZE = 256;
WiFiUDP udp;
unsigned int localPort = 10000;
char packetBuffer[PACKET_SIZE];
int status = WL_IDLE_STATUS;
int prev_X = 128, prev_Y = 128;
bool isChange = false;
int ledState = LOW;
int speedL = 0, speedR = 0;
bool isDebugOut = false;
int DRV8830_setSpeed(int DRV8830_Address, int speed)
{
byte direction;
byte power;
if (speed == 0)
{
direction = 0x00;
}
else if (speed < 0)
{
direction = 0b10;
speed = -1 * speed;
}
else
{
direction = 0b01;
}
power = (byte)(speed & 0xff);
if (power > 0x3f)
{
power = 0x3f;
}
speed = power;
power = (power << 2) | direction;
Wire.beginTransmission(DRV8830_Address);
Wire.write(0x00);
Wire.write(power);
Wire.endTransmission();
if (direction = 0b10)
{
speed = -1 * speed;
}
return(speed);
}
void DRV8830_brake(int DRV8830_Addres)
{
Wire.beginTransmission(DRV8830_Addres);
Wire.write(0x00);
Wire.write(0x03);
Wire.endTransmission();
}
int DRV8830_getSpeed(int DRV8830_Addres)
{
int speed = 0;
byte data;
Wire.beginTransmission(DRV8830_Addres);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom((int)DRV8830_Addres, 1);
while (Wire.available() == 0);
data = Wire.read();
if ((data & 0x03) == 0b10)
{
speed = -1 * (data >> 2);
}
else
{
speed = data >> 2;
}
return speed;
}
void setup()
{
DEBUG.begin(115200);
while (!DEBUG)
{
;
}
DEBUG.println("program start..");
Wire.begin();
DRV8830_setSpeed(motorL, 0);
DRV8830_setSpeed(motorR, 0);
WiFi.softAP(ssid, pass);
IPAddress myIP = WiFi.softAPIP();
DEBUG.print("AP IP address: ");
DEBUG.println(myIP);
DEBUG.println("Starting UDP");
udp.begin(localPort);
DEBUG.print("Local port: ");
DEBUG.println(udp.localPort());
}
void loop()
{
int rlen, val_X = 0, val_Y = 128;
while (true)
{
rlen = udp.parsePacket();
if (rlen < 10) {
delay(1);
continue;
}
udp.read(packetBuffer, (rlen > PACKET_SIZE) ? PACKET_SIZE : rlen);
val_X = packetBuffer[2];
if (val_X != prev_X)
{
prev_X = val_X;
isChange = true;
isDebugOut = true;
}
val_Y = packetBuffer[3];
if (val_Y != prev_Y)
{
prev_Y = val_Y;
isChange = true;
isDebugOut = true;
}
if (isChange) {
int speed = (val_Y - 128);
int direction = (val_X - 128);
speedL = speed + direction;
speedR = speed - direction;
DRV8830_setSpeed(motorL, speedL);
DRV8830_setSpeed(motorR, speedR);
isChange = false;
}
delay(1);
if (isDebugOut) {
DEBUG.print(val_X);
DEBUG.print(" , ");
DEBUG.print(val_Y);
DEBUG.print(" : ");
DEBUG.print(speedL);
DEBUG.print(" , ");
DEBUG.println(speedR);
isDebugOut = false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment