Помогите написать скетч для движения моторов
- Войдите на сайт для отправки комментариев
Пнд, 04/03/2013 - 21:28
В наличие есть вот такой драйвер на 2 ампера:http:http://www.dvrobot.ru/shop/i3.kontroler_dvigatelya.htm ,такая управляшка:http://a-bolshakov.ru/Arduino/Processing/Tank/Tank_01/Proc.jpg ,и вот такой скетч:
import processing.serial.*;
Serial myPort;
int button_color=250;
int button_fire=220;
boolean button1_over=false;
boolean button2_over=false;
boolean button3_over=false;
boolean button4_over=false;
boolean button5_over=false;
boolean button6_over=false;
char letter;
int speed=150;
int speed_min=0;
int speed_max=250;
int step=10;
void setup ()
{
size (500, 400);
String portName=Serial.list()[0];
myPort=new Serial(this, portName, 9600);
println(Serial.list());
}
void draw() {
update(mouseX, mouseY);
background(180);
fill(0);
text("скорость =", 100, 50);
text(speed, 165, 50);
text("направление -", 250, 50);
switch (letter) {
case 'w': text("вперед", 340, 50); break;
case 's': text("назад", 340, 50); break;
case 'a': text("влево", 340, 50); break;
case 'd': text("вправо", 340, 50); break;
}
if(button1_over) {fill(button_fire);}
else {fill(button_color);}
rect(50,100,100,100);
if(button2_over) {fill(button_fire);}
else {fill(button_color);}
rect(200,100,100,100);
if(button3_over) {fill(button_fire);}
else {fill(button_color);}
rect(350,100,100,100);
if(button4_over) {fill(button_fire);}
else {fill(button_color);}
rect(50,250,100,100);
if(button5_over) {fill(button_fire);}
else {fill(button_color);}
rect(200,250,100,100);
if(button6_over) {fill(button_fire);}
else {fill(button_color);}
rect(350,250,100,100);
fill(0);
text("скорость-", 75, 150);
text("вперед", 225, 150);
text("скорость+", 370, 150);
text("влево", 80, 300);
text("назад", 227, 300);
text("вправо", 380, 300);
myPort.write(letter);
myPort.write(speed);
myPort.write(" ");
delay(30);
}
void update(int x, int y)
{
if(proverka_button1() ){
button1_over=true;
button2_over=false;
button3_over=false;
button4_over=false;
button5_over=false;
button6_over=false;}
else if(proverka_button2() ){
button1_over=false;
button2_over=true;
button3_over=false;
button4_over=false;
button5_over=false;
button6_over=false;}
else if(proverka_button3() ){
button1_over=false;
button2_over=false;
button3_over=true;
button4_over=false;
button5_over=false;
button6_over=false;}
else if(proverka_button4() ){
button1_over=false;
button2_over=false;
button3_over=false;
button4_over=true;
button5_over=false;
button6_over=false;}
else if(proverka_button5() ){
button1_over=false;
button2_over=false;
button3_over=false;
button4_over=false;
button5_over=true;
button6_over=false;}
else if(proverka_button6() ){
button1_over=false;
button2_over=false;
button3_over=false;
button4_over=false;
button5_over=false;
button6_over=true;}
else {button1_over = button2_over = button3_over = button4_over = button5_over = button6_over = false;}
}
void mouseClicked(){
if(button1_over){speed=speed-step;}
if(button3_over){speed=speed+step;}
if(speed<speed_min){speed=speed_min;}
if(speed>speed_max){speed=speed_max;}
if(button2_over){letter='w';}
if(button4_over){letter='a';}
if(button5_over){letter='s';}
if(button6_over){letter='d';}
}
boolean proverka_button1(){
if(mouseX>50&&mouseX<150&&mouseY>100&&mouseY<200) {return true;}
else {return false;}
}
boolean proverka_button2(){
if(mouseX>200&&mouseX<300&&mouseY>100&&mouseY<200) {return true;}
else {return false;}
}
boolean proverka_button3(){
if(mouseX>350&&mouseX<450&&mouseY>100&&mouseY<200) {return true;}
else {return false;}
}
boolean proverka_button4(){
if(mouseX>50&&mouseX<150&&mouseY>250&&mouseY<350) {return true;}
else {return false;}
}
boolean proverka_button5(){
if(mouseX>200&&mouseX<300&&mouseY>250&&mouseY<350) {return true;}
else {return false;}
}
boolean proverka_button6(){
if(mouseX>350&&mouseX<450&&mouseY>250&&mouseY<350) {return true;}
else {return false;}
}
при компиляции показывает ошибку и указывает на :import processing.serial.*;
Помогите разобраться пожалуйста!
Может есть какие то другие варианты управления двигателями,через подобные "управлялки" , или как управлять двигателями с клавиатуры через монитор порта хотя бы?
при компиляции показывает ошибку и указывает на :import processing.serial.*;
Кто показывает ошибку?
Вы понимаете что это код для процессинга??? И вы понимаете что еще скейтч есть для дуины???
Если да, то maodzi87, вы уже не первый день на этом форуме, поэтому:
1. Для процессинга есть отдельная ветка Processing;
2. Вставка программного кода в тему/комментарий.
3. Есть такая строка в этом скейтче String portName=Serial.list()[0]; и в ней есть нолик 0, так вот это некий порядковый номер СОМ-порта в процессенге(?) (яве?), не путайте с номером СОМ-порта, это именно порядковый номер, то есть есть у вас на компе СОМ1, СОМ2, СОМ5 и СОМ7, так вот в процессинге они расположатся примерно так:
СОМ1 это Serial.list()[0]
СОМ2 это Serial.list()[1]
СОМ5 это Serial.list()[2]
СОМ7 это Serial.list()[3]
поэтому берете и пробуете переберать эти номера.
Да я новичёк в этом деле просто! Спасибо и на этом, только я вот буду здесь всех тревожить пока не разберусь во всём ,что меня интересует! А код для дуины таков:
int ENA=4; int IN1=5; int IN2=6; int IN3=9; int IN4=10; int ENB=11; int sped=250; char letter; int pause=50; void setup() { Serial.begin(9600); pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENB, OUTPUT); } void loop() { digitalWrite(ENA, HIGH); digitalWrite(ENB, HIGH); if (Serial.available()>0) { letter=Serial.read(); sped=Serial.read(); Serial.print("I received: "); Serial.print(letter); Serial.print(", "); Serial.println(sped); Serial.print(" "); switch(letter){ case 'w': analogWrite(IN1, sped); analogWrite(IN4, sped); delay(pause); break; case 's': analogWrite(IN2, sped); analogWrite(IN3, sped); delay(pause); break; case 'a': analogWrite(IN1, sped); analogWrite(IN3, sped); delay(pause); break; case 'd': analogWrite(IN2, sped); analogWrite(IN4, sped); delay(pause); break; } analogWrite(IN1, 0); analogWrite(IN2, 0); analogWrite(IN3, 0); analogWrite(IN4, 0); } }Так в процессинге код скомпилировался при смене номеров Serial.list()[х] ?
Да скомпилировался. Как только вот поменять номер Serial.list()[х] на СОМ3 ,т.к. дуина у меня стоит именно на этом порту, пробовал ставить Serial.list()[0] ,но это не то!?!
Так и напишите "COM3" и будет Вам счастье. Вместо Serial.list()[0]. Я именно так и делал.
"СОМ3" то куда именно вписывать ,наглядно пожалуйста покажите!?
Можно так
или сразу так
но если бы вы попереберали номера Serial.list()[х], то тоже бы завелось.
Подчёркивает, как Error inside Serial.write() и появляется недоделанное окно ,и всё на этом всё встало!
Что же это могло значить?
Не знаю, что у вас там происходит, у меня код выше компилируется.
И вы же писали, что у вас скомпилировалось.... покажите весь код.
да всё спасибо огромное,всё заработало ,нужно просто было выключить ардуину,выключить Processing,потом заново всё по очереди включить и залить скетч!
АГРОМНЕЙШЕЕ СПАСИБО,Я ОЧЕНЬ БЛАГОДАРЕН ВАМ ЗА ПОМОЩЬ,ВСЁ ПРЕКРАСНО РАБОТАЕТ!!!!!УРА!!!