Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод. указания к лаб. раб. по (КУПТО).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.91 Mб
Скачать

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;

}

???? //увеличение счетчика байтов

inputString += inChar;

if (inChar == '\n') {

stringComplete = true;

???? //обнуление счетчика байтов

}

}

}

Интерфейс управляющего приложения должен выглядеть следующим образом (рис. 3)

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

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

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 led_serial_adv

{

public partial class Form1 : Form

{

private SerialPort serial;

public Form1()

{