Робот паук от хлопков

Nursik_9797
Offline
Зарегистрирован: 09.11.2016

Робот слышит первый хлопок, после вообще не слышит хлопки тупо идет...

#include<Servo.h>
// Константы 
// 

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;
Servo servo9;
Servo servo10;
Servo servo11;
Servo servo12;

const int soundPin = 1;     // Ножка датчика звука
const int ledPin =  0;      // Ножка Светодиода


// Переменные:
unsigned long timeLed;       // Время светодиода 
unsigned long timeNow;       // Текущее время
unsigned long timeCommand;   // Время для комманды

int hit = 0 ;                // Количество хлопков
int sound ;                  // Предыдущее состояние датчика звука
int soundNow ;               // Состояние датчика звука
void setup() {
  // Настройка светодиода:
  pinMode(ledPin, OUTPUT);
  
  // настройка датчика звука:
  pinMode(soundPin, INPUT);     
  
  // Инициализация начального времени
  timeLed = timeCommand = millis();
  sound = digitalRead(soundPin);
  
  servo1.attach(2);  //(prav_noga_nizhnii)
  servo2.attach(3); //(prav_noga_verh)
  servo3.attach(4);//(lev_noga_niz)
  servo4.attach(5);//(lev_noga_verh)
  servo5.attach(6);//(lev_sred_niz)
  servo6.attach(7);//(lev_sred_vverh)
  servo7.attach(8);//(prav_sred_noga_nizh)
  servo8.attach(9);//(prav_sred_noga_verhni)
  servo9.attach(10);//(prav_zad_noga_niz)
  servo10.attach(11);//(prav_zad_noga_verh)
  servo11.attach(12);//(zad_lev_niz)
  servo12.attach(13);//(zad_lev_verh)
} // void setup()

