Есть ли открытые программы для прямого управления с ПК Arduino-подобными платами?
Необходимо управлять гусеничным вездеходом (2 электромотора) с web-камерой на двух сервоприводах, в общем все как на видео.
Ни одного ответа :(
Я понимаю, раздавать готовую программу над которой сам кропотливо работал ни кто не будет, сбился с ног в поисках такой.
Давайте тогда разбираться вместе с самого низа?
Вот например такой простой скетч для Arduino:
Serial.flush(); //это я не знаю для чего, не стал удалять
}
Скетч писал сам, из подобных примеров, поэтому сильно палками не бейте, лучше поправьте. Суть в том что при отправке (по СериалМонитору) "1" – горит один светодиод, "2" – другой, "3" - оба. Ничего не отправляешь - ничего не горит!
Ну вот и первый пример: нужна визуализация трех кнопок, при нажатии и удержании которых (без фиксации) будут отправляться циферки в COM.
1. В соседней теме разбирались очень не плохие примеры с кнопками на Processing.
2. Куда еще стоит начать копать? Delphi?
14.04.2012, 21:38
Kitam1n
Вложений: 1
Re: Arduino <=> PC: прямое удобное управление
Опять тишина, ну ладно, может кому будет интересно: значит нашел работующий пример с кнопками, надобовлял своих, вроде ничего получается :p. Вот не знаю как сделать управление сервами ползунками :(
Подскажите? Ни одного примера с исходником не найду :(
Если кому нужны исходники для экспериментов говорите! :rolleyes:
15.04.2012, 21:41
Kitam1n
Вложений: 1
Re: Arduino <=> PC: прямое удобное управление
И по прежнему тишина :( Люди, HELP!!! Помогите сделать управление сервами при помощи ползунка plz!!!
А то кнопками это очень уж грубо и не удобно.
Выкладываю исходники и видушку того что есть! Подтягивайтесь!
int val = 0; // variable to store the data from the serial port
int ledPin1 = 2; // LED connected to digital pin 2
int ledPin2 = 3; // LED connected to digital pin 3
int ledPin3 = 4; // LED connected to digital pin 4
int ledPin4 = 5; // LED connected to digital pin 5
int ledPin5 = 6; // LED connected to digital pin 6
void setup()
{
myservo.attach(9); //присваиваем myservo 9-й пин
myservo2.attach(10); //присваиваем myservo2 10-й пин
pinMode(ledPin1,OUTPUT); // declare the LED's pin as output
pinMode(ledPin2,OUTPUT); // declare the LED's pin as output
pinMode(ledPin3,OUTPUT); // declare the LED's pin as output
pinMode(ledPin4,OUTPUT); // declare the LED's pin as output
pinMode(ledPin5,OUTPUT); // declare the LED's pin as output
Serial.begin(9600); // connect to the serial port
}
void loop ()
{
if (Serial.available() > 1)
{
a = Serial.read();
b = Serial.read();
с = Serial.read();
if(a==255)//управляем сервами
{
if(b==0) myservo.write(c);
if(b==1) myservo2.write(c);
}
if(a==127)//управляем диодами
{
switch (b)
{
case 0:
digitalWrite(ledPin1,HIGH); //левый двигатель
digitalWrite(ledPin2,HIGH); //правый двигатель
break;
case 1:
digitalWrite(ledPin1,LOW);// оба стоп
digitalWrite(ledPin2,LOW);
break;
case 2:
//ну и так далее
break;
}
}
}
}
С делфи ничем помочь не могу. Есть вариант на С. В архиве.
16.04.2012, 00:33
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
manu_245, спасибо, но при верификации IDE ругается :eek: А я не врубаю в чем дело.:confused:
Курю инструкции по программированию Aurdino.:(
16.04.2012, 00:49
manu_245
Re: Arduino <=> PC: прямое удобное управление
а, точно:o
1. if (Serial.available() > 2)
2.byte a,b,c; в этой же функции
3. еще ругается на строку с = Serial.read(); там "c" на анлгийском надо вписать. совсем плох я, забыл раскладку переключить.
После этого должно нормально компилироваться.
16.04.2012, 09:40
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
Спасибо!
1. поменял
2.что такое byte? в скетче этого вообще нет
3. с английскую поставил
Теперь ругается на то что a, b и c was not declared in this scope :mad:
int val = 0; // variable to store the data from the serial port
int ledPin1 = 2; // LED connected to digital pin 2
int ledPin2 = 3; // LED connected to digital pin 3
int ledPin3 = 4; // LED connected to digital pin 4
int ledPin4 = 5; // LED connected to digital pin 5
int ledPin5 = 6; // LED connected to digital pin 6
void setup()
{
myservo.attach(9); //присваиваем myservo 9-й пин
myservo2.attach(10); //присваиваем myservo2 10-й пин
pinMode(ledPin1,OUTPUT); // declare the LED's pin as output
pinMode(ledPin2,OUTPUT); // declare the LED's pin as output
pinMode(ledPin3,OUTPUT); // declare the LED's pin as output
pinMode(ledPin4,OUTPUT); // declare the LED's pin as output
pinMode(ledPin5,OUTPUT); // declare the LED's pin as output
Serial.begin(9600); // connect to the serial port
}
void loop ()
{
if (Serial.available() > 2)
{
a = Serial.read();
b = Serial.read();
c = Serial.read();
if(a==255)//управляем сервами
{
if(b==0) myservo.write(c);
if(b==1) myservo2.write(c);
}
if(a==127)//управляем диодами
{
switch (b)
{
case 0:
digitalWrite(ledPin1,HIGH); //левый двигатель
digitalWrite(ledPin2,HIGH); //правый двигатель
break;
case 1:
digitalWrite(ledPin1,LOW);// оба стоп
digitalWrite(ledPin2,LOW);
break;
case 2:
//ну и так далее
break;
}
}
}
}
16.04.2012, 11:46
manu_245
Re: Arduino <=> PC: прямое удобное управление
надо объявить переменные.
После
if (Serial.available() > 2)
{
вставить строку byte a,b,c;
16.04.2012, 12:03
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
manu_245, спасибо что на пальцах!!!
компиляция прошла, залил! Теперь думаю, а что это дало? управлять то как теперь? что слать на Arduino? :confused:
int val = 0; // variable to store the data from the serial port
int ledPin1 = 2; // LED connected to digital pin 2
int ledPin2 = 3; // LED connected to digital pin 3
int ledPin3 = 4; // LED connected to digital pin 4
int ledPin4 = 5; // LED connected to digital pin 5
int ledPin5 = 6; // LED connected to digital pin 6
void setup()
{
myservo.attach(9); //присваиваем myservo 9-й пин
myservo2.attach(10); //присваиваем myservo2 10-й пин
pinMode(ledPin1,OUTPUT); // declare the LED's pin as output
pinMode(ledPin2,OUTPUT); // declare the LED's pin as output
pinMode(ledPin3,OUTPUT); // declare the LED's pin as output
pinMode(ledPin4,OUTPUT); // declare the LED's pin as output
pinMode(ledPin5,OUTPUT); // declare the LED's pin as output
Serial.begin(9600); // connect to the serial port
}
void loop ()
{
if (Serial.available() > 2)
{
byte a,b,c;
a = Serial.read();
b = Serial.read();
c = Serial.read();
if(a==255)//управляем сервами
{
if(b==0) myservo.write(c);
if(b==1) myservo2.write(c);
}
if(a==127)//управляем диодами
{
switch (b)
{
case 0:
digitalWrite(ledPin1,HIGH); //левый двигатель
digitalWrite(ledPin2,HIGH); //правый двигатель
break;
case 1:
digitalWrite(ledPin1,LOW);// оба стоп
digitalWrite(ledPin2,LOW);
break;
case 2:
//ну и так далее
break;
}
}
}
}
16.04.2012, 13:09
manu_245
Re: Arduino <=> PC: прямое удобное управление
Управления тремя байтами.
байт0 - режим.
255 - управление сервами.
в этом режиме байт1 - номер сервы, байт2 - угол в который ее надо повернуть
127 - управление выходами
в этом режиме байт1 - команда (0 -оба включить, 1- выключить и т.д.)
байт2 в этом режиме не учитывается
в эмуляторе протестил на той проге, что выкладывал выше. работает вроде.
если что софтина в архиве находится в bin\debug\arduino.exe
16.04.2012, 13:52
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
Это я вроде понял, я не знаю как это конкретно отправлять?
Ну например мне нужно 127 байт1 0. Это нужно переводить во что-то, отправлять одним пакетом? Это первый класс для программиста, но не для меня :(
Ну например что мне нужно конкретно написать в сериал монитор что бы включить светодиод или подвигать серву?
16.04.2012, 14:37
manu_245
Re: Arduino <=> PC: прямое удобное управление
Терминал в IDE вроде как ascii только отправляет. так что поможет другая терминалка, отправляющая dec или hex. их много. мне Qtcomport понравилась. В ней соответственно одним пакетом 127 0 0 и передаем. байта должно быть три. В режиме для диодов байт2=0. Просто значение угла для сервы логичнее передавать как dec а не аски символом.
ну или можно заменить:
PHP код:
if(a=='S')//управляем сервами
{
if(b=='0') myservo.write(c);
if(b=='1') myservo2.write(c);
}
if(a=='L')//управляем диодами
{
switch (b)
{
case '0':
digitalWrite(ledPin1,HIGH); //левый двигатель
digitalWrite(ledPin2,HIGH); //правый двигатель
break;
case '1':
digitalWrite(ledPin1,LOW);// оба стоп
digitalWrite(ledPin2,LOW);
break;
case '2':
//ну и так далее
break;
}
}
и передавать тогда символами.
управление диодами пройдет нормально, а с сервами угол не удобно будет указывать по таблице ascii. А почему в проге на делфи не переназначить отправку посылок просто?
На первый взгляд скриншот из 3 поста отличается от того что я выложил тремя кнопками. Проверь как работает то что есть. Кнопки дописать это ерунда. Или там предполагается еще множество функций?
16.04.2012, 16:07
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
Значит так:
1) Начал с простого, проверил твой скетч под символы – работает (правда проверил только со светодиодами т.к. сервы дома).
Гаснут и загораются по командам L0b и L1b соответственно
2) залил твой скетч с 3-мя байтами, нашел терминалку для отправки dec или hex. Че то не пашет, толи терминалка паршивая, толи команды шлю не те, толи еще что….
Шлю 127 0 b, и 127 0 0. с пробелами и без, че то не пашет :(
3) Твой пример именно то, что мне нужно.
Вот думаю плюнуть на Delphi и продолжить на основе твоей программы. Не сторонник хвататься то за одно, то за другое, но Delphi выбрал потому что единственно похожий открытый пример нашел именно под него. Не говорю что он плохой, просто я не программист, 4 дня мучаюсь.
Основное что нужно:
1) выбор COM порта (что бы менять из программы, а не лазить каждый раз в нутро программы и править ручками) – у тебя это есть!
2) управление двумя сервами – есть
3) кнопки для управления платформой (тракторный тип – 2 мотора) – оба вперед, оба стоп, левый/правый вперед, назад., пара кнопок есть, остальные добавить.
Теперь то что не обязательное, но желательно для дальнейшего развития:
4) Сделать крестиком управление сервами
5) Вывести видеоэкран камеры в эту панель управления.
6) Сделать возможность управления сервами не двигая рычажки а водя мышкой по полю координат
17.04.2012, 11:32
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
manu_245, вчера испытал твой пример, все супер. Пару кнопок еще добавил. Огромное человеческое спасибо!!!
Курю инструкции по программированию Visual для добавлении полезных фенечек...
02.12.2012, 22:01
metaforos
Re: Arduino <=> PC: прямое удобное управление
Вопрос для manu_245, А ты мог бы набросать простенький код на С для приема данных от ардуино через serial...
03.12.2012, 05:21
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
Там в С# что-то типа serial.write, а ты напиши serial.read, ну или по аналогии, и то что прочитаешь уже выводи куда нужно... я сам не пробовал, но мне скоро тоже понадобится, если не разберешься то давай вместе разбираться...:D
03.12.2012, 05:22
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
Вот только интересно это чтение нужно по таймера делать?
03.12.2012, 22:28
metaforos
Re: Arduino <=> PC: прямое удобное управление
Дело в том, что я начинал изучать С еще очень - очень давно. Вот вчера загрузил Microsoft Visual C++ 2010 Express и начну заново...
03.12.2012, 22:43
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
Че там изучать, скачай исходник от manu_245. Там все что нужно. Только если не ошибаюсь Manu_245 выкладывал исходники на C#.
03.12.2012, 22:45
Kitam1n
Re: Arduino <=> PC: прямое удобное управление
Опиши свой проект. Какое оборудование и что шлет. Куда тебе это надо выводить...?
03.12.2012, 23:15
metaforos
Re: Arduino <=> PC: прямое удобное управление
1. Передача в ардуино - 8 кнопок на вкл/выкл реле.
2. Прием от ардуино - прием кол-ва импульсов от ДСА, Температуры и т.д.
Т.е. в настоящее время, просто интересует как принять данные от ардуины (к примеру 2 температуры) и отобразить.