Перемещение вала привода в полученное положение

inputString = "";

stringComplete = false;

}

}

void serialEvent() {

while (Serial.available()) {

char inChar = (char)Serial.read();

inputString += inChar;

if (inChar == '\n') {

stringComplete = true;

}

}

}

Отладку скетча можно выполнить при помощи встроенного монитора последовательного порта (рис. 1).

Рис. 1 – Вызов окна монитора последовательного порта

Приложение на C# должно иметь одну форму со следующим интерфейсом (рис. 2).

Рис. 2 – Интерфейс управляющего приложения

Используемые элементы, а также их свойства приведены в табл. 1

 

 

Табл. 1 Свойства элементов интерфейса управляющего приложения

Элемент Свойство Значение
Label Name currentPosition
Text
TrackBar Name servoPosition
Maximum
Minimum
SmallChange
Button Text Установить

Код единственной формы приложения может быть разработан по следующему шаблону:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO.Ports;

namespace WindowsFormsApplication9

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

serialPort1 = new SerialPort { PortName = "COM5", BaudRate = 9600 };

}

private void servoPosition_Scroll(object sender, EventArgs e)

{

/*текст метки*/ = servoPosition.Value.ToString();

//sendToArduino(/*последовательный порт*/, /*угол поворота*/);

}

private void sendToArduino(SerialPort sp, int data)

{

/*последовательный порт*/.Open();

/*последовательный порт*/.WriteLine(data.ToString());

???? //освобождение занятого ресурса ОС

}

private void button1_Click(object sender, EventArgs e)

{

sendToArduino(serialPort1, servoPosition.Value);

}

}

}

К п.4 Трёхцветный светодиод или RGB-светодиод — это совмещённые в одном корпусе светодиоды красного, зелёного и синего цветов. Светодиод имеет 4 вывода. 3 вывода — аноды, соответствующие отдельным цветам и одна — общий катод. Подавая сигнал на один из анодов, можно добиться свечения одним из цветов. Используя широтно-импульсную модуляцию (PWM-сигнал) для всех анодов одновременно, можно получить свечение произвольным цветом.

Скетч, выполняющий заданные функции может быть реализован по следующему шаблону

int r1 = 2;

int b1 = 3;

int g1 = 4;

int r2 = 8;

int g2 = 9;

int b2 = 10;

String inputString = "";

boolean stringComplete = false;

void setup()

{

pinMode(r1,OUTPUT);

pinMode(g1,OUTPUT);

pinMode(b1,OUTPUT);

 

pinMode(r2,OUTPUT);

pinMode(g2,OUTPUT);

pinMode(b2,OUTPUT);

 

digitalWrite(r1,HIGH);

digitalWrite(g1,LOW);

digitalWrite(b1,LOW);

 

digitalWrite(r2,LOW);

digitalWrite(g2,LOW);

digitalWrite(b2,HIGH);

Serial.begin(9600);

}

void loop()

{

if (stringComplete) {

if(digitalRead(r1)==HIGH)

{

//светодиод1 – синий

//светодиод2 – красный

} else

{

//светодиод1 – красный

//светодиод2 – синий

}

inputString = "";

stringComplete = false;

}

}

void serialEvent() {

while (Serial.available()) {

char inChar = (char)Serial.read();

inputString += inChar;

if (inChar == '\n') {

stringComplete = true;

}

}

}

Управляющее приложение может быть реализовано за счет усовершенствования приложения из лабораторной работы №1. В указанном приложении необходимо создать экземпляр класса SerialPort, а также осуществлять передачу произвольной строки по последовательному интерфейсу при нажатии на одну из кнопок.

К п. 5 В данном случае необходима разработка протокола обмена информацией между Arduino и управляющим приложением. Указанный протокол может быть реализован благодаря отправке управляющим приложением сообщений длиной 6 байт, содержащих символы ‘0’ или ‘1’, кодирующие состояние того или иного анода светодиодов. Скетч, реализующий данный протокол реализуется по следующему шаблону:

int r1 = 2;

int b1 = 3;

int g1 = 4;

int r2 = 8;

int g2 = 9;

int b2 = 10;

int led_pos = 0;

String inputString = "";

boolean stringComplete = false;

void setup()

{

pinMode(r1,OUTPUT);

pinMode(g1,OUTPUT);

pinMode(b1,OUTPUT);

pinMode(r2,OUTPUT);

pinMode(g2,OUTPUT);

pinMode(b2,OUTPUT);

digitalWrite(r1,HIGH);

digitalWrite(g1,LOW);

digitalWrite(b1,LOW);

digitalWrite(r2,LOW);

digitalWrite(g2,LOW);

digitalWrite(b2,HIGH);

Serial.begin(9600);

}

void loop()

{

if (stringComplete) {

inputString = "";

stringComplete = false;

}

}

void serialEvent() {

while (Serial.available()) {

char inChar = (char)Serial.read();

switch(led_pos)

{

case 0:

digitalWrite(r1,LOW);

digitalWrite(g1,LOW);

digitalWrite(b1,LOW);

digitalWrite(r2,LOW);

digitalWrite(g2,LOW);

digitalWrite(b2,LOW);

if(inChar=='1'){

Светодиод 1 - красный

}else{

Светодиод 1 - не красный

}

break;

case 1:

if(inChar=='1'){

Светодиод 1 - зеленый

}else{

Светодиод 1 – не зеленый

}

break;

case 2:

if(inChar=='1'){

Светодиод 1 - синий

}else{

Светодиод 1 – не синий

}

break;

case 3:

if(inChar=='1'){

Светодиод 2 - красный

}else{

Светодиод 2 – не красный

}

break;

case 4:

if(inChar=='1'){

Светодиод 2 - зеленый

}else{

Светодиод 2 – не зеленый

}

break;

case 5:

if(inChar=='1'){

Светодиод 2 - синий

}else{

Светодиод 2 – не синий

}

break;

}