// Главный цикл
void loop(){
  // Считывание времени
  timeNow = millis();
  if (timeNow - timeLed > 1000 )
     {digitalWrite(ledPin,!digitalRead(ledPin)); // Мигание светодиода
      timeLed = timeNow;};
  
  soundNow = digitalRead(soundPin);           // Чтение датчика звука
  if  ( sound == 1 and soundNow == 0)        // Если был хлопок
   { hit = hit + 1;                          // Увеличение кол-ва хлопков
     timeCommand = timeNow;                  // Таймер до исполнения команды
     delay (150);
   } ;
  sound = soundNow;
  
  if ( (timeNow - timeCommand) > 2000)        // Время выполнения команды
    {  
    switch (hit) {
    case 1:
      //Вперёд - 1 хлопок, 
      
      delay (1000); // движение вперёд - 1 сек
      break;
  servo1.write(85);
  servo2.write(91);
  servo3.write(95);
  servo4.write(92);
  servo5.write(90);
  servo6.write(87);
  servo7.write(90);
  servo8.write(87);
  servo9.write(95);
  servo10.write(87);
  servo11.write(85);
  servo12.write(92);
  delay(200);
  
  servo2.write(91);
  delay(200);
  servo1.write(70);
  delay(200);
  servo2.write(111);
  delay(200);
  
  servo4.write(92);
  delay(200);  
  servo3.write(105);
  delay(200);
  servo4.write(72);
  delay(200);
  
  servo6.write(67);
  delay(200);
  servo5.write(100);
  delay(200);
  servo6.write(87);
  delay(200);
  
  servo8.write(107);
  delay(200);
  servo7.write(70);
  delay(200);
  servo8.write(87);
  delay(200);
  
  servo10.write(87);
  delay(200);
  servo9.write(80);
  delay(200);
  servo10.write(67);
  delay(200);
  
  servo12.write(92);
  delay(200);
  servo11.write(100);
  delay(200);
  servo12.write(112);
  delay(200);

  servo1.write(85);
  servo2.write(91);
  servo3.write(95);
  servo4.write(92);
  servo5.write(90);
  servo6.write(87);
  servo7.write(90);
  servo8.write(87);
  servo9.write(95);
  servo10.write(87);
  servo11.write(85);
  servo12.write(92);
    case 2:
      //Назад - 2 хлопка
      servo1.write(85);
  servo2.write(91);
  servo3.write(95);
  servo4.write(92);
  servo5.write(90);
  servo6.write(87);
  servo7.write(90);
  servo8.write(87);
  servo9.write(95);
  servo10.write(87);
  servo11.write(85);
  servo12.write(92);
      delay (1000); // движение назад - 1 сек
      break;
      
   case 3:
    // Влево - 3 хлопка
    servo2.write(91);
  delay(200);
  servo1.write(70);
  delay(200);
  servo2.write(111);
  delay(200);
  
  servo4.write(92);
  delay(200);  
  servo3.write(83);
  delay(200);
  servo4.write(72);
  delay(200);
  
  servo6.write(67);
  delay(200);
  servo5.write(78);
  delay(200);
  servo6.write(87);
  delay(200);
  
  servo8.write(107);
  delay(200);
  servo7.write(70);
  delay(200);
  servo8.write(87);
  delay(200);
  
  servo10.write(87);
  delay(200);
  servo9.write(80);
  delay(200);
  servo10.write(67);
  delay(200);
  
  servo12.write(92);
  delay(200);
  servo11.write(70);
  delay(200);
  servo12.write(112);
  delay(200);

  servo1.write(85);
  servo2.write(91);
  servo3.write(95);
  servo4.write(92);
  servo5.write(90);
  servo6.write(87);
  servo7.write(90);
  servo8.write(87);
  servo9.write(95);
  servo10.write(87);
  servo11.write(85);
  servo12.write(92);
    delay (250); // Поворот влево 0,25 сек
    break;
    
    case 4:
    // Вправо - 4 хлопка
    servo2.write(91);
  delay(200);
  servo1.write(100);
  delay(200);
  servo2.write(111);
  delay(200);
  
  servo4.write(92);
  delay(200);  
  servo3.write(105);
  delay(200);
  servo4.write(72);
  delay(200);
  
  servo6.write(67);
  delay(200);
  servo5.write(100);
  delay(200);
  servo6.write(87);
  delay(200);
  
  servo8.write(107);
  delay(200);
  servo7.write(115);
  delay(200);
  servo8.write(87);
  delay(200);
  
  servo10.write(87);
  delay(200);
  servo9.write(110);
  delay(200);
  servo10.write(67);
  delay(200);
  
  servo12.write(92);
  delay(200);
  servo11.write(100);
  delay(200);
  servo12.write(112);
  delay(200);

  servo1.write(85);
  servo2.write(91);
  servo3.write(95);
  servo4.write(92);
  servo5.write(90);
  servo6.write(87);
  servo7.write(90);
  servo8.write(87);
  servo9.write(95);
  servo10.write(87);
  servo11.write(85);
  servo12.write(92);
    delay (250); // Поворот вправо 0,25 сек 
    break;
    
    default: 
      // if nothing else matches, do the default
      // default is optional              
                 ;};
  
  /*  // Выключение двигателей после окончания движения
    servo2.write(91);
  servo3.write(95);
  servo4.write(92);
  servo5.write(90);
  servo6.write(87);
  servo7.write(90);
  servo8.write(87);
  servo9.write(95);
  servo10.write(87);
  servo11.write(85);
  servo12.write(92);
    if (hit > 0) {delay (1000); hit = 0;}; // Пауза после окончания движения, обнуление числа хлопков 
    
   */ };// end if ( (timeNow - timeComand) > 2000)
    
  } // void loop()





 

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

Nursik_9797 пишет:

Робот слышит первый хлопок, после вообще не слышит хлопки тупо идет...

Принято к сведению. Когда (и если) у Вас появятся вопросы и/или идеи, обращайтесь. Только не забудьте объяснить, что он, по-Вашему, должен делать.

А роботу посоветуйте вот это.

Nursik_9797
Offline
Зарегистрирован: 09.11.2016

аа ЗАБЫЛ НА нем уставлен датчик двука и он по хлопкам должен ходить

 

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

Вы забыли объяснить подробно как он должен работать, как работает сейчас и в чём собственно Ваш вопрос к сообществу. Пока никаких вопросов от Вас не поступало - только короткие утверждения.

AlexeySh
Offline
Зарегистрирован: 16.01.2017

Для начала хоть поясните какое состояние принимает soundPin когда есть хлопок. Из программы этого непонятно вообще.

Да ещё хорошая практика присваивать переменным начальные значения при объявлении. Потому что вы конечно ожидаете, что переменная int имеет значение 0 если ей ещё ничего не присваивали. А вот компилятор может об этом и не догадываться.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
С таким количеством "delay" - программа только один раз отреагирует на хлопки. Далее, я не увидел где у Вас обнуляются хлопки? И еще, case 1: у Вас ничего не делает, кроме "delay (1000);" потому что код идет после break;
Вывод "delay" сменить на millis(); 
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

А еще модуль движения паука загнать в класс. Тогда просто можно командовать:"Паук иди","Паук стой".

Nursik_9797
Offline
Зарегистрирован: 09.11.2016

Спасибо ваш ответ мне очень помог я решил!!!!)))