Mega 2560 hangs up with MOVI in the code.

I have been creating a device to control my car with voice and bluetooth, but I have all my Movi code commented out anytime I uncomment and upload it the code hangs up and my serial console no longer works.
`#include <MOVIShield.h>
#include “Arduino.h”
//Serial Read
const byte numchars = 50;
char character[numchars];
char tempcharacter[numchars]; //used to temporarily store the character array
char pc[numchars] = {0};
boolean newdata = false;
int red;
int green;
int blue;
//compare variables
MOVI camaro(true); //Voice recognition module
//interior RGB lights
#define RedI 2
#define GreenI 3
#define BlueI 4
//exterior RGB lights(UnderBody)
#define RedE 5
#define GreenE 6
#define BlueE 7
//Halo RGB lights
#define RedH 8
#define GreenH 9
#define BlueH 10
//RGB lights Voltage
#define voltage 11
//Arduino Body Control Module
#define Horn 22
#define Headlights 23
#define clutch 24
#define amp 25
#define Accessory 26
#define Ignition 27
#define RUN 28
#define osunroof 29
#define csunroof 30
#define Driver_up 31
#define Driver_down 32
#define Pass_up 33
#define Pass_down 34
#define trunk 35
#define lock 42
#define unlock 43
#define brake 44
#define reset 45
#define outmicrophone 46
#define outspeaker 47
#define rQuit 52
int tdm = 0;
char rgb[][100] = {“Horn”, “Remote Start”, “Headlights”, “Accessory”, “Trunk”, “Open sunroof”, “Close sunroof”,
“Dwindow up”, “Dwindow down”, “Pwindow up”, “Pwindow down”, “Lock”,
“Unlock”, “all lights”, “Fades”, “Strobe”, “Halos”, “Underbody Lights”,
“Interior Lights”
};
int i = 0;
int result = 0;
int red1;
int green1;
int blue1;
int red2;
int green2;
int blue2;
String color;
String ans;
void Reset() {
digitalWrite(reset, HIGH);
Serial.println(“Arduino Resetting”);
delay(200);
digitalWrite(reset, LOW);
}
void string(String n, String p) {
int mtech = n.indexOf§;
}
void allrgbon() {
if (analogRead(voltage) == LOW) {
analogWrite(RedE, 255);
analogWrite(GreenE, 255);
analogWrite(BlueE, 255);
analogWrite(RedI, 255);
analogWrite(GreenI, 255);
analogWrite(BlueI, 255);
analogWrite(RedH, 255);
analogWrite(BlueH, 255);
analogWrite(GreenH, 255);
analogWrite(voltage, 255);
} else {
allrgboff();
}
}
void allrgboff() {
analogWrite(RedE, 0);
analogWrite(GreenE, 0);
analogWrite(BlueE, 0);
analogWrite(RedI, 0);
analogWrite(GreenI, 0);
analogWrite(BlueI, 0);
analogWrite(RedH, 0);
analogWrite(BlueH, 0);
analogWrite(GreenH, 0);
analogWrite(voltage, 0);
}
void unLighton() {
analogWrite(RedE, 255);
analogWrite(GreenE, 255);
analogWrite(BlueE, 255);
}
void inLighton() {
analogWrite(RedI, 255);
analogWrite(GreenI, 255);
analogWrite(BlueI, 255);
}
void HLighton() {
analogWrite(RedH, 255);
analogWrite(BlueH, 255);
analogWrite(GreenH, 255);
}
void BCM(int t) {
switch (t) {
//Case for horn
case 0:
Horns();
break;
//Case for remote start
case 1:
Remote_start();
break;
//Case for Headlights
case 2:
Headlight();
break;
//Case for accessory power
case 3:
Accessory_power();
break;
//case for Trunk
case 6:
Trunk();
break;
//Case for open Sun roof
case 7:
Sunroofopen();
break;
//Case for close sun roof
case 8:
Sunroofclose();
break;
//Case for open driver window
case 9:
Driver_windowup();
break;
//Case for down Driver Window
case 10:
Driver_windowdown();
break;
//Case to up passenger window
case 11:
Passenger_windowup();
break;
//Case to down passenger window
case 12:
Passenger_windowdown();
break;
//Case to lock doors
case 13:
Lock_doors();
break;
//Case to unlock doors
case 14:
Unlock_Doors();
break;
case 15:
allrgbon();
break;
case 16:
//fades();
break;
case 17:
strobe();
break;
case 18:
SetHalo(red, green, blue);
break;
case 19:
red = red1;
green = green1;
blue = blue1;
SetExterior(red1, green1, blue1);
break;
case 20:
red = red2;
green = green2;
blue = blue2;
SetInterior(red2, green2, blue2);
break;

}
}
void SetHalo(int r, int g, int b) {
r = constrain(r, 0, 255);
g = constrain(g, 0, 255);
b = constrain(b, 0, 255);
analogWrite(RedH, r);
analogWrite(GreenH, g);
analogWrite(BlueH, b);
}
void SetExterior(int r, int g, int b) {
r = constrain(r, 0, 255);
g = constrain(g, 0, 255);
b = constrain(b, 0, 255);
analogWrite(RedE, r);
analogWrite(GreenE, g);
analogWrite(BlueE, b);
}
void SetInterior(int r, int g, int b) {
r = constrain(r, 0, 255);
g = constrain(g, 0, 255);
b = constrain(b, 0, 255);
analogWrite(RedI, r);
analogWrite(GreenI, g);
analogWrite(BlueI, b);
}
void strobe() {
if (digitalRead(voltage) == 255) {
allrgboff();
} else {
int time = 1000;
int s = 1;
analogWrite(voltage, 255);
while (s == 1) {
int red_ran = random(255);
int blue_ran = random(255);
int green_ran = random(255);
analogWrite(RedE, red_ran), analogWrite(BlueE, blue_ran), analogWrite(
GreenE, green_ran), analogWrite(RedH, red_ran), analogWrite(
BlueH, blue_ran), analogWrite(GreenH, green_ran), analogWrite(
RedI, red_ran), analogWrite(BlueI, blue_ran), analogWrite(
GreenI, green_ran), delay(time);
}
}
}
void Remote_start() {
if (digitalRead(RUN) == LOW) {
digitalWrite(clutch, LOW);
digitalWrite(Accessory, HIGH);
digitalWrite(RUN, HIGH);
delay(3000);
digitalWrite(Accessory, LOW);
digitalWrite(RUN, LOW);
delay(500);
digitalWrite(Ignition, LOW);
delay(500);
digitalWrite(clutch, HIGH);
digitalWrite(Ignition, HIGH);
digitalWrite(rQuit, HIGH);
if (digitalRead(brake) == HIGH) {
digitalWrite(RUN, HIGH);
digitalWrite(Accessory, HIGH);
digitalWrite(rQuit, LOW);
}
}
}
void Turn_off() {
digitalWrite(RUN, HIGH);
digitalWrite(Accessory, HIGH);
}
void Police_Mode() {
int R;
int B;
int G;
int flash = 200;
int t = 1;
while (t == 1) {
analogWrite(RedE, 0);
analogWrite(GreenE, 0);
analogWrite(BlueE, 255);
delay(flash);
analogWrite(RedE, 255);
analogWrite(GreenE, 0);
analogWrite(BlueE, 0);
}
}
void Sync_RGBE(unsigned int red, unsigned int green, unsigned int blue) {
analogWrite(RedE, red);
analogWrite(GreenE, green);
analogWrite(BlueE, blue);
}
void Sync_RGBI(unsigned int red, unsigned int green, unsigned int blue) {
analogWrite(RedI, red);
analogWrite(GreenI, green);
analogWrite(BlueI, blue);
}
void Sync_RGBH(unsigned int red, unsigned int green, unsigned int blue) {
analogWrite(RedH, red);
analogWrite(GreenH, green);
analogWrite(BlueH, blue);
}
void flashRGB() {
analogWrite(RedE, 255);
analogWrite(GreenE, 255);
analogWrite(BlueE, 255);
analogWrite(RedH, 255);
analogWrite(GreenE, 255);
analogWrite(BlueE, 255);
delay(500);
analogWrite(RedE, 0);
analogWrite(GreenE, 0);
analogWrite(BlueE, 0);
analogWrite(RedH, 0);
analogWrite(GreenE, 0);
analogWrite(BlueE, 0);
}
//Relay commands
void Lock_doors() {
allrgbon();
allwindowsup();
delay(500);
allrgboff();
flashRGB();
}
void Trunk() {
digitalWrite(trunk, LOW);
}
void Unlock_Doors() {
digitalWrite(unlock, LOW);
allrgbon();
delay(500);
digitalWrite(unlock, HIGH);
delay(9500);
allrgboff();
}
void Sunroofopen() {
digitalWrite(osunroof, LOW);
delay(500);
digitalWrite(osunroof, HIGH);
}
void Sunroofclose() {
digitalWrite(csunroof, LOW);
delay(500);
digitalWrite(csunroof, HIGH);
}
void Driver_windowup() {
digitalWrite(Driver_up, LOW);
delay(6000);
digitalWrite(Driver_up, HIGH);
}
void Passenger_windowup() {
digitalWrite(Pass_up, LOW);
delay(6000);
digitalWrite(Pass_up, HIGH);
}
void Driver_windowdown() {
digitalWrite(Driver_down, LOW);
delay(6000);
digitalWrite(Driver_down, HIGH);
}
void Passenger_windowdown() {
digitalWrite(Pass_down, LOW);
delay(6000);
digitalWrite(Pass_down, HIGH);

}
void allwindowsup() {
digitalWrite(Driver_up, LOW);
digitalWrite(Pass_up, LOW);
delay(6000);
digitalWrite(Driver_up, HIGH);
digitalWrite(Pass_up, HIGH);
}
void Accessory_power() {
if (digitalRead(Accessory) == HIGH) {
digitalWrite(Accessory, LOW);
} else {
digitalWrite(Accessory, HIGH);
}
}
void Headlight() {
if (digitalRead(Headlights) == HIGH) {
digitalWrite(Headlights, LOW);
Serial.print(“Headlights On”);
} else {
digitalWrite(Headlights, HIGH);
Serial.print(“Headlights Off”);
}
}
void Horns() {
Serial.print(“Horn Played”);
digitalWrite(Horn, LOW);
delay(1000);
digitalWrite(Horn, HIGH);
}
void Halos_off() {
analogWrite(RedH, 0);
analogWrite(GreenH, 0);
analogWrite(BlueH, 0);
}
void Interior_off() {
analogWrite(RedI, 0);
analogWrite(GreenI, 0);
analogWrite(BlueI, 0);
}
void underbody_off() {
analogWrite(RedE, 0);
analogWrite(GreenE, 0);
analogWrite(BlueE, 0);
}
void choice(String s) {
if (s.equalsIgnoreCase(“Blue”)) {

} else if (s.equalsIgnoreCase(“Red”)) {

} else if (s.equalsIgnoreCase(“Green”)) {

} else if (s.equalsIgnoreCase(“Purple”)) {

} else if (s.equalsIgnoreCase(“Yellow”)) {

} else if (s.equalsIgnoreCase(“Orange”)) {

} else if (s.equalsIgnoreCase(“Teal”)) {

} else if (s.equalsIgnoreCase(“Pink”)) {

} else if (s.equalsIgnoreCase(“Strobe”)) {

}
}
void Voice(int s) {
switch (s) {
case 1:
Remote_start();
break;
case 2:
Turn_off();
break;
case 3:
Trunk();
break;
case 4:
Unlock_Doors();
break;
case 5:
Lock_doors();
break;
case 6:
Sunroofopen();
break;
case 7:
Sunroofclose();
break;
case 8:
Driver_windowdown();
break;
case 9:
Driver_windowup();
break;
case 10:
Passenger_windowdown();
break;
case 11:
Passenger_windowup();
break;
case 12:
allwindowsup();
break;
case 13:
Accessory_power();
break;
case 14:
Accessory_power();
break;
case 15:
Headlight();
break;
case 16:
Headlight();
break;
case 17:
Horns();
break;
case 18:
Police_Mode();
break;
case 19:
allrgboff();
break;
case 20:
allrgbon();
break;
case 21:
Reset();
break;
case 22:
camaro.ask(“What color?”);
color = camaro.getResult();
choice(color);
break;
case 23:
Halos_off();
break;
case 24:
camaro.ask(“What color?”);
color = camaro.getResult();
choice(color);
break;
case 25:
Interior_off();
break;
case 26:
camaro.ask(“What color?”);
color = camaro.getResult();
choice(color);
break;
case 27:
underbody_off();
color = camaro.getResult();
break;
case 28:
camaro.ask(“Can I still listen outside?”);
ans = camaro.getResult();
if (ans.equalsIgnoreCase(“No”)) {
digitalWrite(outmicrophone, HIGH);
digitalWrite(outspeaker, HIGH);
}
break;
case 29:
digitalWrite(outmicrophone, LOW);
digitalWrite(outspeaker, LOW);
}
}
void setup() {
// put your setup code here, to run once:
camaro.init();
// camaro.callSign(“Camaro”);
// camaro.addSentence(“Kakeru”); //1
// camaro.addSentence(“Kesu”); //2
// camaro.addSentence(“Open the Trunk”); //3
// camaro.addSentence(“Unlock the doors”); //4
// camaro.addSentence(“Lock the doors”); //5
// camaro.addSentence(“Open the Sun roof”); //6
// camaro.addSentence(“Close the Sun roof”); //7
// camaro.addSentence(“Open the driver window”); //8
// camaro.addSentence(“Close the driver window”); //9
// camaro.addSentence(“Open the passenger window”); //10
// camaro.addSentence(“Close the passenger window”); //11
// camaro.addSentence(“Close all the Windows”); //12
// camaro.addSentence(“Turn on the Accessory Power”); //13
// camaro.addSentence(“Turn off the Accessory Power”); //14
// camaro.addSentence(“Turn on the Head lights”); //15
// camaro.addSentence(“Turn off the Head lights”); //16
// camaro.addSentence(“Beep”); //17
// camaro.addSentence(“Police Mode”); //18
// camaro.addSentence(“Turn off all Lights”); //19
// camaro.addSentence(“Turn on all the lights”); //20
// camaro.addSentence(“Reset”); //21
// camaro.addSentence(“Turn on Halos”); //22
// camaro.addSentence(“Turn off Halos”); //23
// camaro.addSentence(“Turn on Demon Eyes”); //24
// camaro.addSentence(“Turn off Demon Eyes”); //25
// camaro.addSentence(“Turn on Under body lights”); //26
// camaro.addSentence(“Turn off Under body lights”); //27
// camaro.addSentence(“Use your inside voice”); //28
// camaro.addSentence(“Use your outside voice”); //29
// camaro.train();
//play voice
pinMode(Horn, OUTPUT);
pinMode(Headlights, OUTPUT);
pinMode(RedE, OUTPUT);
pinMode(GreenE, OUTPUT);
pinMode(BlueE, OUTPUT);
pinMode(RedI, OUTPUT);
pinMode(GreenI, OUTPUT);
pinMode(BlueI, OUTPUT);
pinMode(Accessory, OUTPUT);
pinMode(Ignition, OUTPUT);
pinMode(RedH, OUTPUT);
pinMode(GreenH, OUTPUT);
pinMode(BlueH, OUTPUT);
pinMode(RUN, OUTPUT);
pinMode(clutch, OUTPUT);
pinMode(osunroof, OUTPUT);
pinMode(csunroof, OUTPUT);
pinMode(amp, OUTPUT);
pinMode(Driver_up, OUTPUT);
pinMode(Driver_down, OUTPUT);
pinMode(Pass_up, OUTPUT);
pinMode(Pass_down, OUTPUT);
pinMode(trunk, OUTPUT);
pinMode(lock, OUTPUT);
pinMode(unlock, OUTPUT);
pinMode(reset, OUTPUT);
pinMode(brake, INPUT);
pinMode(rQuit, OUTPUT);
digitalWrite(Horn, HIGH);
digitalWrite(Headlights, HIGH);
digitalWrite(amp, HIGH);
digitalWrite(Accessory, HIGH);
digitalWrite(Ignition, HIGH);
digitalWrite(RUN, HIGH);
digitalWrite(osunroof, HIGH);
digitalWrite(csunroof, HIGH);
digitalWrite(Driver_up, HIGH);
digitalWrite(Driver_down, HIGH);
digitalWrite(Pass_up, HIGH);
digitalWrite(Pass_down, HIGH);
digitalWrite(trunk, HIGH);
digitalWrite(lock, HIGH);
digitalWrite(unlock, HIGH);
digitalWrite(outmicrophone, HIGH);
digitalWrite(outspeaker, HIGH);
digitalWrite(rQuit, LOW);
Serial.begin(9600); //bluetooth module
Serial.println(“Arduino is Ready”);
}
void loop() {
// put your main code here, to run repeatedly:
//signed int voice = camaro.poll();
operation_bluetooth();
compare();
if (newdata == true) {
strcpy(tempcharacter, character);// this copies the data from character to a temporary array to keep Character
parsedata();
show_parsedata();
for (i = 0; i < 19; i++) {
Serial.println(rgb[i]);
Serial.println(character);
int result = strcmp(pc, rgb[i]);
if (result == 0) {
BCM(i);
break;
} else {
Serial.println(“String’s don’t match”);
}
}
newdata = false;
}//else if (voice > 0) {
// Voice(voice);
// }
}
//Methods to handle Serial data
void operation_bluetooth() {
char cn; //character being received right now
static int t = 0; //counter for Serial character array
char startercharacter = ‘A’;//Tells Arduino when characters are being received
char endcharacter = ‘Z’; //Tells Arduino when the characters are done being received
static boolean serialinprogress = false;// Check if Arduino is receiving characters
while (Serial.available() > 0 && newdata == false) {
cn = Serial.read();
if (serialinprogress == true) {
if (cn != endcharacter) {
character[t] = cn;
t++;
}
else {
character[t] = ‘\0’; // terminate the string
serialinprogress = false;
t = 0;
newdata = true;
}
} else if (cn == startercharacter) {
serialinprogress = true;
}
}

}
void compare() {
if (newdata == true) {
Serial.println(character);
//newdata = false;
}
}
void parsedata() { //Splits the data
char * index; //used by strtok() as index strtok splits strings into tokens
//first iteration
index = strtok(tempcharacter, “,”); //gets the first part - the charcter array
strcpy(pc, index); //copy it to the array pc
//second iteration
index = strtok(NULL, “,”);
red = atoi(index); // converts first number to red rgb controller
//third iteration
index = strtok(NULL, “,”);
green = atoi(index); // converts first number to green rgb controller
//fourth iteration
index = strtok(NULL, “,”);
blue = atoi(index); // converts first number to blue rgb controller
}
void show_parsedata() {
Serial.print(“String:”);
Serial.println(pc);
Serial.print(“Red:”);
Serial.println(red);
Serial.print(“Green:”);
Serial.println(green);
Serial.print(“Blue:”);
Serial.println(blue);
}
`
Can anyone help me figure out what’s wrong with my Movi code.

Hi Trivone,

Tried to compile your code, but there were a lot of odd characters in there (non-standard " and '), fixed that and still ran into problems.

LOTS of code there, what might be a good idea is to make a test version VERY stripped out with only a couple functions that you want to do. Once you have that worked out, you can add to it.

I’ve had to do that here (app ~= 1300 lines), I keep a working back version just in case I run into problems. That way when I implement the latest bit of genius :slight_smile: I come up with and it blows up, I know where the problems lay and I can revert to a known working version and try again.

Don’t know what the odd characters were all about or what your dev system is, but it might work better to use the code tag (blockquote or preformatted text here?). Then again it could be on my end.

Hope this helps! V.

Edit: Just in case it is important, running Arduino 1.8.5 under linux and just moved on from a Mega2560 to a Due as my data alone was just too much for the 2560.

1 Like

Thanks for the advice. I’ve tried using a stripped code with out the Movi code and it runs all fine. I’ll try playing around with the code and update you on what the problem truly is.

1 Like