Motor Shield и ИК бампер

Nikita1
Offline
Зарегистрирован: 19.10.2011

Сделал ИК бампер на основе Tsop2136. Обвязку сделал по даташиту. В качестве ик-светодиодов использовал TSAL5100. Подключил их через 130Ом 9му цифровому пину. Есть у меня Freeduino 2009(аналог Arduino Duemilanove) и Motor Shield. Собрал отдельно бампер, все работает. В качестве проверки использовал светодиоды. Решил еще подключить мотор. Для генерации импульсов используется функция tone. Она блокирует использование ШИМ на 3 и 11 пине, следовательно M1 и M2 не работают(используют 3 и 11 пины для активации и регулирования скорости моторов 1 и 2). Остаются M3 и M4. Подключаю мотор к M3, и бампер к соответствующим пинам уже на шилде. Питание на мотры от зарядки телефона, 6.8В где-то получается. И тогда бампер ведет себя не правильно, он выполняет то, что должно было быть при срабатывании бампера, и на доли секунд пытается выполнить основной код. Если отключить питание от моторов и перезагрузить шилд(иногда даже не надо), бампер работает нормально. В чем может быть проблема?

[code]
#include <AFMotor.h>
volatile int state = LOW;
AF_DCMotor motor(3); //мотор подключен к M3
void setup ()
{
pinMode(13,OUTPUT);//сигнальный светодиод(должен гореть только при срабатывании бампера)
pinMode(9,OUTPUT);//выход частоты
pinMode(2,INPUT);//вход сигнала TSOPа
pinMode(11, OUTPUT);//сигнальный светодиод(должен гаснуть только при срабатывании бампера)
attachInterrupt(0, blink, CHANGE);
motor.run(RELEASE);//включаем мотор
motor.setSpeed(100);
}

void loop ()
{
tone(9,38000); //генерируем пачки 36КГц
motor.run(FORWARD);//движемся вперед
motor.setSpeed(100);
digitalWrite(13, LOW);
digitalWrite(11, HIGH);

if(state==HIGH){
digitalWrite(13,HIGH);
digitalWrite(11, LOW);
motor.run(RELEASE);//остановка двигателя
delay(1000);
}
}
void blink(){
state = !state;
}
[/code] 

Nikita1
Offline
Зарегистрирован: 19.10.2011
#include <AFMotor.h>
volatile int state = LOW;
AF_DCMotor motor(3); //мотор подключен к M3
void setup ()
{
pinMode(13,OUTPUT);//сигнальный светодиод(должен гореть только при срабатывании бампера)
pinMode(9,OUTPUT);//выход частоты
pinMode(2,INPUT);//вход сигнала TSOPа 
pinMode(11, OUTPUT);//сигнальный светодиод(должен гаснуть только при срабатывании бампера)
attachInterrupt(0, blink, CHANGE);
motor.run(RELEASE);//включаем мотор
motor.setSpeed(100);
}

 void loop ()
{
 tone(9,38000); //генерируем пачки 36КГц
 motor.run(FORWARD);//движемся вперед
 motor.setSpeed(100);
 digitalWrite(13, LOW);
 digitalWrite(11, HIGH);
 
 
if(state==HIGH){ 
digitalWrite(13,HIGH);
digitalWrite(11, LOW);
motor.run(RELEASE);//остановка двигателя
delay(1000);
}
}
 void blink(){
state = !state;
  }