Непонятная остановка посреди выполнения функции

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

Проблема в том что он подключен к сотовму(android) через блютуз(hc-06). Все работает на ура . только вот при нажатии на кнопку на смартфоне платформа выполняет команду полторы секунды а потом прекращает, как это исправить.  
это код ардуино шасси на 2 моторах с драйвером l298n.

int IN1 = 3; //input1 подключен к выводу  
int IN2 = 2;
int IN3 = 4; //input1 подключен к выводу 
int IN4 = 5;
int a = 0;
void setup() {
Serial.begin(9600);
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);
} 
void loop()
{
if (Serial.available())
{ a = Serial.parseInt(); 
if (a==1) { //назад
  digitalWrite (IN2, HIGH);
  digitalWrite (IN1, LOW); 
  digitalWrite (IN4, HIGH);
  digitalWrite (IN3, LOW);
  } 
if (a==2) { //вперед
  digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW); 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW); 
  }
if (a==3) { //ну и типо такого поворты все дела
  digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW);
  }
if (a==4) { 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW); 
  }
if (a==5) { 
  digitalWrite (IN1, LOW);
  digitalWrite (IN2, HIGH); 
  }
if (a==6) { 
  digitalWrite (IN3, LOW);
  digitalWrite (IN4, HIGH); 
  } 
if (a==0) { //типо стоп
  digitalWrite (IN1, LOW);
  digitalWrite (IN2, LOW); 
  digitalWrite (IN3, LOW);
  digitalWrite (IN4, LOW); 
  }
}
}

 

vde69
Offline
Зарегистрирован: 10.01.2016

http://arduino.ua/ru/prog/Serial/ParseInt

Если в течение одной секунды не найдено ни одного целого числа, то, по умолчанию, функция вернет значение 0. Величина таймаута задается функцией Serial.setTimeout().

 

видать у тебя в сериал не приходят числа инт :)

 

и кстати вроде это только на меге работает...

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

А как сделать на uno. чтоб при нажатии выполнялось пока не отпустишь кнопку.

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

Все нашаел способ, надо вставить Serial.setTimeout(//тут чем больше тем лучше);

vde69
Offline
Зарегистрирован: 10.01.2016

microms пишет:

Все нашаел способ, надо вставить Serial.setTimeout(//тут чем больше тем лучше);

не правильно..... у тебя вообще все остановится...

if (Serial.available()) { a = Serial.parseInt(); }
 switch (a) {
   case 1:
     digitalWrite (IN2, HIGH); 
     digitalWrite (IN1, LOW); 
     digitalWrite (IN4, HIGH); 
     digitalWrite (IN3, LOW); 
     break 
   case 2: //..... //..... 
}