Код: Выделить всё
int adc = 2*(ReadADC(3) - 125);
if(adc < 0) { // назад
PORTD &=~(1<<2); // выключить одну диагональ моста
_delay_ms(1); // пауза
PORTD|=(1<<1); // включить другую диагональ моста
} else { // вперед
PORTD &=~(1<<1); // выключить одну диагональ моста
_delay_ms(1); // пауза
PORTD|=(1<<2); // включить другую диагональ моста
}
OCR2B= abs(adc);вообще говоря, задержки при переключениях диагоналей - это глупость: приведет к искажению ШИМа. правильный алгоритм должен быть чуток иной:
1. определяем "зону нуля" - значение АЦП, которое соответствует остановленному состоянию
2. измерили АЦП
3. проверили, вошли в зону нуля или нет
4. если в зоне - выключили ШИМ
5. если вне зоны, то надо сравнить знак этого результата АЦП с предыдущим результатом
6. если знаки совпадают, то перейти к п.8
7. если знаки разные, то для положительного значения текущего значения АЦП включить одну диагональ, для отрицательного - другую
8. задать скорость по абсолютному значению АЦП.
9. запомнить знак результата АЦП для следующей итерации
10. повторять в цикле с п.2