+7-960-0655211 (Билайн)
+7-987-4207734 (МТС)
интернет-магазин
доставка по России и СНГ
работаем с 2010 года

Форум

ГлавнаяОбщениеФорумТехнологииПодключение Arduino UNO и A4988 Stepper Motor Driver
Страницы: Пред. 1 2
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Цитата
Александр Коробцов пишет:
можно ли управлять скоростью вращения 1 шага у шд?

Нет, это невозможно. Уменьшайте его дроблением и/или редуктором.
 
С праздником!
Возникла проблема при управлении ШД через Processing. Через IDE Arduino все работает ОК, а при выполнении скетча через Processing ШД не реагирует.
Запускаю скетч (upd ate(100,10,D9,D10) запускал и в Se tup и в Draw- ШД не крутит) и тишина, хотя с морганием светодиодов проблем нет.
Библиотеки подключены:
import processing.serial.*;
import cc.arduino.*;

Подскажите, пожалуйста, в какую сторону копать?

Код переделал:

Код
public void update(int steps, int time, int pin_step, int pin_dir){
  if(steps>0) arduino.digitalWrite(pin_dir, Arduino.HIGH);
  else{
    arduino.digitalWrite(pin_dir, Arduino.LOW);
    steps=-steps;
  }

  for(int a=0; a<steps*2; a++){
    delay(time);
    if (arduino.digitalRead(pin_step)==Arduino.LOW){
      arduinoPinStep=Arduino.HIGH;  
    }
    if (arduino.digitalRead(pin_step)==Arduino.HIGH){
      arduinoPinStep=Arduino.LOW;  
    }
    arduino.digitalWrite(pin_step, arduinoPinStep);
  }
}
 
По одной этой функции вообще невозможно что-то понять. Нужен весь код!
 
Сам скетч:
1 часть

Код
import controlP5.*;
import processing.serial.*;
import cc.arduino.*;

Arduino arduino;
ControlP5 cp5;
public int myColor = color(0,0,0);
public int speedVal; 
public int stepMode = 100;
public int speedValSlider=10;
public boolean joyPadUse=true;

public float directionVal=0;
Knob myKnobB;
Slider speedSlider;

///**********Arduino
public int joy1ValTemp=0;
public int D9=9;
public int D10=10;
public int switchPin= 8;
public int ledPin= 13;
public int ledOn =Arduino.LOW;
public int ms1 =2;
public int ms2 =3;
public int ms3 =4;
public int maxVal=20;
public int lastButton = Arduino.LOW;
public int currentButton = Arduino.LOW;
public int buttonOn = Arduino.LOW;
public int buttonMode=0;//0-full step, 1-1/4 step, 2-1/16 step
public int joy1aPin=4;
public int joy1bPin=5;
public int arduinoPinStep;
//*********************************

void setup() {
  size(400,400);
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[2], 57600);//57600
  smooth();
  noStroke();
  cp5 = new ControlP5(this);
  
  // change the default font to Verdana
  PFont p = createFont("Bookman Old Style",10); 
  cp5.setControlFont(p);
  
  myKnobB = cp5.addKnob("direction")
               .setRange(0,359)
               .setValue(0)
               .setPosition(25,140)
               .setRadius(120)
               .setNumberOfTickMarks(0)
               .setTickMarkLength(0)
               .snapToTickMarks(false)
               .setColorForeground(color(255))
               .setColorBackground(color(0, 160, 100))
               .setColorActive(color(255,255,0))
               ;
  myKnobB.setConstrained(false).hideTickMarks().setMin(0).setMax(270);  
  myKnobB.setValue(135);
  
  // create a toggle and change the default look to a (on/off) switch look
  cp5.addToggle("toggle")
     .setPosition(80,20)
     .setSize(80,40)
     .setValue(true)
     .setMode(ControlP5.SWITCH)
     ;
 
  // add a vertical slider
  speedSlider=cp5.addSlider("speed",0,maxVal,0,width-110,20,80,height-100);
  cp5.addSlider("stepMode",0,255,10,10,10,100);
  Slider s1 = (Slider)cp5.controller("stepMode");
  s1.setNumberOfTickMarks(5);
  
  //********Arduino
  // set up the LED pin:
  arduino.pinMode(ledPin, Arduino.OUTPUT);
  // blink the LED:
  blink(3,200);

  arduino.pinMode(ms1, Arduino.OUTPUT);
  arduino.pinMode(ms2, Arduino.OUTPUT);
  arduino.pinMode(ms3, Arduino.OUTPUT);

  arduino.pinMode(D9, Arduino.OUTPUT);
  arduino.pinMode(D10, Arduino.OUTPUT);
  //arduino.digitalWrite(D9, Arduino.HIGH);
  //arduino.digitalWrite(D10, Arduino.HIGH);
  
  arduino.pinMode(switchPin, Arduino.INPUT);
  arduino.pinMode(joy1aPin,Arduino.INPUT);//a analog enter for joystick 1 axe
  arduino.pinMode(joy1bPin,Arduino.INPUT);//b analog enter for joystick 1 axe

  
 //************************************
}
 
Сам скетч:
2 часть

Код
void controlEvent(ControlEvent theEvent) {
  if(theEvent.isController()) {  
    if (theEvent.controller().name()== "direction") { 
      directionVal=theEvent.controller().value()-135;

      if (directionVal>359){ 
        directionVal=directionVal-360+135;
        myKnobB.setValue(directionVal);       
      }
      if (directionVal<0 && directionVal>-360){ 
        directionVal=360-abs(directionVal);     
      }  
      if (directionVal<-359){ 
        directionVal=135;
         myKnobB.setValue(135);   
      }
    }  
    if (theEvent.controller().name()== "speed") { 
      //speedSlider.setValue(speedVal+135);
      speedValSlider=maxVal-(int)theEvent.controller().value();
    }
        
    print("control event from : "+theEvent.controller().name());
    println(", value : "+directionVal);    
  }  
}

