serial

OniL
Offline
Зарегистрирован: 12.05.2015

Помогите с программой! через монитор порт нужно задавать 2 числа,которые будут отвечать за кол-во оборотов шаговика! интересует сама операция передачи! заранее спасибо

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Serial.parseInt

vov4ik
Offline
Зарегистрирован: 10.09.2013
OniL
Offline
Зарегистрирован: 12.05.2015

а если над вводить две разные скорости,для двух Шд! то как это будет выглядеть?

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Да много вариантов, да хоть так

int speed1, speed2;
byte OneOrTwo = 0;

void loop()
{
  if(Serial.available())
    if(OneOrTwo==0)
    {
      speed1 = Serial.parseInt();
      OneOrTwo=1;
    }
    else
    {
      speed2 = Serial.parseInt();
      OneOrTwo=0;
    }
}

Задается попорядку, сначало скорость 1 потом скорость 2 потом снова 1 потом снова 2 и так по кругу.

raptoridze
Offline
Зарегистрирован: 10.01.2014
    if (Serial.available() > 0) {  //если пришли данные
              char  incomingByte = Serial.read(); // считываем байт
            
              if (incomingByte == 98) { //английская буква b
                int priem = Serial.parseInt();

              }
            
                if (incomingByte == 97) {   //английская буква a
            int priem = Serial.parseInt();
            
            
                }
              
            }   

в мониторе пишешь b50

попадаешь в первый if

в мониторе пишешь a50

попадаешь во второй if

OniL
Offline
Зарегистрирован: 12.05.2015

огромное спасибо! 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

          if (incomingByte == 98) { //английская буква b

          if (incomingByte ==   ' b' ) { //английская буква b
 

raptoridze
Offline
Зарегистрирован: 10.01.2014

а я ломал голову :)))

я когда-то на дельфи и визуал бэсик программил )) а там со всеми чарами на много проще ) стринг используешь везде ....и не морочишь голову кавычки одинарные или двойные )) 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
OniL
Offline
Зарегистрирован: 12.05.2015

Подскажите,что делаю не так! задаю данные,а ШД не крутится(

#include <AccelStepper.h>
 
AccelStepper stepper1(1, 5, 4);
int a ; 
int b ;
 
byte OneOrTwo = 0;
void setup(){
  Serial.begin(9600);
  stepper1.setMaxSpeed(600);
}
void loop()
{
  if(Serial.available())
  {
    if(OneOrTwo==0)
    {
      a = Serial.parseInt();
      Serial.print("a=");
      Serial.println(a);
      OneOrTwo=1;
      return;
      
    }
    if(OneOrTwo==1)
    {
      b = Serial.parseInt();
      Serial.print("b=");
      Serial.println(b);    
      OneOrTwo=0;
    }
   
    if(a>0&&b>0){
    stepper1.moveTo(1024);
    stepper1.setSpeed(600);
    stepper1.runSpeedToPosition();  
  }}
    
}
X-Dron
Offline
Зарегистрирован: 24.01.2015

Что вы человека путаете. Все гораздо проще.
Я ему уже писал на амперке, что есть классический пример
http://www.arduino.cc/en/Tutorial/ReadASCIIString

В мониторе вводятся числа, разделенные запятой, по переводу строки принятые значения идут на дальнейшую обработку.

#include <AccelStepper.h>
 
AccelStepper stepper1(1, 5, 4);
int a; 
int b;
 
void setup(){
  Serial.begin(9600);
  stepper1.setMaxSpeed(600);
}

void loop() {
  // if there's any serial available, read it:
  while (Serial.available() > 0) {
    a = Serial.parseInt();
    b = Serial.parseInt();
 
    if (Serial.read() == '\n') {
      a = 255 - constrain(a, 0, 1024);
      b = 255 - constrain(b, 0, 1024);
      Serial.print("a=");
      Serial.println(a);
      Serial.print("b=");
      Serial.println(b);
    }
  }
  //Используем полученные значения 
}

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Проверил, можно и через пробел.
Только в мониторе надо чтобы было включено добавление символа новой строки.