leonardo & puertoserie/USB

Hola muy buenos dias, tengo un problema a ver si me podria ayudar, tengo un leonardo conectado a un potenciometro en la entrada A0 y quiero leer ese dato mediante Visual Studio con el lenguaje C. El probema es cuando escribo en el puerto serie que lo quiero leer y me peta, es porque cuando el leonardo detecta que otro quiere utilizar el COM se detiene.

Codigo Arduino:

#include

byte v;

void setup()
{
Serial.begin(9600);
while (!Serial);
pinMode(13, OUTPUT);
}

void loop()
{

int rx;

if (Serial.available() > 0)
{
rx = Serial.read();
if (rx == ‘H’) digitalWrite (13, HIGH);
else if (rx == ‘L’) digitalWrite (13, LOW);
}

if (v != analogRead(A0) / 4)
{
v = analogRead(A0) / 4;
Serial.write(v);
}

}

Codigo C(VB):

using System;
using System.IO.Ports;
using System.Threading;

namespace CSharpArduino
{
class Program
{

private static void Encabezado()
{
Console.WriteLine(“————————————–”);
Console.WriteLine(“C# + Arduino usando el System.IO.Ports”);
Console.WriteLine(“————————————–”);
Console.WriteLine(“Guillem Mestre Segui”);
Console.WriteLine(“————————————–”);
}

private static void Pie()
{
Console.WriteLine(“————————————–”);
Console.WriteLine(“COM: ” + puertoArduino);
Console.WriteLine(“LED: ” + LED);
Console.WriteLine(“————————————–”);
}

private static void EsperarParaContinuar()
{

Console.WriteLine(“————————————–”);
Console.WriteLine(“Espere …”);
Console.WriteLine(“————————————–”);

Thread.Sleep(2000);

}

private static void Menu()
{
Encabezado();
Console.WriteLine(“|L| Listar puertos COM disponibles”);
Console.WriteLine(“|S| Setear puerto COM del Arduino”);
Console.WriteLine(“|E| Encender/Apagar LED”);
Console.WriteLine(“|P| Leer POT”);
Console.WriteLine(“|Q| Salir”);
Pie();
}

private static void ListarPuertos()
{
Console.Clear();

Encabezado();

string[] v = SerialPort.GetPortNames();
Array.Sort(v);

foreach (string s in v)
{
Console.WriteLine(s);
}

EsperarParaContinuar();

}

private static byte puertoArduino = 0;

private static void SetearPuertoArduino()
{

Console.Clear();

Encabezado();

Console.WriteLine(“Indicar solo el número de puerto COM”);
Console.WriteLine(“al que se encuentra conectado la placa”);
Console.WriteLine(“————————————–”);
Console.Write(“Número de puerto: “);

try
{

Console.CursorVisible = true;
puertoArduino = byte.Parse(Console.ReadLine());
Console.CursorVisible = false;

if (
Array.Find(
SerialPort.GetPortNames(),
s => s.Equals(“COM” + puertoArduino)
) == null
) throw new Exception();

Console.WriteLine(“Puerto ” + puertoArduino + ” seteado”);

}
catch (Exception)
{
Console.WriteLine(“(!) Puerto incorrecto”);
puertoArduino = 0;
}

EsperarParaContinuar();

}

private static bool LED = false;

private static void EncenderLED()
{

using (SerialPort sp = new SerialPort(“COM” + puertoArduino, 9600))
{

sp.Open();

sp.Write(LED ? “L” : “H”);

sp.Close();

}

LED = !LED;

}

private static void LeerPOT()
{

Console.Clear();
Console.WriteLine(“————————————–”);
Console.WriteLine(“POT: 0?);
Console.WriteLine(“————————————–”);
Console.WriteLine(“Presione una tecla para regresar …”);
Console.WriteLine(“————————————–”);

using (SerialPort sp = new SerialPort(“COM” + puertoArduino, 9600))
{

sp.Open();

while (!Console.KeyAvailable)
{
Console.SetCursorPosition(7, 1);
sp.DiscardInBuffer();
//Thread.Sleep(10000); //pausa de 10 segundos.
Console.WriteLine(sp.ReadByte().ToString().PadLeft(3, ‘ ‘)); //peta en esta linea cuando leemos poten
}

sp.Close();

}

}

static void Main()
{

while (true)
{

Console.Clear();
Console.ForegroundColor = ConsoleColor.Green;
Console.CursorVisible = false;

Menu();

char c = Console.ReadKey(true).KeyChar;

switch (char.ToUpper(c))
{

case ‘L’:
ListarPuertos();
break;

case ‘S’:
SetearPuertoArduino();
break;

case ‘E’:
if (puertoArduino != 0) EncenderLED();
break;

case ‘P’:
if (puertoArduino != 0) LeerPOT();
break;

case ‘Q’:
return;

}

}

}
}
}

PD: Tambien seleccionamos el com y encendemos/apagamos el led. Funciona perfectamente en arduino UNO por tener dos micros uno para el programa y otro para la comunicacion, pero en el caso de leonard no funciona… Sabrias ayudarme? Muchas gracias de antemano.