void draw() {
  background(stepMode);

  //arduino.digitalWrite(D9, Arduino.HIGH);
//Вот тут проблема, шд должне был повернуться на 100 шагов!!!
  update(100, 10, D9, D10);
    delay(1000);
  
  //***********Arduino
  currentButton = debounce(lastButton);
  if(lastButton == arduino.LOW && currentButton == arduino.HIGH){
  //  ledOn =!ledOn;     
     buttonMode=buttonMode+1;
     if(buttonMode>2) buttonMode=0; 
   }
    
   if (buttonMode == 0){ //запускаем full step
     arduino.digitalWrite(ms1, Arduino.LOW);
     arduino.digitalWrite(ms2, Arduino.LOW);     
     arduino.digitalWrite(ms3, Arduino.LOW);
     ledOn=arduino.HIGH;
   }
   if (buttonMode == 1){ //запускаем дробный шаг 1/4
     arduino.digitalWrite(ms1, Arduino.LOW);
     arduino.digitalWrite(ms2, Arduino.HIGH);     
     arduino.digitalWrite(ms3, Arduino.LOW);
     blink(1,10);
   }
   if (buttonMode == 2){ //запускаем дробный шаг 1/16
     arduino.digitalWrite(ms1, Arduino.HIGH);
     arduino.digitalWrite(ms2, Arduino.HIGH);     
     arduino.digitalWrite(ms3, Arduino.HIGH);
     ledOn=Arduino.LOW;
   }
 
Сам скетч:
3 часть

Код
  lastButton= currentButton;
  arduino.digitalWrite(ledPin,ledOn);
  
  if(joyPadUse==true){
    int joy1aVal=arduino.analogRead(joy1aPin);
    int joy1bVal=arduino.analogRead(joy1bPin);
    int joy1Val=joy1aVal-joy1bVal+329-123;
    if (joy1Val>0 && joy1Val<62)joy1Val=0;
    if (joy1Val<0 && joy1Val>-22)joy1Val=0;
  
    if (joy1Val>0) joy1ValTemp= (int)map(joy1Val,63,204,maxVal,1); //112 
    if (joy1Val<0) joy1ValTemp= (int)map(joy1Val,-141,-23,-1,-maxVal); //-135
    if (joy1ValTemp==maxVal || joy1ValTemp==-maxVal || joy1Val==0)joy1ValTemp=0;
  }else{
    joy1ValTemp=speedValSlider;
  }
  //println(joy1Val);  // for testing
  /*
  if (joy1ValTemp<0){
    upd ate(-1, abs(joy1ValTemp), D9, D10);
    println("delay = "+joy1ValTemp);
  }
  if (joy1ValTemp>0){
    upd ate(1, joy1ValTemp, D9, D10);
    println("delay = "+joy1ValTemp);
  }
  */
  //********************************************

}

public void speed(int speedValue) {
  myColor = color(speedValue);
  speedVal=speedValue;
  println("Slider Speed = "+speedValue);
}

void toggle(boolean theFlag) {
  //if(theFlag==true) {
   // col = color(255);
  //} else {
  //  col = color(100);
 // }
  println("a toggle event.");
}

void keyPressed() {
  // default properties load/save key combinations are 
  // alt+shift+l to load properties
  // alt+shift+s to save properties
  if(key=='1') {
    cp5.saveProperties(("hello.ser"));
  } else if(key=='2') {
    cp5.loadProperties(("hello.ser"));
  }
  
    switch(key) {
    case('1'):myKnobB.setValue(180+135);break;
    case('2'):myKnobB.setValue(360+135);break;
    case('3'):myKnobB.se tValue(135);break;
  }

}

public void update(int steps, int time, int pin_step, int pin_dir){
  if(steps>0) arduino.digitalWrite(pin_dir, Arduino.HIGH);
  else{
    arduino.digitalWrite(pin_dir, Arduino.LOW);
    steps=-steps;
  }

  for(int a=0; a<steps*2; a++){
    delay(time);
    if (arduino.digitalRead(pin_step)==Arduino.LOW){
      arduinoPinStep=Arduino.HIGH;  
    }
    if (arduino.digitalRead(pin_step)==Arduino.HIGH){
      arduinoPinStep=Arduino.LOW;  
    }
    arduino.digitalWrite(pin_step, arduinoPinStep);
  }
}

// Blink the rese t LED:
void blink(int howManyTimes, int delaytime) {
  for (int i=0; i< howManyTimes; i++) {
    arduino.digitalWrite(ledPin, Arduino.HIGH);
    delay(delaytime);
    arduino.digitalWrite(ledPin, Arduino.LOW);
    delay(delaytime);
  }
}

int debounce(int last){
  int current = arduino.digitalRead(switchPin);
  if (last != current){
    delay(10);
    current= arduino.digitalRead(switchPin);
  }
  return current;
}
 
Вопрос в том, почему Processing не обрабатывает команду:

Код
arduino.digitalWrite(pin_step, Arduino.HIGH);

???
 
Цитата
Александр Коробцов пишет:
Вопрос в том, почему Processing не обрабатывает команду

Не могу сказать, ни разу даже не запускал этот Processing. Я пользуюсь AVR Studio 5.1, там великолепный Debuger с эмулятором.
Страницы: Пред. 1 2