void setup() {
Serial.begin(9600); // Инициализация на скорости 9600 бод
}
Чтение :
void loop() {
if (Serial.available() > 0 ) {
// есть входящие данные
}
}
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
Serial.print((char)Serial.read());
// или
// char c = Serial.read();
// Serial.print(c);
}
} void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available()) {
Serial.println(Serial.read());
}
}
Отправьте текст abc в поле ввода монитора порта, он вернётся как коды символов 97, 98, 99 - соответствуют кодам символов из таблицы. void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
int c = Serial.read();
Serial.print(c);
}
}
такой код при отправке 1 в порт выдаст 49 void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
int c = Serial.read() - '0';
Serial.print(c);
}
}
такой код при отправке 1 в порт выдаст 1 void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
int c = Serial.ParseInt();
Serial.print(c);
}
}
такой код при отправке 105 в порт выдаст 105 но с небольшой задержкой void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
// float числа
float f = Serial.parseFloat();
Serial.println(f);
}
} void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
String s = Serial.readString();
Serial.println(s);
}
} void setup() {
Serial.begin(9600);
Serial.setTimeout(50);
}
void loop() {
if (Serial.available()) {
String s = Serial.readString();
Serial.println(s);
}
}
между отправкой в монитор и получением текста обратно не будет такой заметной паузы. void setup() {
Serial.begin(9600);
// стандартный тайм-аут
}
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil(';');
Serial.println(s);
}
}
Отправьте на МК какой-нибудь текст, например test - он вернётся с задержкой. А если отправить test; - без задержки.
void setup() {
Serial.begin(9600);
// стандартный тайм-аут
}
void loop() {
if (Serial.available()) {
String s = Serial.readStringUntil('\n');
Serial.println(s);
}
} void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
String key = Serial.readStringUntil(':');
String val = Serial.readStringUntil('\n');
Serial.println(key);
Serial.println(val);
Serial.println();
}
}
Нужно включить отправку NL в настройках монитора порта Цикл While
Цикл while — это конструкция в программировании, которая позволяет повторять определенный блок кода пока выполняется заданное условие.while (условие) {
// код, который будет выполняться
// пока условие истинно
}
пример
int i = 0;
while (i < 5) {
Serial.println(i);
i++;
} Важные особенности while
Бесконечный цикл
Если условие никогда не становится ложным, программа зациклится:
Условие должно меняться
Важно изменять переменные в теле цикла, иначе он может стать бесконечным
Проверка перед выполнением
Условие проверяется до выполнения кода внутри цикла
Использования для ввода переменных
while (!Serial.available()) {
// ждем, пока пользователь что-то введет
} Serial.available() — это функция, которая проверяет, есть ли данные во входном буфере последовательного порта.
! — это оператор отрицания (NOT), который инвертирует результат.
Таким образом, while (!Serial.available()) означает:
“Пока в буфере последовательного порта нет данных”
“Жди, пока пользователь что-то введет”
Сравнение с другими циклами
while отличается от for тем, что:
От do-while отличается тем, что:
Практические советы
Пример
void setup() {
Serial.begin(9600); // Инициализация Serial порта
// Объявляем переменные
int integerNumber;
float floatNumber;
// Ввод целого числа
Serial.println("Integer number input example:");
Serial.print("Enter an integer: ");
// Ждем ввода целого числа
while (!Serial.available()) {
// Ничего не делаем, просто ждем
}
// Читаем введенное число
integerNumber = Serial.parseInt();
// Выводим результат
Serial.print("You entered an integer: ");
Serial.println(integerNumber);
// Добавляем пустую строку для красоты
Serial.println();
// Ввод дробного числа
Serial.println("Float number input example:");
Serial.print("Enter a float number: ");
// Ждем ввода дробного числа
while (!Serial.available()) {
// Ничего не делаем, просто ждем
}
// Читаем введенное число
floatNumber = Serial.parseFloat();
// Выводим результат
Serial.print("You entered a float number: ");
Serial.println(floatNumber);
}
void loop() {
// В этом примере loop не используется
}
ЗАДАНИЕ
Научиться выполнять арифметические вычисления с различными типами данных в Arduino и формировать информативный вывод результатов.| Вариант | Пример 1 (целые числа) | Пример 2 (целые и вещественные) |
|---|---|---|
| 1 | Переменные: a = 12, b = 5, c = 3 Выражение: a * b - c / 2 | Переменные: x = 4.5, y = 6, z = 2.75 Выражение: x + y * z - x / 2 |
| 2 | Переменные: m = 20, n = 8, k = 4 Выражение: m / n + k * 3 | Переменные: p = 7.2, q = 5, r = 1.5 Выражение: p * q - r / 2 + p |
| 3 | Переменные: x1 = 15, y1 = 9, z1 = 6 Выражение: x1 - y1 / z1 | Переменные: a1 = 3.14, b1 = 4, c1 = 2.5 Выражение: a1 * b1 + c1 / 2 |
| 4 | Переменные: s = 30, t = 10, u = 5 Выражение: s / t * u | Переменные: v = 6.25, w = 8, x = 1.2 Выражение: v + w * x - v / 2 |
| 5 | Переменные: p1 = 25, q1 = 5, r1 = 2 Выражение: p1 / q1 + r1 * 3 | Переменные: s1 = 5.5, t1 = 7, u1 = 3.25 Выражение: s1 * t1 - u1 / 2 |
| 6 | Переменные: a2 = 18, b2 = 6, c2 = 4 Выражение: a2 / b2 * c2 | Переменные: d = 4.8, e = 9, f = 2.1 Выражение: d + e * f - d / 2 |
| 7 | Переменные: x3 = 24, y3 = 8, z3 = 3 Выражение: x3 / y3 + z3 * 2 | Переменные: a3 = 6.7, b3 = 5, c3 = 1.5 Выражение: a3 * b3 - c3 / 2 |
| 8 | Переменные: w1 = 16, x1 = 4, y1 = 7 Выражение: w1 / x1 + y1 | Переменные: z1 = 8.4, a1 = 3, b1 = 2.2 Выражение: z1 * a1 - b1 / 2 |
| 9 | Переменные: a4 = 14, b4 = 7, c4 = 2 Выражение: a4 * b4 / c4 | Переменные: x4 = 5.6, y4 = 4, z4 = 1.8 Выражение: x4 + y4 * z4 |
| 10 | Переменные: m2 = 22, n2 = 11, k2 = 3 Выражение: m2 / n2 * k2 | Переменные: p2 = 9.1, q2 = 6, r2 = 2.4 Выражение: p2 - q2 * r2 / 2 |
