Переменные через Serial
- Войдите на сайт для отправки комментариев
Здравствуйте. Подскажите как решить следующую проблему. Есть три переменных, public,int, имена a, b, c (для примера.) Требуется: При старте ардуинки, в терминал должно выводиться "Vvedi A". И ожидать ввода. Ввели А, нажали ENTER, потом "Vvedi B". И ожидать ввода.. Когда все три переменных будут заполнены, программа должна выполнять другие действия,(например моргать диодом с длительностью a) и не запрашивать больше ввода, до ресета. Есть такой код
int a, b, c, set; void setup(void) { Serial.begin(9600); pinMode(13,OUTPUT); } void loop(void) { if(set==0) //ЕСЛИ SET не равен 1, то считываем переменные { Serial.println("Vvedi A"); a=readdata(); // назначаем а значение из функции readdata() Serial.println("Vvedi B"); b=readdata(); Serial.println("Vvedi C"); c=readdata(); set=1; // Запрещаем более считывать переменные, и начинаем выполнять дальнейший код } Serial.print("Prisvoeno A "); Serial.print(a, DEC); Serial.println(); Serial.print("Prisvoeno B "); Serial.print(b, DEC); Serial.println(); Serial.print("Prisvoeno C "); Serial.print(c, DEC); Serial.println(); digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(1000); } int readdata() { byte x=0; do { if (Serial.available()> 0) { delay (100); x= Serial.read(); } }while(x==0); return x; }
Но есть проблемы.
1. Вводимые переменные могут принимать значение от 0 до 32000
2. Код кушает только один байт из Serial.read(), а из п.п 1 их может быть до 5 сразу.
3. На int назначается ASCII код символа, а не он сам.
Пробовал через массив char, но тоже не получилось. :(
int readdata() { char* a ="{aaaaa}"; int i=0; do { while(Serial.available()) { a[i] = Serial.read(); i++; } }while(a[i] != '\0'); //Выполнять, пока не попадется ENTER //}while(atoi(a)== 0); //Так тоже пробовал :( //a[i] = '\0'; Serial.print("Prinyato"); Serial.println(atoi(a),DEC); //переводим char в int и печатаем для теста return atoi(a); // Возвращаем значение функции, переводим char в int }
У меня похожая задача. Вот часть кода. Понимаю что не идеально но работает.
inbyte - '0';" переводит из кода символа в сам символ.
Искал, ничего не нашел. Подумал, и написал.. Изменненая функция readdata() для моего кода выше. Пожалуйста пользуйте, кому нужно.