MKRZero Serial communication

So I am trying to send a serial command from my computer to my MKRZero.
i have C# code written which opens the COM port sends a ''1" then the MKRZero should move a servo and bring a pin high.
I think there must be something wrong with my Setup() or its my C# code
i have read something about Serial1 being used, but I'm not sure if that applies here or how to use it.
This program ran great on an Arduino UNO

Arduino Code:

#include <Servo.h>
#define BIGSERVOSW 5
#define EXTRASERVOSW 4
#define ROCK1 2
#define ROCK2 3

#define ROCKETFIRE1 12
#define ROCKETFIRE2 11

#define LED 10

Servo DoorServo;
Servo servo2;
Servo servo3;

char c;
String cmd = "";
void setup() {
  // put your setup code here, to run once:
pinMode(BIGSERVOSW, INPUT);
pinMode(EXTRASERVOSW, INPUT);
pinMode(ROCK1, INPUT);
pinMode(ROCK2, INPUT);
pinMode(ROCKETFIRE1, OUTPUT);
pinMode(ROCKETFIRE2, OUTPUT);
pinMode(LED,OUTPUT);
DoorServo.attach(7);
servo2.attach(6);
servo3.attach(9);
// LETS PULL UP THE INPUTS
digitalWrite(BIGSERVOSW, HIGH); 
digitalWrite(EXTRASERVOSW, HIGH); 
digitalWrite(ROCK1, HIGH); 
digitalWrite(ROCK2, HIGH); 
DoorServo.write(0);
servo2.write(0);
servo3.write(0);
Serial.begin(115200);
  while (!Serial){;} 
    
digitalWrite(ROCKETFIRE1, LOW);  //get back to default 
digitalWrite(ROCKETFIRE2, LOW);  //get back to default 
digitalWrite(LED, LOW); 
}

