Помогите разобраться
- Войдите на сайт для отправки комментариев
Пт, 10/02/2012 - 20:35
Всем доброго времени!
вообщем мне нужно сделать ик бмпер на двух тсопах. со схемой все понятно, не мого ну икак разобраться со скетчем, нужно принять сигнал с 2х TSOPов.
прочтитал про прерывания понял как они работаю. но овт на практике не получается.
начал с простого (для индикации светодиоды, для подачи сигнала кнопка).
volatile int state = LOW;
void setup ()
{
pinMode(12,OUTPUT);//сигнальный светодиод
pinMode(2,INPUT);//вход
pinMode(11, OUTPUT);//сигнальный светодиод
attachInterrupt(0, blink, CHANGE);
}
void loop ()
{
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
if(state==HIGH){
digitalWrite(12,HIGH);
digitalWrite(11, LOW);
delay(2000);
}
}
void blink() {
state = !state;
}
вот это работает =/ но не могу сделать что бы было с двумя входами тоесть левый датчик и правый.
помогите пожалуйста.
Не ужели никто не поможет?(
Есле не ошибаюсь должно помочь вот ссылка http://letsmakerobots.com/node/10822
И вот еще http://letsmakerobots.com/node/4428
Спасибо, хорошие стаьи, только я там кода для ардуины ни какого не нашел(
Попробуй вот так:
volatile int state = LOW; volatile int state1 = LOW; void setup () { pinMode(2,INPUT);//вход 1 pinMode(3,INPUT);//вход 2 pinMode(12,OUTPUT);//сигнальный светодиод 1 pinMode(11, OUTPUT);//сигнальный светодиод 2 pinMode(10,OUTPUT);//сигнальный светодиод 3 pinMode(9, OUTPUT);//сигнальный светодиод 4 attachInterrupt(0, blink, CHANGE); attachInterrupt(1, blink1, CHANGE); } void loop () { digitalWrite(12, LOW); digitalWrite(11, HIGH); digitalWrite(10, LOW); digitalWrite(9, HIGH); if(state==HIGH){ digitalWrite(12,HIGH); digitalWrite(11, LOW); delay(2000); } if(state1==HIGH){ digitalWrite(10,HIGH); digitalWrite(9, LOW); delay(2000); } } void blink() { state = !state; } void blink1() { state1 = !state1; }maksim
спасибо! моя ошибка была в том что я обе переменные запихивал в void blink() а не в разные, работает теперь, вот только при подачи сигнала на 2 порт, сигнальные сведодиоды срабатывают как нужно но вот в изначально иногда не хотят возвращаться =/? в чем может быть проблема?
сегодня решил проблему немного по другому реализовав на одном тсопе. если кому интересно то вот:
int LedRightPin = 10; //Левый светодиод int LedLeftPin = 9; //Правый светодиод int TsopPin = 2; // тсоп вход unsigned char PIN_HBRIDGE_1A = 11; //выходы на ДД unsigned char PIN_HBRIDGE_2A = 12; unsigned char PIN_HBRIDGE_3A = 6; unsigned char PIN_HBRIDGE_4A = 5; void MotorLeftStop() { digitalWrite(PIN_HBRIDGE_1A, LOW); digitalWrite(PIN_HBRIDGE_2A, LOW); } void MotorLeftForward() { digitalWrite(PIN_HBRIDGE_1A, HIGH); digitalWrite(PIN_HBRIDGE_2A, LOW); } void MotorLeftReverse() { digitalWrite(PIN_HBRIDGE_1A, LOW); digitalWrite(PIN_HBRIDGE_2A, HIGH); } void MotorRightStop() { digitalWrite(PIN_HBRIDGE_3A, LOW); digitalWrite(PIN_HBRIDGE_4A, LOW); } void MotorRightForward() { digitalWrite(PIN_HBRIDGE_3A, LOW); digitalWrite(PIN_HBRIDGE_4A, HIGH); } void MotorRightReverse() { digitalWrite(PIN_HBRIDGE_3A, HIGH); digitalWrite(PIN_HBRIDGE_4A, LOW); } void GoForward() { MotorLeftForward(); MotorRightForward(); } void GoReverse() { MotorLeftReverse(); MotorRightReverse(); } void setup() { pinMode(LedRightPin, OUTPUT); pinMode(LedLeftPin, OUTPUT); pinMode(TsopPin, INPUT); pinMode(PIN_HBRIDGE_1A, OUTPUT); pinMode(PIN_HBRIDGE_2A, OUTPUT); pinMode(PIN_HBRIDGE_3A, OUTPUT); pinMode(PIN_HBRIDGE_4A, OUTPUT); } void loop() { GoForward(); //движемся вперед tone(LedLeftPin, 38000); // генерируем сигнал.на левый светодиод delay(50); if(digitalRead(TsopPin)==LOW)// если сигнал есть то.. { MotorRightReverse(); //поварачиваем на право MotorLeftForward(); delay(2000); } noTone(LedLeftPin); // тушим СД tone(LedRightPin, 38000); //генерируем сигнал на правый СД delay(50); if(digitalRead(TsopPin)==LOW) //если сигнал есть то ... { MotorLeftReverse(); //поварачиваем на лево MotorRightForward(); delay(2000); } noTone(LedRightPin); //тушим СД }