MKR1000 freeze with servo objects

Hi, I made a simple sketch to control a servo using wifi, and the board freeze with servo objects creation, anyone can help me?

Thanks.

#include <SPI.h>
#include <WiFi101.h>
#include <WiFiUdp.h>
#include <Servo.h>

Servo servox;  // crea un objeto servo para x
Servo servoy;  // crea un objeto servo para y

int status = WL_IDLE_STATUS;
char ssid[] = "MiFibra-2F43"; //  El nombre de tu red wifi
char pass[] = "qz4x3a7p";    // la clave de tu red wifi

unsigned int localPort = 1500; // numero del puerto de la placa para recibir mensajes

char packetBuffer[20]; // buffer para guardar el paquete de datos entrantes
char convBuffer[4];// bufer para extraer cada dato de entrada
char msg[20];  //bufer de datos de salida 

WiFiUDP Udp;  //nombre de la instancia

void setup() {
  //servox.attach(2);  // asocia el servo en el pin D2 al objeto servo
  //servoy.attach(3);  // asocia el servo en el pin D3 al objeto servo
  
  //Inicia el puerto serial y espera hasta que se complete:
  Serial.begin(9600);
  while (!Serial) {
    ; // espera la conexion del puerto serie. Solo es necesario para placas con puerto USB nativo
      // Remover este while si la placa no estara conectada al ordenador
  }
  // revision de la presencia del shield de comunicación:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("El shield WiFi no esta presente");
    // no continua:
    while (true);
  }
  if (status != WiFi.status()) {
    status = WiFi.status();}  // actualiza la variable
    
  // intenta conectar a la red wifi:
  while ( status != WL_CONNECTED) {
    Serial.print("Conectando a SSID: ");
    Serial.println(ssid);
    // Conecta a una red WPA/WPA2:
    status = WiFi.begin(ssid, pass);
    // espera 10 segundos por la coneccion:
    delay(10000);
  }
  Serial.println("Conectado a wifi");
  printWiFiStatus();
  
  Udp.begin(localPort); // Inicia el socket WiFiUDP, y escucha el puerto local
}

void loop() {

  // recepcion de datos - recibira un paquete de 8
  // caracteres con los valores de "x" y "y" del joystick       
  int packetSize = Udp.parsePacket(); // pregunto si hay paquetes de datos por leer
  if (packetSize)
  {
    Serial.print("Tamaño del paquete recibido ");
    Serial.println(packetSize);
    Serial.print("De ");
    IPAddress remoteIp = Udp.remoteIP();
    Serial.print(remoteIp);
    Serial.print(", puerto ");
    Serial.println(Udp.remotePort());

    // lee el paquete y lo guarda en el buffer
    int len = Udp.read(packetBuffer, 20);  //lee el paquete y lo guarda en el buffer
    if (len > 0) packetBuffer[len] = 0;  // coloca el caracter null al final de la cadena
    Serial.print("Contents:");
    Serial.println(packetBuffer); // imprime el contenido del paquete de datos
    
    convBuffer[0]=packetBuffer[0];
    convBuffer[1]=packetBuffer[1];
    convBuffer[2]=packetBuffer[2];
    convBuffer[3]=packetBuffer[3];
    convBuffer[4]=0;  //  coloca el caracter null al final de la cadena
    int valServox=atoi(convBuffer); //convierte la cadena de caracteres a entero
    
    convBuffer[0]=packetBuffer[4];
    convBuffer[1]=packetBuffer[5];
    convBuffer[2]=packetBuffer[6];
    convBuffer[3]=packetBuffer[7];
    convBuffer[4]=0;  //  coloca el caracter null al final de la cadena
    int valServoy=atoi(convBuffer); //convierte la cadena de caracteres a entero
    
    // muestra los valores recibidos
    Serial.print("El valor extraido de X es:");
    Serial.println(valServox);
    Serial.print("El valor extraido de Y es:");
    Serial.println(valServoy);

    // proceso los datos y los envio a los servos
    valServox = map(valServox, 0, 1023, 0, 180);  // escalo los datos de 0 a 180
    servox.write(valServox);  // posiciono el servo de acuerdo al valor recibido
    valServoy = map(valServoy, 0, 1023, 0, 180);  // escalo los datos de 0 a 180
    servoy.write(valServoy);  // posiciono el servo de acuerdo al valor recibido

    //envio la temeratura de respuesta 
    int temp = analogRead(A1); //leo el sensor de temperatura
    sprintf(msg, "%i", temp); // Crea una cadena de texto con el valor
    Serial.print("El valor de temperatura enviado es: "); //Imprimo la cadena de texto al monitor serie
    Serial.println(msg); //Imprimo la cadena de texto al monitor serie
    
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); //configura el envio del paquete de datos
    Udp.write(msg); //coloca en el buffer los datos de salida
    Udp.endPacket(); //envia el paquete de datos
   }
}

  void printWiFiStatus() {
  // imprime el nombre de la red a la cual estas conectado:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // imprime la direcion IP del shield o placa con la cual estas conectado:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // imprime la intensidad de señal recibida:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

WiFiUdp_joistick_RX_servo.ino (4.69 KB)

Start by removing the “while serial” command.

Not really needed anymore.
Even less so if you want to run it in stand alone mode.