чем писать в COM Poprt arduino

servilat
Offline
Зарегистрирован: 12.12.2013

День добрый!

стоит задача заменить старый девайс работающий через LPT порт компьютера

смысл работы простой в LPT(пин1) загоняем 1 при нажатии на ярлычек в виндах (подключая оборудование), а при нажатии на другой ярлык загоняеться в LPT(пин1) 0 (отключяя оборудование).

сейчас материнки идут без LPT и дополнительно приобретать LPT нет желания.

Какой програмулиной из командной строки(по ярлыку в виндах) можно менять на пинах ардуины уровни(те писать команды в прот ардуины)?

art100
Offline
Зарегистрирован: 09.03.2014

servilat пишет:

День добрый!

стоит задача заменить старый девайс работающий через LPT порт компьютера

смысл работы простой в LPT(пин1) загоняем 1 при нажатии на ярлычек в виндах (подключая оборудование), а при нажатии на другой ярлык загоняеться в LPT(пин1) 0 (отключяя оборудование).

сейчас материнки идут без LPT и дополнительно приобретать LPT нет желания.

Какой програмулиной из командной строки(по ярлыку в виндах) можно менять на пинах ардуины уровни(те писать команды в прот ардуины)?

я бы попробовал управление станком попользовать

автор именно это и делал переход с lpt на usb<->arduino uno

cnc_1_0_10.zip

страничку автора не помню сами надете?

автор связь windows с arduino uno 

код в uno такой зашивал


int motorPins[3][2] = {{8,9},{10,11},{12, 13}};
int count;
int count2[3] = {0,0,0};
int delayTime = 500;
int val = 0;
int rot=0;
int incomingByte = 0;
int sign=1;
int bz=0;

const int buttonPin = 2;
int buttonState = 0;

//Процедура настройки прошивки
void setup() {
 int i;
 Serial.begin(9600);
 
 for (i=0; i<3; i++) {
  for (count = 0; count < 4; count++) {
   pinMode(motorPins[i][count], OUTPUT); //установка режима работы цифровых pin'ов Ардуино
  }
 }
 pinMode(buttonPin, INPUT);
 delayTime=3; //задержка между шагами 3 мс (2 мс - время реакции ШД на подачу напряжения)
}

//Поворот двигателя с номерм sm на один шаг вперёд
void moveForward(int sm) {
 digitalWrite(motorPins[sm][1], HIGH);
 digitalWrite(motorPins[sm][0], HIGH);
 digitalWrite(motorPins[sm][0], LOW);
}

//Поворот двигателя с номерм sm на один шаг назад
void moveBackward(int sm) {
 digitalWrite(motorPins[sm][1], LOW);
 digitalWrite(motorPins[sm][0], HIGH);
 digitalWrite(motorPins[sm][0], LOW);
}

//Одновременный поворот двигателей 0, 1, 2 на x, y, z шагов соответственно
void MoveSM(long x, long y, long z) {
  long c[3], c2[3];
  double c1[3], d[3];
  long m, i;
  boolean flg;
  
  c[0] = x;
  c[1] = y;
  c[2] = z;
  
  m = 1;
  for (i=0; i<3; i++) {
    if (m < abs(c[i])) m = abs(c[i]);
  }
  
  for (i=0; i<3; i++) {
    c1[i] = 0;
    d[i] = 1.0 * c[i] / m;
    c2[i] = 0;
  }

  flg = false;
  for (i=0; i<3; i++) {
    if (abs(c1[i]) < abs(c[i])) flg=true;
  }
  while (flg) {
    flg=false;
    for (i=0; i<3; i++) {
      if (abs(c1[i]) < abs(c[i]))
       c1[i] += d[i];
      if (abs(c1[i]) - abs(c2[i]) >= 0.5) {
       if (c[i]>0) {
        c2[i]++;
        moveForward(i);
       } else {
        c2[i]--;
        moveBackward(i);
       }
      }
      if (abs(c1[i]) < abs(c[i])) flg=true;
    }
    delay(2);
    if (z>0) {
      buttonState = digitalRead(buttonPin);
      if (buttonState == HIGH) {
        flg=false;
      }
    }
  }
  if (z>0) {
    Serial.println(c2[2]);
    bz=c2[2];
  }
}

//Основной цикл
void loop() {
 if (Serial.available() > 0) { //Пришла команда
  long c[3]={0,0,0};
  int i;
  sign=1;
  i=0;
  incomingByte = Serial.read();
  while (incomingByte!=';') { //Читаем входящую строку, признак конца строки знак "точка с запятой"
   if (c[i]==0) {
    if (incomingByte=='-')
     sign=-1;
   }
   if (incomingByte==',') {
    c[i]*=sign;
    sign=1;
    i++;
   } else if (incomingByte>='0' && incomingByte<='9') {
    c[i]=c[i]*10+incomingByte-'0';
   }
   while (Serial.available() == 0) {
    delay(2);
   }
   incomingByte = Serial.read();
  }
  c[i]*=sign;
  bz=0;
  MoveSM(c[0],c[1],c[2]); //Вращаем двигатели на заданное число шагов
  if (bz>0) {
    MoveSM(0,0,-bz);
  }
  Serial.println("OK");  //Отправляем компьютеру сообщение "OK", значит можно высылать новую команду
 }
 else
  delay(2); //Если ничего не пришло, ждём 2 миллисекуды.
}

 

если получится отпишитесь

StrangerM
Offline
Зарегистрирован: 02.11.2013

Взять да купить адаптер USB/LPT. А так (наверное проще всего) на Вижуал Бейсике написать можно. Или Си.

servilat
Offline
Зарегистрирован: 12.12.2013

смысл понятен.

спасибо.

std
Offline
Зарегистрирован: 05.01.2012

Вот еще: http://www.ftdichip.com/Support/FTSwExamples.htm

если свою софтину писать.