Помогите написать скетч для движения моторов

maodzi87
maodzi87 аватар
Offline
Зарегистрирован: 18.11.2012

В наличие есть вот такой драйвер на 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.*;

Помогите разобраться пожалуйста!

maodzi87
maodzi87 аватар
Offline
Зарегистрирован: 18.11.2012

Может есть какие то другие варианты управления двигателями,через подобные "управлялки" , или как управлять двигателями с клавиатуры через монитор порта хотя бы?

 

step962
Offline
Зарегистрирован: 23.05.2011

maodzi87 пишет:

при компиляции показывает ошибку и указывает на :import processing.serial.*;

Кто показывает ошибку?

maksim
Offline
Зарегистрирован: 12.02.2012

Вы понимаете что это код для процессинга??? И вы понимаете что еще скейтч есть для дуины???

Если да, то 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]
поэтому берете и пробуете переберать эти номера.

maodzi87
maodzi87 аватар
Offline
Зарегистрирован: 18.11.2012

Да я новичёк в этом деле просто! Спасибо и на этом,  только я вот буду здесь всех тревожить пока не разберусь во всём ,что меня интересует! А код для дуины таков:

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);
  }
}
        
      





 

 

 
maksim
Offline
Зарегистрирован: 12.02.2012

Так в процессинге код скомпилировался при смене номеров Serial.list()[х] ?

maodzi87
maodzi87 аватар
Offline
Зарегистрирован: 18.11.2012

Да скомпилировался. Как только вот поменять номер   Serial.list()[х] на СОМ3 ,т.к. дуина у меня стоит именно на этом порту, пробовал ставить Serial.list()[0] ,но это не то!?! 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Так и напишите "COM3" и будет Вам счастье. Вместо Serial.list()[0]. Я именно так и делал.

maodzi87
maodzi87 аватар
Offline
Зарегистрирован: 18.11.2012

"СОМ3" то куда именно вписывать ,наглядно пожалуйста покажите!?

maksim
Offline
Зарегистрирован: 12.02.2012

Можно так 

String portName="COM3";

или сразу так

myPort=new Serial(this, "COM3", 9600);

но если бы вы попереберали номера Serial.list()[х], то тоже бы завелось.

maodzi87
maodzi87 аватар
Offline
Зарегистрирован: 18.11.2012


 myPort.write(letter);

Подчёркивает, как Error inside Serial.write() и появляется недоделанное окно ,и всё на этом всё встало!

Что же это могло значить?

maksim
Offline
Зарегистрирован: 12.02.2012

Не знаю, что у вас там происходит, у меня код выше компилируется.
И вы же писали, что у вас скомпилировалось.... покажите весь код.

maodzi87
maodzi87 аватар
Offline
Зарегистрирован: 18.11.2012

да всё спасибо огромное,всё заработало ,нужно просто было выключить ардуину,выключить Processing,потом заново всё по очереди включить и залить скетч! 

АГРОМНЕЙШЕЕ СПАСИБО,Я ОЧЕНЬ БЛАГОДАРЕН ВАМ ЗА ПОМОЩЬ,ВСЁ ПРЕКРАСНО РАБОТАЕТ!!!!!УРА!!!