Вывод/чтение в СОМ значений, пересчёт
- Войдите на сайт для отправки комментариев
Ср, 19/12/2012 - 13:32
Мне нужно сделать что-то типа консоли на основе "монитора порта" т.е. иными словами вводишь значения коэфф N, потом R прям с клавиатуры программа пересчитывает по формуле и выдает значение F. Все вроде работает но есть один глюк часто "монитор порта" требует несколько раз ввести одно и тоже значение N или тут же вводит R c F, а бывает всё норм N вводишь потом R и тут же выдается F. Вот текст программы:
int N;
int R;
float F;
byte index;
char inData[20];
void setup()
{
Serial.begin(9600); //установка порта на скорость 9600 бит/сек
//noInterrupts();
}
void loop()
{
if (Serial.available()>0)
{
if(index < 19)
{
N = Serial.read();
inData[index] = N;
index++;
inData[index] = '\0';
Serial.print ("Enter N:");
Serial.println (N);
delay (1000);
}}
if (Serial.available()>0)
{
R = Serial.read();
F = Serial.read();
F = (float)N / R;
Serial.print ("Enter R:");
Serial.println (R);
delay (500);
Serial.print ("Result F:");
Serial.println (F);
}}
Честно говоря не понятно что вы хотите от этого кода. Посмотрите ка здесь.
Может этого?
void setup() { Serial.begin(9600); } void loop() { Serial.print ("Enter N: "); while(!Serial.available()); int N = Serial.parseInt(); Serial.println(N); Serial.print("Enter R: "); while(!Serial.available()); int R = Serial.parseInt(); Serial.println(R); float F = (float)N / R; Serial.print("Result F: "); Serial.println(F); Serial.println(); }Да) Спасибо большое!!!
Так понимаю что нужно было в нужным местах раставить операторы, а не как я сделал
Нет, вы пытались сами прочитать буфер, поместив его в массив, потом не верно склеивали число, так как у вас программа больше ничего не делает, то можно воспользоваться
Serial.parseInt();, которая все сделает за вас и вернет вам готовое число, но это блокирующая функция - то есть пока она работает остальное ждет. И по этой же причине в вашем случае проще написатьwhile(!Serial.available());- то есть программа крутится в цикле и ждет пока что-нибудь не прийдет по сериал.Serial.parseInt() - перводит в десятичные числа а не в этот аски-код
Serial.parseInt() - переводит ASCII-коды в цифры и склеивает их в число.
Да очень удобный этот оператор Serial.parseInt() особенно когда работаешь в терминале (консоле) допустим мы делали ФАПЧ кот управляется от терминала и как раз оператор этот пригодился