Serial port
- Войдите на сайт для отправки комментариев
Пт, 08/04/2011 - 21:35
Народ, подскажите как считать с сериал порта число целиком?
Serial.read() не подходит ибо если ввести 152 он считает по отедльности 1, 5 и 2, а нада чтоб в
int data; было число 152.
п.с. я пробовал через стринговый массив, но 1) int data = int(string); не конвертирует 2)хз как точно получить колличество знаков.
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
почему для первого знака он как бы отдельно проходит?
Привел бы код целиком, а то кто знает, как у тебя там переменные объявлены.
Вот так:
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, если ничего не получили
}
вот эта строка
delay(5);//чутка ждем, чтобы все данные прошли
решила все мои проблемы, списибо )
Подскажите пожалуйста как реализовать данную задачу -
Необходимо посылать команды черезе com port , далее ардуино выполняет запрограммированные события по командам.
Суть загвоздки, нужно что бы команды были с "префиксами" -
1) Наприме команды для управления servo_приводом : "160s", "13s" , "Ns" означала что бы ардуино повернул серво привод на указанное число "N"
2) Команда для управления светодиодом: "160led", "13led" , "Nled" ( если колличество символов в "префиксе" критично и должно быть одинаковым , пусть будет "l") означала что бы ардуино установил яркость светодиода на указанное число "N"
Подскажите как программно убирать в данном случае последний символ и читать какой это символ, что бы в дальнейшем можно было сопоставить с необходимым и выполнить события.
Спасибо.
сначала посимвольно собирать в массив, как указано выше, потом определять величину массива, затем читать последнее значение, затем собирать из предыдущих значений параметр