I am trying to make a project in which the Mega collects readings from an accelerometer (MPU6050) and a DHT11 Sensor module and sends it to a NodeMCU v1.0 which has to upload it to a server. The Mega is in a 6WD chassis and I have also attached IR sensors for edge avoiding. But when I connect the Mega to the computer and upload the program I get a funny (low pitch) beeping sound from the Mega. I noticed that the sound stops when I remove the wire connecting the GND pin in Mega to the GND pin of the L298N Motor Drivers. Why does this happen?
#include <DHT.h>
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 MPU;
#define OUTPUT_TEAPOT
#define INTERRUPT_PIN 2
#define LED_PIN 13
void edgeAvoid(int[4]);
void goStraight(int);
void goLeft(int);
void goRight(int);
void goBack(int);
bool blinkState = false;
bool dmpReady = false;
uint8_t mpuIntStatus;
uint8_t devStatus;
uint16_t packetSize;
uint16_t fifoCount;
uint8_t fifoBuffer[64];
Quaternion q;
VectorInt16 aa;
VectorInt16 aaReal;
VectorInt16 aaWorld;
VectorFloat gravity;
float euler[3];
float ypr[3];
uint8_t teapotPacket[14] = {'
, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\r', '\n'};
int a[4];
int IR[4] = {44, 45, 46, 47};
int RF1 = 32;
int RF2 = 33;
int LF1 = 34;
int LF2 = 35;
int RM1 = 36;
int RM2 = 37;
int LM1 = 38;
int LM2 = 39;
int RB1 = 40;
int RB2 = 41;
int LB1 = 42;
int LB2 = 43;
int powerPins[4] = {48, 49, 50, 51};
int gndPins[4] = {28, 29, 30, 31};
volatile bool mpuInterrupt = false;
void dmpDataReady()
{
mpuInterrupt = true;
}
DHT DHT(10, DHT11);
void setup()
{
#if I2CDEV_IMPLEMENTATION == I2C_ARDUINO_WIRE
Wire.begin();
Wire.setClock(400000);
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
Serial.begin(115200);
Serial1.begin(115200);
for(int i = 0; i <= 3; i++)
pinMode(IR[i], INPUT);
pinMode(RF1, OUTPUT);
pinMode(RF2, OUTPUT);
pinMode(LF1, OUTPUT);
pinMode(LF2, OUTPUT);
pinMode(RM1, OUTPUT);
pinMode(RM2, OUTPUT);
pinMode(LM1, OUTPUT);
pinMode(LM2, OUTPUT);
pinMode(RB1, OUTPUT);
pinMode(RB2, OUTPUT);
pinMode(LB1, OUTPUT);
pinMode(LB2, OUTPUT);
for(int i = 0; i <= 3; i++)
{
pinMode(powerPins[i], OUTPUT);
pinMode(gndPins[i], OUTPUT);
digitalWrite(powerPins[i], HIGH);
digitalWrite(gndPins[i], LOW);
}
DHT.begin();
Serial.println(F("Initializing I2C devices..."));
MPU.initialize();
pinMode(INTERRUPT_PIN, INPUT);
Serial.println(F("Testing device connections..."));
Serial.println(MPU.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
Serial.println(F("Initializing DMP..."));
devStatus = MPU.dmpInitialize();
MPU.setXGyroOffset(220);
MPU.setYGyroOffset(76);
MPU.setZGyroOffset(-85);
MPU.setZAccelOffset(1788);
if(devStatus == 0)
{
Serial.println(F("Enabling DMP..."));
MPU.setDMPEnabled(true);
Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING);
mpuIntStatus = MPU.getIntStatus();
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
packetSize = MPU.dmpGetFIFOPacketSize();
}
else
{
Serial.print(F("DMP initializing failed (code "));
Serial.print(devStatus);
Serial.println(F(")"));
}
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
if(!dmpReady)
return;
while(!mpuInterrupt && fifoCount < packetSize)
{
}
mpuInterrupt = false;
mpuIntStatus = MPU.getIntStatus();
delay(10);
fifoCount = MPU.getFIFOCount();
delay(10);
if((mpuIntStatus & 0x10) || fifoCount == 1024)
{
MPU.resetFIFO();
Serial.println(F("FIFO overflow!"));
}
else if(mpuIntStatus & 0x02)
{
while(fifoCount < packetSize){
fifoCount = MPU.getFIFOCount();
delay(10);
}
MPU.getFIFOBytes(fifoBuffer, packetSize);
fifoCount -= packetSize;
MPU.dmpGetQuaternion(&q, fifoBuffer);
MPU.dmpGetAccel(&aa, fifoBuffer);
MPU.dmpGetGravity(&gravity, &q);
MPU.dmpGetLinearAccel(&aaReal, &aa, &gravity);
String str = "#@!sep!@#";
str += aaReal.x;
str += " ";
str += aaReal.y;
str += "#@!sep!@#";
str += String(DHT.readTemperature());
str += "#@!sep!@#";
str += String(DHT.readHumidity());
str += "\n";
Serial1.print(str);
Serial.print(str);
teapotPacket[11]++;
blinkState = !blinkState;
digitalWrite(LED_PIN, blinkState);
}
for(int i = 0; i <= 3; i++)
a[i] = digitalRead(IR[i]);
edgeAvoid(a);
}
void edgeAvoid(int a[4])
{
Serial.print("IR Values ");
for(int i = 0; i <= 3; i++)
{
Serial.print(a[i]);
Serial.print('\t');
}
Serial.println("");
if(a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 1)
{
goStraight(100);
}
else if(a[0] == 1 && a[1] == 0 && a[2] == 0 && a[3] == 1)
{
int ct = millis();
while(millis() - ct <= 10)
goBack(100);
while(millis() - ct <= 20)
goRight(100);
}
else if(a[0] == 0 && a[1] == 1 && a[2] == 0 && a[3] == 1)
{
int ct = millis();
while(millis() - ct <= 10)
goBack(100);
while(millis() - ct <= 20)
goLeft(100);
}
else if(a[0] == 1 && a[1] == 1 && a[2] == 0 && a[3] == 1)
{
int ct = millis();
while(millis() - ct <= 10)
goBack(100);
while(millis() - ct <= 20)
goLeft(100);
}
else if(a[0] == 0 && a[1] == 0 && a[2] == 1 && a[3] == 1)
{
int ct = millis();
while(millis() - ct <= 10)
goStraight(100);
while(millis() - ct <= 20)
goLeft(100);
}
else if(a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0)
{
int ct = millis();
while(millis() - ct <= 10)
goStraight(100);
while(millis() - ct <= 20)
goRight(100);
}
else if(a[0] == 0 && a[1] == 0 && a[2] == 1 && a[3] == 0)
{
int ct = millis();
while(millis() - ct <= 10)
goStraight(100);
while(millis() - ct <= 20)
goRight(100);
}
}
void goStraight(int power)
{
Serial.println("Straight");
digitalWrite(RF1, HIGH);
digitalWrite(RF2, LOW);
digitalWrite(LF1, HIGH);
digitalWrite(LF2, LOW);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RB1, HIGH);
digitalWrite(RB2, LOW);
digitalWrite(LB1, HIGH);
digitalWrite(LB2, LOW);
delayMicroseconds(power);
digitalWrite(RF1, LOW);
digitalWrite(LF1, LOW);
digitalWrite(RM1, LOW);
digitalWrite(LM1, LOW);
digitalWrite(RB1, LOW);
digitalWrite(LB1, LOW);
delayMicroseconds(100 - power);
}
void goLeft(int power)
{
Serial.println("Left");
digitalWrite(RF1, HIGH);
digitalWrite(RF2, LOW);
digitalWrite(LF1, LOW);
digitalWrite(LF2, HIGH);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
digitalWrite(LM1, LOW);
digitalWrite(LM2, HIGH);
digitalWrite(RB1, HIGH);
digitalWrite(RB2, LOW);
digitalWrite(LB1, LOW);
digitalWrite(LB2, HIGH);
delayMicroseconds(power0.58);
digitalWrite(RM1, LOW);
digitalWrite(LM2, LOW);
delayMicroseconds(power0.42);
digitalWrite(RF1, LOW);
digitalWrite(RB1, LOW);
digitalWrite(LF2, LOW);
digitalWrite(LB2, LOW);
delayMicroseconds(100 - power);
}
void goRight(int power)
{
Serial.println("Right");
digitalWrite(RF1, LOW);
digitalWrite(RF2, HIGH);
digitalWrite(LF1, HIGH);
digitalWrite(LF2, LOW);
digitalWrite(RM1, LOW);
digitalWrite(RM2, HIGH);
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RB1, LOW);
digitalWrite(RB2, HIGH);
digitalWrite(LB1, HIGH);
digitalWrite(LB2, LOW);
delayMicroseconds(power0.58);
digitalWrite(RM2, LOW);
digitalWrite(LM1, LOW);
delayMicroseconds(power0.42);
digitalWrite(RF2, LOW);
digitalWrite(RB2, LOW);
digitalWrite(LF1, LOW);
digitalWrite(LB1, LOW);
delayMicroseconds(100 - power);
}
void goBack(int power)
{
Serial.println("Back");
digitalWrite(RF1, LOW);
digitalWrite(RF2, HIGH);
digitalWrite(LF1, LOW);
digitalWrite(LF2, HIGH);
digitalWrite(RM1, LOW);
digitalWrite(RM2, HIGH);
digitalWrite(LM1, LOW);
digitalWrite(LM2, HIGH);
digitalWrite(RB1, LOW);
digitalWrite(RB2, HIGH);
digitalWrite(LB1, LOW);
digitalWrite(LB2, HIGH);
delayMicroseconds(power);
digitalWrite(RF2, LOW);
digitalWrite(LF2, LOW);
digitalWrite(RM2, LOW);
digitalWrite(LM2, LOW);
digitalWrite(RB2, LOW);
digitalWrite(LB2, LOW);
delayMicroseconds(100 - power);
}