Программа работает только с Serial.begin
Моя программа работает только тогда, когда добавлена следующая строка:
Serial.begin(9600);
Когда это отключено/удалено, программа больше не переключает выходное состояние.
Я использую Arduino Mega 2560.
При добавлении строки:
- Выход регулярно включается или ВЫКЛЮЧАЕТСЯ примерно каждые 1 сек.
Когда линия удалена:
- Выход переключается через 1 секунду (как и ожидалось), но затем переключается несколько раз примерно через 3 секунды.
- Я попробовал использовать еще один Arduino Mega 2560: на этот раз выход переключается через 1 секунду (как и ожидалось), но затем переключается несколько раз сразу после этого (а не примерно через 3 секунды).
В чем может быть проблема?
Мой код:
byte inputPin2 = 2;
byte inputPin3 = 3;
byte outputPin = 13;
boolean outputPin_HIGH = false;
volatile short angle = -18;
void setup() {
Serial.begin(9600); //<----------------------
pinMode(hallSensorPin, OUTPUT);
pinMode(inputPin2, INPUT_PULLUP);
pinMode(inputPin3, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(inputPin2), ISR_addAngle, CHANGE);
attachInterrupt(digitalPinToInterrupt(inputPin3), ISR_addAngle, CHANGE);
}
void ISR_addAngle() {
angle = angle + 18;
}
void loop() {
if (angle == 900) {
if (outputPin_HIGH) {
digitalWrite(outputPin, LOW);
outputPin_HIGH = false;
} else {
digitalWrite(outputPin, HIGH);
outputPin_HIGH = true;
}
angle = angle - 900;
}
}
@Magnus, 👍1
Обсуждение0
Смотрите также:
- Сбой Arduino во время последовательной печати без очевидной причины
- Почему Serial Print вызывает различное поведение в зависимости от того, где он находится
- Получение ненужных значений в консоли последовательного монитора Arduino
- Странное последовательное поведение Arduino
- Последовательный порт не работает со скоростью выше 19200
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
"Когда это отключено/удалено, программа больше не работает..." не очень информативно. Что именно не работает? Чего вы ожидали, что произойдет? Что произошло вместо этого?, @JRobert
Когда линия отключена/удалена, программа больше не получает регулярные прерывания, и поэтому вывод больше не переключается в состояние. Когда строка будет добавлена: Выход устанавливается (включается и выключается) регулярно примерно каждые 1 сек. Когда строка будет удалена: Выход устанавливается через 1 секунду (как и ожидалось), но затем устанавливается несколько раз примерно через 3 секунды., @Magnus
... или я думаю, что прерывание работает (я вижу, что сигнал отправляется на вывод прерывания), но, поскольку я не могу последовательно.распечатать флаг, я не знаю, действительно ли это работает..., @Magnus
Программа отлично с ней работает, но я хочу ее удалить (это было только для отладки), @Magnus
вы можете хранить значения флагов в массиве ... когда вы достигнете некоторого желаемого количества сохраненных значений, затем вызовите функцию для выполнения serial.begin и распечатайте значения, @jsotola
Я предполагаю, но похоже, что "правильная" операция зависит от прерываний UART, которые исчезают без " Serial.begin ()". Можете ли вы подтвердить, что ваш датчик действительно подает сигналы так, как вы ожидаете?, @JRobert
@JRobert Прерывание исходит от драйвера, а не от датчика (светодиод загорается, когда он посылает сигнал), и я уверен, что сигнал отправляется как обычно. Я запустил код с "Serial.begin(9600);" без проблем и сразу после этого снова без ошибок. Поэтому я также не думаю, что должна быть проблема с сигналом, который запускает прерывание., @Magnus
@jsotola Я попробую это завтра. Но я уверен, что получаю ожидаемые флаги в нужное время, когда используется "Serial.begin(9600);". Я скорее хочу отладить эту ошибку без последовательного., @Magnus
Похоже, вы используете Arduino на базе ATmega328P (UNO, Nano и т. Д.). Но, вероятно, вам следует сказать, что вы используете, и устранить все сомнения., @timemage
@timemage Я использую Arduino Mega 2560. Я попробовал с другим Arduino Mega 2560: на этот раз выход переключается через 1 секунду (как и ожидалось), но затем переключается несколько раз сразу после (а не примерно через 3 секунды)., @Magnus
Он работает без "Serial.begin(9600)" при использовании Arduino Micro Pro (ATmega32U4). Здесь вывод 0 и вывод 1 используются в качестве входов для прерываний. Больше ничего в коде не меняется. К сожалению, это не решение проблемы..., @Magnus
"выход переключается через 1 секунду (как и ожидалось)" почему ожидается 1 секунда?, @timemage
Когда я добавляю "Serial.begin(9600)", "1 сек" примерно в это время, я обычно ожидаю, что выход переключится. Снаружи все совсем по-другому. Почему эта строка должна иметь значение?!?, @Magnus