Передача данных Arduino - C#

arcadia
Offline
Зарегистрирован: 16.06.2012

 Здравствуйте! Подскажите, пожалуйста, как считывать данные, передаваемые с Arduino через приложение на C#.

int switchPin = 7;
int ledPin = 13;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean flashLight = LOW;

void setup()
{
  pinMode(switchPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

boolean debounce(boolean last)
{
  boolean current = digitalRead(switchPin);
  if (last != current)
  {
    delay(5);
    current = digitalRead(switchPin);
  }
  return current;
}

void loop()
{
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    Serial.print("UP");
    
    digitalWrite(ledPin, HIGH);
  }
  if (lastButton == HIGH && currentButton == LOW)
  {
    Serial.print("DOWN");
    
    digitalWrite(ledPin, LOW);
  }

  lastButton = currentButton;
}

Это мой код для устройства. После нажатия на кнопку посылается "UP", после отжатия - "DOWN". Но как получить эту информацию?

arcadia
Offline
Зарегистрирован: 16.06.2012

Например, при выполнении такого кода в консоли ничего не появляется. :(
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text;
using System.IO.Ports;

namespace ArduinoTestApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort port = new SerialPort("COM3", 9600);
            port.Open();
            string lane;
            while (true)
            {
                lane = port.ReadLine();

                Console.WriteLine(lane);
            }

        }
    }
}
Zapek@n
Offline
Зарегистрирован: 16.02.2012

Ну как-то так

Arduino:

int i;
void setup()
{
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  i = 0;
}

void loop()
{
    Serial.print(i);
    delay(1000); //посылаем числа по нарастающей каждую секунду
    i++;
}

C#:

using System;
using System.IO.Ports;

namespace ArduinoSerial
{
    class Program
    {
        //У меня COM30, а Вы поставьте тот порт, что у Вас
        SerialPort sp = new SerialPort("COM30", 9600, Parity.None, 8, StopBits.One);


        static void Main(string[] args)
        {
            new Program();
        }

        private Program()
        {
            sp.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);
            sp.Open();

            Console.Read(); //чтобы консоль не закрывалась
        }

        private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine(sp.ReadExisting());
        }
    }
}