хороший модем должен качать пиво!
Мой проект
вот полностью код
PHP код:
#include <TimerOne.h>
#define BTNPIN 2
#define L 5
#define R 6
volatile uint16_t startImpuls;
volatile uint16_t lengthImpuls;
volatile uint16_t timerCount=0;
void setup()
{ /*
LOW — вызов прерывания всякий раз, когда на порту низкий уровень напряжения;
CHANGE – прерывание вызывается при изменении значения на входе;
RISING – вызов прерывания при изменении уровня напряжения с низкого (LOW) на высокое(HIGH)
FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкое (LOW)
*/
startImpuls=0;
lengthImpuls=0;
pinMode(BTNPIN, INPUT);
pinMode(L, OUTPUT);
pinMode(R, OUTPUT);
pinMode(13, OUTPUT);
pinMode(13, LOW);
Serial.begin(115200);
Timer1.initialize(10);
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
attachInterrupt(0, fireUp, RISING);
}
void callback() { timerCount++; }
void loop()
{
if (lengthImpuls > 0)
{
uint16_t li = lengthImpuls;
lengthImpuls=0;
if (li > 100 && li < 150) // замер сигнала для вращения в лево
// analogWrite (L, 23 - li)
Serial.print (li,DEC);
if (li > 155 && li < 200) // замер сигнала для вращения в право
// analogWrite (R, 23 - li);
Serial.print (li,DEC);
}
}
// Функция обработки прерывания на подъем
void fireUp()
{
detachInterrupt(0);
startImpuls = timerCount;
attachInterrupt(0, fireDown, FALLING);
}
// Функция обработки прерывания на падение
void fireDown()
{
detachInterrupt(0);
lengthImpuls = timerCount - startImpuls;
startImpuls=0;
timerCount=0;
attachInterrupt(0, fireUp, RISING);
}
хороший модем должен качать пиво!
Мой проект
Ну так я не только время изменил, я поменял немного логику измерения
Ты вообще то мой код пробовал? без каких либо дополнений и изменений?
Конечно. я думаю что проблемма сдесь if (li > 499 && li < 1001) сигнал не попадает в эти рамки. щас попробую изменить.
хороший модем должен качать пиво!
Мой проект
Здесь получаются рамки от 1мс до 2мс
если посмотреть на сигнал li в serialMonitor какие длительности будет выдавать? Только посмотри через мой код
Странно, лолжен попадать. ща вот с твоим скетчем работает так: пин R молчит совсем, пин L начинает сразу крутить мотор. значит скетч захватывает нейтральный сигнал 1,5 мс а на изменения не реагирует...
хороший модем должен качать пиво!
Мой проект
значит нейтральное положение находится реально вверху диапазона
if (li >= 750) {analogWrite (R, 255-(1000-li)); analogWrite (L, 0);} так 750=1,5мс
хороший модем должен качать пиво!
Мой проект
1такт таймера равен 2мкс
750х2мкс=1500мкс или 1,5мс
Последний раз редактировалось Chip; 20.10.2011 в 22:39.
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)