Волшебство Arduino. Магия условий.
- Войдите на сайт для отправки комментариев
То ли я дурак, то ли мне везет на волшебство. Есть такой код в секции setup
if (Serial1.available()) GetGps(); else { digitalWrite(GPS_ON, HIGH); delay(2000); digitalWrite(GPS_ON, LOW); }
Т.е. если порт доступен он берет данные гпс, если порт не доступен он включает gps. Этот код работал, пока я не допаял обвес на другие пины и активироваш ШИМ.
После этого стали выполнятся все условия данного кода. Т.е. он считывает ГПС данные если активен гпс и так же выполняет код после else т.е. вместо того что включить gps выключает его когда он и так включен.
Стал думать что ардуина начала дергать ногой(Нога 10) при загрузке. Бывает такое, закомментировал все что после else и убедился что нога не дергается.
Так вот скажите чайнику, почему теперь выполняется оба условия. Пробовал модифицировать условие Serial1.available() типо Serial1.available() < 0 и другие всякие извращение, не особо помогло.
не выполняются оба условия. инфа 100%. докажите обратное.
Так вот скажите чайнику, почему теперь выполняется оба условия. Пробовал модифицировать условие Serial1.available() типо Serial1.available() < 0 и другие всякие извращение, не особо помогло.
Они не выполняются. Убедиться в этом легко. Уберите весь остальной скетч, оставьте только этот кусок и модифицируйте его вот так:
А почему Вам кажется, что они выполняются, это вопрос к Вам, Вы же не показали нам ни скетч целиком, ни схему соединения.
А почему Вам кажется, что они выполняются, это вопрос к Вам, Вы же не показали нам ни скетч целиком, ни схему соединения.
Ок, вечером проверю. Логично предположить если бы они не выполнялись, то я бы не получил данных с GPS. Хотя возможно вы правы и данные берутся с буфера серийного порта.
Ок, вечером проверю.
Добавьте ещё пару строк в проверочный код:
так Вы увидите больше. Например, если напечатаются оба сообщения, Вы увидите были они в одном вызове loop() или в разных.
Походу я волшебный. Условие не выполняется. Странно раньше выполнялось, а теперь перестало. А данные он успевает походу из буфера вытянуть.
UPD
Проблему решил. Между Serial1.begin(38400); и условием поставил паузу. Видимо после инициализации порта ардуина не успевает получать данные и не выполняется условие.