Arduino Mega обмен данными ожидание serial monitor
- Войдите на сайт для отправки комментариев
Пнд, 04/03/2013 - 15:58
//ДШИ 1 ГОРИЗОНТАЛЬ//////////////////////// int dirpin1 = 10; int steppin1 = 11; int leftPin1 = 67; int rightPin1 = 68; int Stop1 = 54; int Stop2 = 55; //ДШИ 2 ВЕРТИКАЛЬ//////////////////////// int dirpin2 = 12; int steppin2 = 13; int downPin2 = 66; int upPin2 = 65; int Stop3 = 56; int Stop4 = 57; int speedPin1 = 63; // pin1 скорости int speedPin2 = 64; // pin2 скорости int datch = 9; // pin касания int magn = 53; // pin столика int stol = 69; // pin кнопки стола int diod = 62; // pin диод касания int rele = 52; // pin реле int brak1 = 50; // pin брака1 по току int brak2 = 51; // pin брака2 по току int signbrak1 = 48; // pin1 сигнала брака по току int signbrak2 = 49; // pin2 сигнала брака по току int rstate, lstate, ustate, dstate = 0; int i, a, b, c, d, e, spPin1, spPin2, rval, lval, rightStop, leftStop, uval, dval, upStop, downStop, S, V, dat, sto, sstate, sb; char direct[3]; //3 char st[6]; //6 char sp[2]; //2 char buffer[12]; //12 void setup() { Serial.begin(9600); pinMode(dirpin1, OUTPUT); pinMode(steppin1, OUTPUT); pinMode(rightPin1, INPUT); pinMode(leftPin1, INPUT); pinMode(Stop1, INPUT); pinMode(Stop2, INPUT); pinMode(dirpin2, OUTPUT); pinMode(steppin2, OUTPUT); pinMode(downPin2, INPUT); pinMode(upPin2, INPUT); pinMode(Stop3, INPUT); pinMode(Stop4, INPUT); pinMode(speedPin1, INPUT); pinMode(speedPin2, INPUT); pinMode(datch, INPUT); pinMode(magn, OUTPUT); pinMode(stol, INPUT); pinMode(diod, OUTPUT); pinMode(rele, OUTPUT); pinMode(brak1, OUTPUT); pinMode(brak2, OUTPUT); pinMode(signbrak1, OUTPUT); pinMode(signbrak2, INPUT); } void loop() { int k = 0; a = 20; // СКОРОСТЬ1 b = 100; // СКОРОСТЬ2 ШАГОВАЯ ПАУЗА c = 600; // СКОРОСТЬ2 ШАГОВАЯ d = 200; // СКОРОСТЬ2 КОЛИЧЕСТВО ШАГОВ e = 1; // СКОРОСТЬ3 rval = digitalRead(rightPin1); // Переменные горизонтального ДШИ1 lval = digitalRead(leftPin1); rightStop = digitalRead(Stop1); leftStop = digitalRead(Stop2); uval = digitalRead(upPin2); // Переменные вертикального ДШИ2 dval = digitalRead(downPin2); upStop = digitalRead(Stop3); downStop = digitalRead(Stop4); spPin1 = digitalRead(speedPin1); // Переменная скорости1 spPin2 = digitalRead(speedPin2); // Переменная скорости2 dat = digitalRead(datch); // Переменная датчика касания sto = digitalRead(stol); // Переменная кнопки подъема столика sstate = digitalRead(magn); // Переменная состояния магнита столика sb = digitalRead(signbrak2); // Переменная сигнала брака по току digitalWrite(datch, HIGH); // Запуск обратной логики касания digitalWrite(signbrak1, HIGH); // Питание на pin1 сигнала брака direct[0] = '\n'; st[0] = '\n'; sp[0] = '\n'; if (sto == HIGH) { if (sstate == LOW) { digitalWrite(magn, HIGH); delay(400); } if (sstate == HIGH) { digitalWrite(magn, LOW); delay(400); } } if (dat == HIGH) { digitalWrite(diod, HIGH); } else { digitalWrite(diod, LOW); } ////ДШИ1///////////////////////////////////////////// // right SPEED 1. if (rval == HIGH && spPin1 == LOW && spPin2 == LOW && rightStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin1, LOW); // Выбираем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delay(a); } // left SPEED 1. if (lval == HIGH && spPin1 == LOW && spPin2 == LOW && leftStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin1, HIGH); // Меняем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delay(a); } // right SPEED 2. if (rval == HIGH && spPin1 == HIGH && spPin2 == LOW && rightStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<d; i++) { digitalWrite(dirpin1, LOW); // Выбираем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delayMicroseconds(c); } delay(b); } // left SPEED 2. if (lval == HIGH && spPin1 == HIGH && spPin2 == LOW && leftStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<d; i++) { digitalWrite(dirpin1, HIGH); // Выбираем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delayMicroseconds(c); } delay(b); } // right SPEED 3. if (rval == HIGH && spPin1 == LOW && spPin2 == HIGH && rightStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin1, LOW); // Выбираем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delayMicroseconds(e); } // left SPEED 3. if (lval == HIGH && spPin1 == LOW && spPin2 == HIGH && leftStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin1, HIGH); // Меняем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delayMicroseconds(e); } ////ДШИ 2///////////////////////////////////////// // up SPEED 1. if (uval == HIGH && spPin1 == LOW && spPin2 == LOW && upStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin2, LOW); // Выбираем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delay(a); } // down SPEED 1. if (dval == HIGH && spPin1 == LOW && spPin2 == LOW && downStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin2, HIGH); // Меняем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delay(a); } // up SPEED 2. if (uval == HIGH && spPin1 == HIGH && spPin2 == LOW && upStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<d; i++) { digitalWrite(dirpin2, LOW); // Выбираем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delayMicroseconds(c); } delay(b); } // down SPEED 2. if (dval == HIGH && spPin1 == HIGH && spPin2 == LOW && downStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<d; i++) { digitalWrite(dirpin2, HIGH); // Выбираем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delayMicroseconds(c); } delay(b); } // up SPEED 3. if (uval == HIGH && spPin1 == LOW && spPin2 == HIGH && upStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin2, LOW); // Выбираем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delayMicroseconds(e); } // down SPEED 3. if (dval == HIGH && spPin1 == LOW && spPin2 == HIGH && downStop == LOW) { digitalWrite(magn, LOW); digitalWrite(dirpin2, HIGH); // Меняем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delayMicroseconds(e); } while(Serial.available() > 0) // Загоняем прочитанное в буфер { buffer[k] = Serial.read(); k++; delay(5); } buffer[k++] = '\n'; // Закрываем массив if(k>0) // Если буфер наполнен { sscanf(buffer, "%s,%d,%d", &direct, &st, &sp); // Разбираем его на части отделенные запятой } S = String(st).toInt(); V = String(sp).toInt(); /* //ПОДЪЕМ СТОЛИКА if ((String)direct == "m") { digitalWrite(magn, HIGH); } */ // БЛОК РЕЛЕ if ((String)direct == "rh") { digitalWrite(rele, HIGH); } if ((String)direct == "rl") { digitalWrite(rele, LOW); } // ПРОВЕРКА КАСАНИЯ if ((String)direct == "a") { // ДАТЧИК КАСАНИЯ. if (dat == HIGH) // Контакт { Serial.println(1, DEC); delay(100); } else // Нет контакта { Serial.println(2, DEC); delay(100); } } // ПРОВЕРКА ГОДНОСТИ ПО ТОКУ if ((String)direct == "sb") { // СИГНАЛ БРАКА. if (sb == HIGH) // Брак { Serial.println(3, DEC); delay(100); } else // Годный { Serial.println(4, DEC); delay(100); } } // Маркировка бракованного диода1 if ((String)direct == "b1") { digitalWrite(brak1, HIGH); delay(100); digitalWrite(brak1, LOW); } // Маркировка бракованного диода2 if ((String)direct == "b2") { digitalWrite(brak2, HIGH); delay(100); digitalWrite(brak2, LOW); } // Крутим вправо (RIGHT)///////////////////// if ((String)direct == "r" && rightStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<S; i++) { digitalWrite(dirpin1, LOW); // Выбираем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delay(V); } digitalWrite(magn, HIGH); } // Крутим влево (LEFT)/////////////////////// if ((String)direct == "l" && leftStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<S; i++) { digitalWrite(dirpin1, HIGH); // Выбираем направление digitalWrite(steppin1, LOW); digitalWrite(steppin1, HIGH); delay(V); } digitalWrite(magn, HIGH); } // Крутим вверх (UP)///////////////////////// if ((String)direct == "u" && upStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<S; i++) { digitalWrite(dirpin2, LOW); // Выбираем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delay(V); } digitalWrite(magn, HIGH); } // Крутим вниз (DOWN)//////////////////////// if ((String)direct == "d" && downStop == LOW) { digitalWrite(magn, LOW); for (i=0; i<S; i++) { digitalWrite(dirpin2, HIGH); // Выбираем направление digitalWrite(steppin2, LOW); digitalWrite(steppin2, HIGH); delay(V); } digitalWrite(magn, HIGH); } }
Программа написана для автоматизации измерений диодов на советском зонде. Автоматизация производится с помощью гррафической среды LabVIEW. Проблема в следующем:
Сериал монитор при отправке команды "a,200,2" не отвечает. Ответ придет только если монитор повисит секунд 10 после включения. Это нормальная практика?
На стороне LabVIEW та же ситуация: программа начинает работать спустя 10 секунд.
С уважением, Александр.
Не вникая, просто бросилось в глаза
В C, признаком конца строки является символ с кодом ноль, а не перевод строки, поэтому