c# и pwm
- Войдите на сайт для отправки комментариев
Пнд, 04/06/2012 - 15:02
Добрый день, форумчане. Кто может написать код на c# для pwm? Требуется регулировка яркости св. диода ползунком.
Добрый день, форумчане. Кто может написать код на c# для pwm? Требуется регулировка яркости св. диода ползунком.
В смысле "написать код на c# для pwm" ?
В смысле "написать код на c# для pwm" ?
Ну видимо нужно windoвое приложение, в котором есть ползунок. Двигая который должна менятся яркость светика на ардуине.
Но вопрос, конечно, задан "коряво".
Ну я могу написать, что дальше-то?
Что вы хотите, что-бы вам рассказали с какого бока подходить к этой задаче или что-бы выполнили эту работу за вас?
да, приложение для винды. требуется ползунок и выбор ком-порта. если сможете написать код, то будет супер) если не хочется, то расскажите как послать значения от 0 до 255 в порт.
да, приложение для винды. требуется ползунок и выбор ком-порта. если сможете написать код, то будет супер) если не хочется, то расскажите как послать значения от 0 до 255 в порт.
Неужели гугл на "C# serial port write" ничего не говорит?
byte[] msgBuff = new []{NewServoPosition}; _serialPort.Write(msgBuff, 0, msgBuff.Length);Возможно и короче можно, ну нужно пробовать как сработает
_serialPort.Write(new []{NewPWM},0,1);Естестенно NewPWM - толжна быть типа byte. Ну или "привести" к байту нужно будет. Нанисать (byte)NewPWM.
сложновато))) я как второй день с с#) для моего примера где править?
В примере :) Где же еще. Скорее всего в обработчике события onchaned ползунка.
Ну, естественно, перед этим нужно открыть порт, и не забывать его закрыть. По нажатию кнопки или выходе из приложения.
вот код, что за значение NewPWM?
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; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { serial.Open(); } private void button2_Click(object sender, EventArgs e) { serial.Close(); } private void trackBar1_Scroll(object sender, EventArgs e) { trackBar.Minimum = 0; trackBar.Maximum = 255; serial.Write(new[] { NewPWM }, 0, 1); } } }и код для дуины правилен?
int ledPin = 11; void setup() { Serial.begin(9600); } void loop() { if (Serial.available()){ byte pwm = Serial.read(); analogWrite(ledPin, pwm); } }вот код, что за значение NewPWM?
Ну вы задвали вопрос "как послать значения от 0 до 255". Если в ответе есть единственная непонятная вам переменная, то логично предположить что это и есть то самое передаваемое значение? ну или взять словарь и попробовать перевести имя этой переменной.
В вашем случае на ее месте должно быть то что вы хотите отослать. Скорее всего - текущая позиция вашего ползунка.
и код для дуины правилен?
Не-а... дуина должна телепатически узнать что вы, снаружи, подключили светик? Вы где-то ей сказали что 11-тый пин должен работать на выход? pinMode()
с pinMode понял :), а вот прога не компилируется..
код
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; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { serial.Open(); } private void button2_Click(object sender, EventArgs e) { serial.Close(); } private void trackBar1_Scroll(object sender, EventArgs e) { trackBar.Minimum = 0; trackBar.Maximum = 255; serial.Write(new[] {trackBar.Value}, 0, 1); } private void Form1_Load(object sender, EventArgs e) { } } }ошибки:
Ошибка 1 Наиболее подходящий перегруженный метод для "System.IO.Ports.SerialPort.Write(byte[], int, int)" имеет несколько недопустимых аргументов C:\Users\Work\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 33 13 WindowsFormsApplication1
Ошибка 2 Аргумент "1": преобразование типа из "int[]" в "byte[]" невозможно C:\Users\Work\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 33 26 WindowsFormsApplication1
всё, дружище спасибо! разобрался) преобразование типов забыл.
А я предупреждал ;), что привести нужно будет ;)
Ладно, чудно что разобрались.
По хорошему нужно еще
1. Закрывать порт при выходе приложения (вдруг пользователь забыл нажать Close для порта)
2. Открытие порта и запись - обернуть в блоки try{}finally{}, что-бы корректно освобождать порт если "что-то пошло не так". И открытие/запись, по какой-то причине не удалась. Или try{}catch{} и выводить пользователю сообщению что "что-то у нас не вышло поработать с портом", а не сразу "опадать как озимые".
Если вообще "лоск" наводить, то можно еще, что-бы при старте, в setup(), ардуина сообщала "я готова". А на C# вначале ждать этого сообщения "о готовности". Уведомлять пользователя "устройство на связи" и только после этого начинать слать какие-то данные.
Да и, после приема данных, аруина может слать в ответ что-то типа "OK". Тогда C# будет знать что устройство "все еще слушает его, не умерло, не отсоединилось".
ого сколько тонкостей) если что обращусь.