Serial port

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

 Народ, подскажите как считать с сериал порта число целиком?
Serial.read() не подходит ибо если ввести 152 он считает по отедльности 1, 5 и 2, а нада чтоб в 
int data; было число 152.

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

 п.с. я пробовал через стринговый массив, но 1) int data = int(string); не конвертирует 2)хз как точно получить колличество знаков.  

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

 void loop()
{
int availabble = 0;
FL = false;
i=0;
availabble = Serial.available();
while (Serial.available()>0)
{
FL = true;
test[i]=Serial.read()-48;
i++ ;
}
if (FL == true)
{
FL = false;
for(int j = 0; j != i; j++)
{
buff = buff + test[j];
}
Serial.print("available:");
Serial.println(availabble);
Serial.println(buff);
buff = "";
}
}
подскажите, почему при вводе 12345 он выводит так:
available:1
1
available:4
2345
почему для первого знака он как бы отдельно проходит?
 

Zaliv
Offline
Зарегистрирован: 05.03.2011

 Привел бы код целиком, а то кто знает, как у тебя там переменные объявлены.

Modular
Offline
Зарегистрирован: 05.03.2011

 Вот так:
int resultInt;
void setup(){
  Serial.begin(9600);
}
void loop() {
  if (Serial.available()>0) {
    resultInt = serReadInt();
    Serial.println(resultInt);
  }
  delay(1000);
}
int serReadInt()
{
  int i, serAva;
  char inputBytes [7]; // массив для хранения байтов
  char * inputBytesPtr = &inputBytes[0]; // указатель на первый элемент массива

  if (Serial.available()>0) // проверяем есть ли данные
 {
    delay(5);//чутка ждем, чтобы все данные прошли
    serAva = Serial.available(); // получаем количество доступных байт
    for (i=0; i<serAva; i++) // загружаем байты в массив
      inputBytes[i] = Serial.read();

    inputBytes[i] = '\0'; // дописываем NULL в конец массива
    return atoi(inputBytesPtr); // Вызываем atoi функцию, стандартная функция С
  }
  else
    return -1; // Возвращаем -1, если ничего не получили
}

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

 вот эта строка 
delay(5);//чутка ждем, чтобы все данные прошли
решила все мои проблемы, списибо )

Lolita1001
Offline
Зарегистрирован: 13.04.2012

Подскажите пожалуйста как реализовать данную задачу -

Необходимо посылать команды черезе com port , далее ардуино выполняет запрограммированные события по командам.

Суть загвоздки, нужно что бы команды были с "префиксами" -

1) Наприме команды для управления servo_приводом : "160s", "13s" , "Ns" означала что бы ардуино повернул серво привод на указанное число "N"

2) Команда для управления светодиодом: "160led", "13led" , "Nled" ( если колличество символов в "префиксе" критично и должно быть одинаковым , пусть будет "l") означала что бы ардуино установил яркость светодиода на указанное число "N"

Подскажите как программно убирать в данном случае последний символ и читать какой это символ, что бы в дальнейшем можно было сопоставить с необходимым и выполнить события.

Спасибо.

 

2ball
Offline
Зарегистрирован: 15.04.2012

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