void loop() {
  // put your main code here, to run repeatedly:
getSerial();
// Check for bigservo switch
if ( digitalRead(BIGSERVOSW) == LOW || cmd == "5")
{ 
  /* according to "Then a Separate servo with its own button when pressed
moves a Large servo 120 degrees then returns when you let of the button" */
  servo2.write(0);     //bring servo back to 0
  servo2.write(120);
  delay(500);
  Serial.println(" BIGSERVO 120deg arrived " );
  servo2.write(0);     //bring servo back to 0
  delay(500);     //for debounce
}

else if ( digitalRead(ROCK1) == LOW || cmd == "1")
{
  Serial.println(" ROCK1 pressed" );
  DoorServo.write(95);  // open the door for 95 deg
  
  while( DoorServo.read() != 95)  //do nothing till servo come to 95
  {}
  delay(1000);         // dealy for 1 sec
  digitalWrite(ROCKETFIRE1, HIGH);  //fire the rocket 1 
  delay(2000);          //delay for 2 sec
  digitalWrite(ROCKETFIRE1, LOW);  //get back to default 
  delay(1000); 
  DoorServo.write(0);  // close the door again 0deg
  while( DoorServo.read() != 0)  //do nothing till servo come to 0
  {}
  Serial.println(" Door closed" );
  delay(500);    //for debounce
  cmd = "";
}

C#

static void Main(string[] args)
        {
            SerialPort myport;
            myport = new SerialPort();
            myport.BaudRate = 115200;
            myport.PortName = "COM10";
            myport.Open();
            myport.WriteLine("1");
            myport.Close();
        }

Thanks for your help!

Also it does work when I send the command "1" with the serial monitor

On most Arduinos, opening the serial port resets the Arduino. Is that true on the Zero?

Typically, the C# app should open the port ONCE, and close the port when the app ends.

Your posted code will not compile. All the problems would appear to be in the getSerial() function that you failed to post.

there is 2 getSerial(). one after void loop and one at the end under void

#include <Servo.h>
#define BIGSERVOSW 5
#define EXTRASERVOSW 4
#define ROCK1 2
#define ROCK2 3

#define ROCKETFIRE1 12
#define ROCKETFIRE2 11

#define LED 10

Servo DoorServo;
Servo servo2;
Servo servo3;

char c;
String cmd = "";
void setup() {
  // put your setup code here, to run once:
pinMode(BIGSERVOSW, INPUT);
pinMode(EXTRASERVOSW, INPUT);
pinMode(ROCK1, INPUT);
pinMode(ROCK2, INPUT);
pinMode(ROCKETFIRE1, OUTPUT);
pinMode(ROCKETFIRE2, OUTPUT);
pinMode(LED,OUTPUT);
DoorServo.attach(7);
servo2.attach(6);
servo3.attach(9);
// LETS PULL UP THE INPUTS
digitalWrite(BIGSERVOSW, HIGH); 
digitalWrite(EXTRASERVOSW, HIGH); 
digitalWrite(ROCK1, HIGH); 
digitalWrite(ROCK2, HIGH); 
DoorServo.write(0);
servo2.write(0);
servo3.write(0);
Serial.begin(115200);
  while (!Serial){;} 
    
digitalWrite(ROCKETFIRE1, LOW);  //get back to default 
digitalWrite(ROCKETFIRE2, LOW);  //get back to default 
digitalWrite(LED, LOW); 
}

void loop() {
  // put your main code here, to run repeatedly:
getSerial();
// Check for bigservo switch
if ( digitalRead(BIGSERVOSW) == LOW || cmd == "5")
{ 
  /* according to "Then a Separate servo with its own button when pressed
moves a Large servo 120 degrees then returns when you let of the button" */
  servo2.write(0);     //bring servo back to 0
  servo2.write(120);
  delay(500);
  Serial.println(" BIGSERVO 120deg arrived " );
  servo2.write(0);     //bring servo back to 0
  delay(500);     //for debounce
}

else if ( digitalRead(ROCK1) == LOW || cmd == "1")
{
  Serial.println(" ROCK1 pressed" );
  DoorServo.write(95);  // open the door for 95 deg
  
  while( DoorServo.read() != 95)  //do nothing till servo come to 95
  {}
  delay(1000);         // dealy for 1 sec
  digitalWrite(ROCKETFIRE1, HIGH);  //fire the rocket 1 
  delay(2000);          //delay for 2 sec
  digitalWrite(ROCKETFIRE1, LOW);  //get back to default 
  delay(1000); 
  DoorServo.write(0);  // close the door again 0deg
  while( DoorServo.read() != 0)  //do nothing till servo come to 0
  {}
  Serial.println(" Door closed" );
  delay(500);    //for debounce
  cmd = "";
}

}
void getSerial(){
  cmd = "";
  if(Serial.available()>0){
  cmd = "";
  c = Serial.read();
  cmd = c;
  while(Serial.available()>0){
    cmd.concat((char)Serial.read());
  }
}
}

Your indenting
sucks big
time.

Use Tools + Auto Format before posting code here, if you are too lazy to keep the code properly indented as you enter it.

Have you fixed the broken C# app?

the code works on my UNO, so the c# program is fine. unless the mkrzero if setup different. that's what I need to know. what do I need to change to make the mkrzero work?

here is my whole program indented better for you

#include <Servo.h>
#define BIGSERVOSW 5
#define EXTRASERVOSW 4
#define ROCK1 2
#define ROCK2 3

#define ROCKETFIRE1 12
#define ROCKETFIRE2 11

#define LED 10

Servo DoorServo;
Servo servo2;
Servo servo3;

char c;
String cmd = "";
void setup() {
  // put your setup code here, to run once:
  pinMode(BIGSERVOSW, INPUT);
  pinMode(EXTRASERVOSW, INPUT);
  pinMode(ROCK1, INPUT);
  pinMode(ROCK2, INPUT);
  pinMode(ROCKETFIRE1, OUTPUT);
  pinMode(ROCKETFIRE2, OUTPUT);
  pinMode(LED, OUTPUT);
  DoorServo.attach(7);
  servo2.attach(6);
  servo3.attach(9);

  // LETS PULL UP THE INPUTS
  digitalWrite(BIGSERVOSW, HIGH);
  digitalWrite(EXTRASERVOSW, HIGH);
  digitalWrite(ROCK1, HIGH);
  digitalWrite(ROCK2, HIGH);
  DoorServo.write(0);
  servo2.write(0);
  servo3.write(0);

  Serial.begin(115200);
  while (!Serial);

  digitalWrite(ROCKETFIRE1, LOW);  //get back to default
  digitalWrite(ROCKETFIRE2, LOW);  //get back to default
  digitalWrite(LED, LOW);
}

void loop() {
  // put your main code here, to run repeatedly

  getSerial();
  // Check for bigservo switch
  if ( digitalRead(BIGSERVOSW) == LOW || cmd == "5")
  {
    /* according to "Then a Separate servo with its own button when pressed
      moves a Large servo 120 degrees then returns when you let of the button" */
    servo2.write(0);     //bring servo back to 0
    servo2.write(120);
    delay(500);
    Serial.println(" BIGSERVO 120deg arrived " );
    servo2.write(0);     //bring servo back to 0
    delay(500);     //for debounce
  }

  else if ( digitalRead(ROCK1) == LOW || cmd == "1")
  {
    Serial.println(" ROCK1 pressed" );
    DoorServo.write(95);  // open the door for 95 deg

    while ( DoorServo.read() != 95) //do nothing till servo come to 95
    {}
    delay(1000);         // dealy for 1 sec
    digitalWrite(ROCKETFIRE1, HIGH);  //fire the rocket 1
    delay(2000);          //delay for 2 sec
    digitalWrite(ROCKETFIRE1, LOW);  //get back to default
    delay(1000);
    DoorServo.write(0);  // close the door again 0deg
    while ( DoorServo.read() != 0) //do nothing till servo come to 0
    {}
    Serial.println(" Door closed" );
    delay(500);    //for debounce
    cmd = "";
  }

  else if ( digitalRead(ROCK2) == LOW || cmd == "2" )
  {
    Serial.println(" ROCK2 pressed" );
    DoorServo.write(95);  // open the door for 95 deg
    Serial.println(" Door opened" );
    while ( DoorServo.read() != 95) //do nothing till servo come to 95
    {}
    delay(1000);         // dealy for 1 sec
    digitalWrite(ROCKETFIRE2, HIGH);  //fire the rocket 1
    delay(2000);          //delay for 2 sec
    digitalWrite(ROCKETFIRE2, LOW);  //get back to default
    delay(1000);
    DoorServo.write(0);  // close the door again 0deg
    while ( DoorServo.read() != 0) //do nothing till servo come to 0
    {}
    Serial.println(" Door closed" );
    delay(500);    //for debounce
    cmd = "";
  }
  else if ( digitalRead(EXTRASERVOSW) == LOW || cmd == "3")
  {
    servo3.write(0);     //bring servo back to 0
    servo3.write(120);
    delay(500);
    Serial.println(" ExtraServo 120deg arrived " );
    servo3.write(0);     //bring servo back to 0
    delay(500);     //for debounce
  }

  if ( digitalRead(LED) == HIGH || cmd == "6" )
  {
    digitalWrite(LED, HIGH);
  }

  if ( digitalRead(LED) == LOW || cmd == "8" )
  {
    digitalWrite(LED, LOW);
  }

  if (digitalRead(ROCKETFIRE1) == HIGH || cmd == "7" ) //THIS IS THE FULL ASSAULT PROGRAM FIRING A LOT OF WEAPONS. VOICE ONLY.
  {
    DoorServo.write(95);  // open the door for 95 deg
    Serial.println(" Door opened" );
    while ( DoorServo.read() != 95) //do nothing till servo come to 95
    {}
    delay(1000);         // dealy for 1 sec
    digitalWrite(ROCKETFIRE1, HIGH);  //fire the rocket 1
    delay(1000);         // dealy for 1 sec
    digitalWrite(ROCKETFIRE2, HIGH);  //fire the rocket 2
    delay(1500);     //delay for 2 sec
    digitalWrite(ROCKETFIRE1, LOW);
    digitalWrite(ROCKETFIRE2, LOW);  // get back to default
    delay(2000);
    DoorServo.write(0);  // close the door again 0deg
    while ( DoorServo.read() != 0) //do nothing till servo come to 0
    {}
    Serial.println(" Door closed" );
    delay(500);    //for debounce
    cmd = "";
  }

}

void getSerial() {
  cmd = "";
  if (Serial.available() > 0) {
    cmd = "";
    c = Serial.read();
    cmd = c;
    while (Serial.available() > 0) {
      cmd.concat((char)Serial.read());
    }
  }
}

the code works on my UNO, so the c# program is fine.

Have you modified the UNO to not reset when the serial port is opened?

Changed nothing on the UNO.

Sent the program and bam it works. C# works and arduino UNO works

again the MKRZero program works when i Send a 1 via Serial moniter, just not when i send it with my C# code.

But my c# code works with the UNO just fine.

There is something different with the MKRZero that needs to be figured out.