машина на блютуз начинает движение через 8 секунд после нажатия

evgenii11
Offline
Зарегистрирован: 17.04.2016

всем привет

собрал машинку на блютуз управлении и добавил HC-SR4 со светодиодом в качестве парктроника, но машина  начинает движение через 8 секунд после нажатия на кнопку движения, программу использую Arduino Bluetooth RC Car

#define in1 5 
#define in2 6
#define in3 10
#define in4 11
 
#define Trig 13
#define Echo 12
#define ledPin 7
 
int command; 
int Speed = 204; 
int Speedsec;
int buttonState = 0;
int lastButtonState = 0;
int Turnradius = 0; 
int brakeTime = 45;
int brkonoff = 1; 
 
void setup() {
{
  pinMode(Trig, OUTPUT); 
  pinMode(Echo, INPUT); 
  pinMode(ledPin, OUTPUT);
 Serial.begin(9600); }
  
{pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);}
 
Serial.begin(9600); 
 
}
unsigned int impulseTime=0; 
unsigned int distance_sm=0; 
 
void loop() {
 
   
 
if (Serial.available() > 0) {
command = Serial.read();
Stop(); 
switch (command) 
{
case 'F':
forward();
break;
case 'B':
back();
break;
case 'L':
left();
break;
case 'R':
right();
break;
case 'G':
forwardleft();
break;
case 'I':
forwardright();
break;
case 'H':
backleft();
break;
case 'J':
backright();
break;
case '0':
Speed = 100;
break;
case '1':
Speed = 140;
break;
case '2':
Speed = 153;
break;
case '3':
Speed = 165;
break;
case '4':
Speed = 178;
break;
case '5':
Speed = 191;
break;
case '6':
Speed = 204;
break;
case '7':
Speed = 216;
break;
case '8':
Speed = 229;
break;
case '9':
Speed = 242;
break;
case 'q':
Speed = 255;
break;
}
Speedsec = Turnradius;
if (brkonoff == 1) {
brakeOn();
} else {
brakeOff();
}
}
 
{  
  digitalWrite(Trig, HIGH); 
 
  delayMicroseconds(10); 
  digitalWrite(Trig, LOW); 
  impulseTime=pulseIn(Echo, HIGH); 
  distance_sm=impulseTime/58; 
  Serial.println(distance_sm); 
  if (distance_sm<10) 
  {     
    digitalWrite(ledPin, HIGH); 
  }  
  else 
  {   
    digitalWrite(ledPin, LOW); 
  }   
  delay(100); 
  
}
}
 
void forward() {
analogWrite(in1, Speed);
analogWrite(in3, Speed);
}
 
void back() {
analogWrite(in2, Speed);
analogWrite(in4, Speed);
}
 
 
void left() {
analogWrite(in3, Speed);
analogWrite(in2, Speed);
}
 
 
 
void right() {
analogWrite(in4, Speed);
analogWrite(in1, Speed);
}
 
void forwardleft() {
analogWrite(in1, Speedsec);
analogWrite(in3, Speed);
}
 
void forwardright() {
analogWrite(in1, Speed);
analogWrite(in3, Speedsec);
}
 
void backright() {
analogWrite(in2, Speed);
analogWrite(in4, Speedsec);
}
 
void backleft() {
analogWrite(in2, Speedsec);
analogWrite(in4, Speed);
 
}
void Stop() {
analogWrite(in1, 0);
analogWrite(in2, 0);
analogWrite(in3, 0);
analogWrite(in4, 0);
}
 
void brakeOn() {
 
 
buttonState = command;
 
if (buttonState != lastButtonState) {
 
if (lastButtonState == 'F') {
if (buttonState == 'S') {
back();
delay(brakeTime);
Stop();
}
}
if (lastButtonState == 'B') {
if (buttonState == 'S') {
forward();
delay(brakeTime);
Stop();
}
}
if (lastButtonState == 'L') {
if (buttonState == 'S') {
right();
delay(brakeTime);
Stop();
}
}
 
if (lastButtonState == 'R') {
if (buttonState == 'S') {
left();
delay(brakeTime);
Stop();
}
}
}
 
lastButtonState = buttonState;
}
void brakeOff() {
 
}
evgenii11
Offline
Зарегистрирован: 17.04.2016

по сути это объединение двух кодов, по отдельности работает нормально все , но после вставки кода на дальномер происходит задержка

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Никто не будет разбираться в коде, оформленном не по правилам.

2. Раз Вы произнесли слово дальномер, то, возможно, дальномер ултразвуковой и его таймаут составляет как раз порядка 8 секунд.

evgenii11
Offline
Зарегистрирован: 17.04.2016

#define Trig 13
#define Echo 12
#define ledPin 11

void setup() 
{  
  pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 
  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */
} 
unsigned int impulseTime=0; 
unsigned int distance_sm=0; 

void loop() 
{  
  digitalWrite(Trig, HIGH); 
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(Trig, LOW); // Отключаем 
  impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance_sm=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  if (distance_sm<10) // Если расстояние менее 30 сантиметром 
  {     
    digitalWrite(ledPin, HIGH); // Светодиод горит 
  }  
  else 
  {   
    digitalWrite(ledPin, LOW); // иначе не горит 
  }   
  delay(100); 
  /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. 
   Это время называется периодом цикла (cycle period). 
   Рекомендованный период между импульсами должен быть не менее 50 мс.  */
}
evgenii11
Offline
Зарегистрирован: 17.04.2016

