Волшебство Arduino. Магия условий.

khseal
Offline
Зарегистрирован: 15.01.2016

То ли я дурак, то ли мне везет на волшебство. Есть такой код в секции 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 и другие всякие извращение, не особо помогло.

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

не выполняются оба условия. инфа 100%. докажите обратное.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

khseal пишет:

Так вот скажите чайнику, почему теперь выполняется оба условия. Пробовал модифицировать условие Serial1.available() типо Serial1.available() < 0 и другие всякие извращение, не особо помогло.

Они не выполняются. Убедиться в этом легко. Уберите весь остальной скетч, оставьте только этот кусок и модифицируйте его вот так:

if (Serial1.available()) {
  GetGps();
  Serial.print("Vetka 1");
}
else
{
  Serial.print("Vetka 2");
  digitalWrite(GPS_ON, HIGH);
  delay(2000);
  digitalWrite(GPS_ON, LOW);
}

А почему Вам кажется, что они выполняются, это вопрос к Вам, Вы же не показали нам ни скетч целиком, ни схему соединения.

khseal
Offline
Зарегистрирован: 15.01.2016

ЕвгенийП пишет:

А почему Вам кажется, что они выполняются, это вопрос к Вам, Вы же не показали нам ни скетч целиком, ни схему соединения.

Ок, вечером проверю. Логично предположить если бы они не выполнялись, то я бы не получил данных с GPS. Хотя возможно вы правы и данные берутся с буфера серийного порта.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

khseal пишет:

Ок, вечером проверю. 

Добавьте ещё пару строк в проверочный код:

static long loopCounter = 0;

loopCounter ++;

if (Serial1.available()) {
  Serial.print("Vetka 1: ");
  Serial.println(loopCounter);
  GetGps();
}
else
{
  Serial.print("Vetka 2: ");
  Serial.println(loopCounter);
  digitalWrite(GPS_ON, HIGH);
  delay(2000);
  digitalWrite(GPS_ON, LOW);
}

так Вы увидите больше. Например, если напечатаются оба сообщения, Вы увидите были они в одном вызове loop() или в разных.

khseal
Offline
Зарегистрирован: 15.01.2016

Походу я волшебный. Условие не выполняется. Странно раньше выполнялось, а теперь перестало. А данные он успевает походу из буфера вытянуть.

UPD

Проблему решил. Между Serial1.begin(38400); и условием поставил паузу. Видимо после инициализации порта ардуина не успевает получать данные и не выполняется условие.