Имеем: два аналоговых датчика, находящихся над краями линии. Когда робот стоит ровно - код с них равен (неодинаковость датчиков робот компенсирует небольшим смещением на линии). Вычитаете из одного показания ацп другое - получаете отклонение от линии, знак покажет в какую сторону. Это рассогласование. Именно это является исходными данными для ПИД регулятора. Умножаете отклонение на П, разность с предыдущим отклонением умножаете на Д, складываете (ПД тоже неплохо работает) - получили рассогласование скоростей моторов. Записали данные в регистры ШИМ (учитывая максимальную скорость и ограничение снизу нулем), все цикл завершен. Когда с обоих датчиков приходят одинаковый код - мы на линии ровно, при вычитании ноль, рассогласование скоростей ноль, то есть оба мотора крутятся с максимальной скоростью. Если линия ушла, один датчик на черном (код будет маленьким), другой на белом (код большой), вычли, узнали знак, вычислили рассогласование скоростей, вернулись на линию.
проблема не в том, я знаю как сделать пид регулятор, я занимаюсь лего роботами и алгоритмы управления знаю и делал на лего лайнтрейсеров, проблема в том,что не получается получить показания с двух датчиков,нужен именно код программы. правильно ли я понимаю эти регистры: ADMUX = 0 << MUX0 - порт ADC0//если все mux2=0 и mux1=0; ADMUX = 1 << MUX0 - порт ADC1 ADCSRA = 1 << ADSC - запускает еденичное преобразование ADCSRA = 1 << ADATE - разрешает преобразование одно за другим?