Ускоряется вывод arduino функции Serial
- Войдите на сайт для отправки комментариев
Вс, 30/05/2021 - 00:25
//Таймер, который отсчитывает 1 секунду uint16_t timer = 5000; //Переключатель выходных портов uint8_t iterator = 0; //Таблица портов, прнимающих сигнал uint8_t table[][32] = { {22, 26, 30, 34, 38, 42, 46, 50}, {23, 27, 31, 35, 39, 43, 47, 51}, {24, 28, 32, 36, 40, 44, 48, 52}, {25, 29, 33, 37, 41, 45, 49, 53} }; void setup() { //Установка портов VCC for (uint8_t i = 2; i <= 9; i++) pinMode(i, OUTPUT); //Установка портов GND for (uint8_t i = 22; i <= 53; i++) pinMode(i, INPUT); //Установка скорости передачи данных Serial.begin(115200); } void loop() { if (timer < millis()) { //Отсчитывание каждой секунды с учётом скорости проигрывания музыки 130 единиц timer = millis() + 461; //timer = millis() + 1000; // Посылаем высокое напрядение на столбец под номером итератора digitalWrite(iterator + 2, HIGH); //Символ начала передачи пакета Serial.print("*"); //Считывание с портов сигнала, если высокое напряжение - загорается диод и передаётся 1 - иначе 0 for (uint8_t i = 0; i < 4; i++) { /*Serial.print("Номер порта: "); Serial.println(table[i][iterator]); Serial.print("Значение: "); Serial.println(digitalRead(table[i][iterator]));*/ if (digitalRead(table[i][iterator])) Serial.print(1); else Serial.print(0); } //Символ конца передачи пакета Serial.println("#"); //Прекращение подачи питания digitalWrite(iterator + 2, LOW); //Переключение и сброс итератора if (++iterator == 7) iterator = 0; } }
Всем доброго времени суток. Делаю курсовой проект, секвенсор.
Проблема заключается в следующем: у меня есть приложение, которое принимает то, что мне передаёт ардуино. Мне нужно, чтобы оно выводило это с определёнными временными периодами. И где-то первые секунд 40 так и есть. А потом ардуинка начинает отправлять данные очень быстро. С чем это может быть связано? На всякий случай: использую arduino mega.
Не 40 секунд, а ~60.
Положите-ка в 16-битную переменную timer 65535ms, добавьте 461 и сравните с 65538ms - что будет больше?
Произойдёт переполнение, я вас понял, спасибо большое! Извините за невнимательность.
Садман41, дорогой! Комментарий без пояснений породит еще одного члена секты "великого переполнения"! ;))
ТС, уважаемый. Чтобы переполнение не влияло на работу программы нужно использовать только вычитания. Как на циферблате часов, разность положения стрелок - всегда правильное число, даже если стрелки по разную сторону от 0(12).