- •С.М. Липкин, т.В. Липкина компьютерное управление технологическими процессами и оборудованием
- •Лабораторная работа № 1. Создание приложения.
- •Программа работы
- •Методические указания
- •Лабораторная работа №2 Базовые приемы разработки программ с графическим интерфейсом пользователя (gui) на языке c#
- •Программа работы.
- •Методические указания.
- •Лабораторная работа №3 Основы работы с аппаратной платформой Arduino
- •Программа работы
- •Методические указания
- •Void loop() {
- •Void setup() {
- •Void loop() {
- •Лабораторная работа №4 Взаимодействие технических систем с эвм по последовательному интерфейсу Цель работы
- •Программа работы
- •Методические указания
- •Void setup() {
- •Void loop() {
- •InitializeComponent();
- •InitializeComponent();
- •Литература
- •346428, Г. Новочеркасск, ул. Просвещения, 132
- •346428, Г. Новочеркасск, ул. Первомайская, 166
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()
{