в код для машины всатвлял вот этот код этот код зажигает светодиод если расстояние до приграды 10 см

evgenii11
Offline
Зарегистрирован: 17.04.2016
#define in1 5 
#define in2 6
#define in3 10
#define in4 11
 
#define Trig 13
#define Echo 12
#define ledPin 7
 
int command; 
int Speed = 204; 
int Speedsec;
int buttonState = 0;
int lastButtonState = 0;
int Turnradius = 0; 
int brakeTime = 45;
int brkonoff = 1; 
 
void setup() {
{
  pinMode(Trig, OUTPUT); 
  pinMode(Echo, INPUT); 
  pinMode(ledPin, OUTPUT);
 Serial.begin(9600); }
  
{pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);}
 
Serial.begin(9600); 
 
}
unsigned int impulseTime=0; 
unsigned int distance_sm=0; 
 
void loop() {
 
   
 
if (Serial.available() > 0) {
command = Serial.read();
Stop(); 
switch (command) 
{
case 'F':
forward();
break;
case 'B':
back();
break;
case 'L':
left();
break;
case 'R':
right();
break;
case 'G':
forwardleft();
break;
case 'I':
forwardright();
break;
case 'H':
backleft();
break;
case 'J':
backright();
break;
case '0':
Speed = 100;
break;
case '1':
Speed = 140;
break;
case '2':
Speed = 153;
break;
case '3':
Speed = 165;
break;
case '4':
Speed = 178;
break;
case '5':
Speed = 191;
break;
case '6':
Speed = 204;
break;
case '7':
Speed = 216;
break;
case '8':
Speed = 229;
break;
case '9':
Speed = 242;
break;
case 'q':
Speed = 255;
break;
}
Speedsec = Turnradius;
if (brkonoff == 1) {
brakeOn();
} else {
brakeOff();
}
}
 
{  
  digitalWrite(Trig, HIGH); 
 
  delayMicroseconds(10); 
  digitalWrite(Trig, LOW); 
  impulseTime=pulseIn(Echo, HIGH); 
  distance_sm=impulseTime/58; 
  Serial.println(distance_sm); 
  if (distance_sm<10) 
  {     
    digitalWrite(ledPin, HIGH); 
  }  
  else 
  {   
    digitalWrite(ledPin, LOW); 
  }   
  delay(100); 
  
}
}
 
void forward() {
analogWrite(in1, Speed);
analogWrite(in3, Speed);
}
 
void back() {
analogWrite(in2, Speed);
analogWrite(in4, Speed);
}
 
 
void left() {
analogWrite(in3, Speed);
analogWrite(in2, Speed);
}
 
 
 
void right() {
analogWrite(in4, Speed);
analogWrite(in1, Speed);
}
 
void forwardleft() {
analogWrite(in1, Speedsec);
analogWrite(in3, Speed);
}
 
void forwardright() {
analogWrite(in1, Speed);
analogWrite(in3, Speedsec);
}
 
void backright() {
analogWrite(in2, Speed);
analogWrite(in4, Speedsec);
}
 
void backleft() {
analogWrite(in2, Speedsec);
analogWrite(in4, Speed);
 
}
void Stop() {
analogWrite(in1, 0);
analogWrite(in2, 0);
analogWrite(in3, 0);
analogWrite(in4, 0);
}
 
void brakeOn() {
 
 
buttonState = command;
 
if (buttonState != lastButtonState) {
 
if (lastButtonState == 'F') {
if (buttonState == 'S') {
back();
delay(brakeTime);
Stop();
}
}
if (lastButtonState == 'B') {
if (buttonState == 'S') {
forward();
delay(brakeTime);
Stop();
}
}
if (lastButtonState == 'L') {
if (buttonState == 'S') {
right();
delay(brakeTime);
Stop();
}
}
 
if (lastButtonState == 'R') {
if (buttonState == 'S') {
left();
delay(brakeTime);
Stop();
}
}
}
 
lastButtonState = buttonState;
}
void brakeOff() {
 
}

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Внимательно читаем доки по PulseIn(особенно про таймаут) : http://arduino.ru/Reference/PulseIn

и п.2 от andriano #2

evgenii11
Offline
Зарегистрирован: 17.04.2016

ну и собственно что получилось в итог. извиняюсь за первое сообщение)

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

Может она перед стартом мотор прогревает? 

А вообще, присоединяюсь к коллегам. Проверьте, если не поможет, тогда и будем думать.

evgenii11
Offline
Зарегистрирован: 17.04.2016

знания не так глубоки, да что там говорить начальный уровень еще. PulseIn нужно приписать к пину но  в скетче не указаны пины от блютуз модуля. итог не разобрался

evgenii11
Offline
Зарегистрирован: 17.04.2016

носом меня ткнуть можно? што к чему должно, малость расжувать

James
Offline
Зарегистрирован: 26.02.2016

зачем строка 115, если можно указать в 117 время импульса?