[C#, DIY или Сделай сам, Разработка под Arduino] Использование контроллера Arduino для прерываний
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В данной стать я приведу пример использования arduino контроллера для вызова прерываний программы на C#.
Стоит отметить, что в WindowsForms присутствует элемент Timer который включается и выполняет код через определенный промежуток времени.
Я решил реализовать подобное используя микроконтроллер Arduino UNO.
Для этого я запрограммировал контроллер так, чтобы он через определённый промежуток времени отправлял в последовательный порт данные, вызывая прерывание программы.
Я считаю, что данная статья будет интересна тем, кто занимается программированием микроконтроллеров, так как в ней приведен пример одного из вариантов использования микроконтроллеров.
void setup(){
Serial.begin(9600);//Открыть последовательный порт
}
int str=0;
int interval=0;
String text;
void loop()
{
while(str==0)
str=Serial.parseInt();//Ждать прихода данных
if (str==1)//Если поступила команда запуска таймера
{
while(interval==0)
interval=Serial.parseInt();//получить интервал
text=String(interval);
text+="!";
while(str!=2){
delay(interval);//Подождать указанный промежуток времени
Serial.println(text);//Отправить данные в последовательный порт
str=Serial.parseInt();//Ждать следующей комнды
}
interval=0;
}
}
Также контроллер принимает команды запуска(1) и остановки(2) таймера. (Аналог методов start и stop для таймера windowsforms).
После получения команды запуска котроллер ждет получения промежутка времени через которое данные будут отправляться в последовательный порт.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.IO.Ports;
using System.IO;
using System.Net;
namespace ConsoleApp33
{
class Program
{
private static SerialPort ard = new SerialPort("COM13", 9600);//Название порта к которому подключен контроллер и скорость обмена данными с портом.
private static Thread stop_thread = new Thread(Stop);
private static bool sost = true;
[MTAThread]
static void Main(string[] args)
{
SerialDataReceivedEventHandler handler = new SerialDataReceivedEventHandler(Serial_interrupt);//Метод выполняемый при приходе данных
ard.DataReceived += handler;
//Задать интервал задержки
int interval = int.Parse(Console.ReadLine());
//Открыть последовательный порт
while (ard.IsOpen != true)
ard.Open();
//Запустить контроллер
ard.WriteLine("1");
Thread.Sleep(10);
ard.WriteLine(interval.ToString());
Console.WriteLine(ard.ReadLine());
//Запуск потока остановки контроллера
stop_thread.IsBackground = true;
stop_thread.Start();
while (sost) Thread.Sleep(1);//Приостановить поток
}
public enum Comand
{
Start = 1,//Запуск таймера
Stop = 2 //Остановка таймера
}
private static System.DateTime dateTime;
public static void Serial_interrupt(object sender,SerialDataReceivedEventArgs e)
{
//Вывести дату и время в консоль
dateTime = DateTime.Now;
Console.WriteLine(dateTime.ToString());
}
public static void Stop()
{
if ((int)Console.ReadKey().Key == 27)//Если нажата клавиша Esc выключить контроллер
{
ard.WriteLine(Comand.Stop.ToString());//Выклюить контроллер
sost = false;//Завершить Main
}
Thread.Sleep(10);
}
}
}
Программа на C# открывает соединение с портом и при приходе данных возникает событие
ard.DataReceived += handler;
вызывающее метод Serial_interrupt(), который выводит в консоль дату и время компьютера.
Также присутствует поток stop_thread который завершает программу и отправляет на контроллер команду выключения когда нажимается клавиша Esc.
После запуска программа будет ожидать введения пользователем интервала времени через которое контроллер будет отправлять данные, затем до нажатия клавиши Esc программа будет выводить через указанный промежуток времени дату и время в консоль.
Всем спасибо за внимание.
===========
Источник:
habr.com
===========
Похожие новости:
- [.NET, C#, Квантовые технологии, Программирование] Создайте свой собственный симулятор Q# — Часть 1 (перевод)
- [.NET, C#] Сквозной функционал через обертки
- [DIY или Сделай сам, Open source, Разработка на Raspberry Pi, Электроника для начинающих] babooshka tv, как самодельный видео-показатор сместил «точку сборки» моих пожилых родителей
- [DIY или Сделай сам, Искусственный интеллект, Софт] Ставим и тестим RTX Voice на видеокартах Nvidia GTX серии
- [Машинное обучение, Разработка под Arduino, DIY или Сделай сам, Транспорт] Умная перчатка для велосипедистов (перевод)
- [DIY или Сделай сам, Энергия и элементы питания] Руководство по перезаряжаемым литиевым аккумуляторам для начинающих (перевод)
- [.NET, C#, Информационная безопасность] Медуза, паспорта и говнокод — почему номера паспортов всех участников интернет-голосования попали в Интернет
- [DIY или Сделай сам, Будущее здесь] Луддитам — бой! Расчехляем боевые уравнения Фарадея и Максвелла
- [DIY или Сделай сам, Open source, Разработка на Raspberry Pi, Электроника для начинающих] babooshka tv, как самодельный видео-показатор сместил «точку сборки» моих пожилых родителей
- [Visual Basic for Applications] Excel VBA — создаем свою панель инструментов
Теги для поиска: #_c#, #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_razrabotka_pod_arduino (Разработка под Arduino), #_arduino_uno, #_c#, #_c#, #_diy_ili_sdelaj_sam (
DIY или Сделай сам
), #_razrabotka_pod_arduino (
Разработка под Arduino
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:46
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В данной стать я приведу пример использования arduino контроллера для вызова прерываний программы на C#. Стоит отметить, что в WindowsForms присутствует элемент Timer который включается и выполняет код через определенный промежуток времени. Я решил реализовать подобное используя микроконтроллер Arduino UNO. Для этого я запрограммировал контроллер так, чтобы он через определённый промежуток времени отправлял в последовательный порт данные, вызывая прерывание программы. Я считаю, что данная статья будет интересна тем, кто занимается программированием микроконтроллеров, так как в ней приведен пример одного из вариантов использования микроконтроллеров. void setup(){
Serial.begin(9600);//Открыть последовательный порт } int str=0; int interval=0; String text; void loop() { while(str==0) str=Serial.parseInt();//Ждать прихода данных if (str==1)//Если поступила команда запуска таймера { while(interval==0) interval=Serial.parseInt();//получить интервал text=String(interval); text+="!"; while(str!=2){ delay(interval);//Подождать указанный промежуток времени Serial.println(text);//Отправить данные в последовательный порт str=Serial.parseInt();//Ждать следующей комнды } interval=0; } } Также контроллер принимает команды запуска(1) и остановки(2) таймера. (Аналог методов start и stop для таймера windowsforms). После получения команды запуска котроллер ждет получения промежутка времени через которое данные будут отправляться в последовательный порт. using System;
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.IO.Ports; using System.IO; using System.Net; namespace ConsoleApp33 { class Program { private static SerialPort ard = new SerialPort("COM13", 9600);//Название порта к которому подключен контроллер и скорость обмена данными с портом. private static Thread stop_thread = new Thread(Stop); private static bool sost = true; [MTAThread] static void Main(string[] args) { SerialDataReceivedEventHandler handler = new SerialDataReceivedEventHandler(Serial_interrupt);//Метод выполняемый при приходе данных ard.DataReceived += handler; //Задать интервал задержки int interval = int.Parse(Console.ReadLine()); //Открыть последовательный порт while (ard.IsOpen != true) ard.Open(); //Запустить контроллер ard.WriteLine("1"); Thread.Sleep(10); ard.WriteLine(interval.ToString()); Console.WriteLine(ard.ReadLine()); //Запуск потока остановки контроллера stop_thread.IsBackground = true; stop_thread.Start(); while (sost) Thread.Sleep(1);//Приостановить поток } public enum Comand { Start = 1,//Запуск таймера Stop = 2 //Остановка таймера } private static System.DateTime dateTime; public static void Serial_interrupt(object sender,SerialDataReceivedEventArgs e) { //Вывести дату и время в консоль dateTime = DateTime.Now; Console.WriteLine(dateTime.ToString()); } public static void Stop() { if ((int)Console.ReadKey().Key == 27)//Если нажата клавиша Esc выключить контроллер { ard.WriteLine(Comand.Stop.ToString());//Выклюить контроллер sost = false;//Завершить Main } Thread.Sleep(10); } } } Программа на C# открывает соединение с портом и при приходе данных возникает событие ard.DataReceived += handler;
вызывающее метод Serial_interrupt(), который выводит в консоль дату и время компьютера. Также присутствует поток stop_thread который завершает программу и отправляет на контроллер команду выключения когда нажимается клавиша Esc. После запуска программа будет ожидать введения пользователем интервала времени через которое контроллер будет отправлять данные, затем до нажатия клавиши Esc программа будет выводить через указанный промежуток времени дату и время в консоль. Всем спасибо за внимание. =========== Источник: habr.com =========== Похожие новости:
DIY или Сделай сам ), #_razrabotka_pod_arduino ( Разработка под Arduino ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:46
Часовой пояс: UTC + 5