Всем привет! Начал осваивать программирование, и по ходу дела сделать что-то полезное. Хочу сделать блок для управления усилителем на основе arduino nano и TDA 7439, основными функциями которого будет: -Мягкий старт усилителя -Дистанционное упраление -Кнопочное управление -Переключатель на 4 входа (интегрировано в ИМС) -Регулировка частот (интегрировано в ИМС) -Контроль температуры на основе терморезистора -Подключение LCD по I2C -Часы реального времени на DS1307 (если хватит сил) На данном этапе нарисована схем. разведена плата и написана часть кода которая отвечает за контроль температуры.(маловато ) Ищу наставника который мог бы помочь понять как это все реализовать и настроить. Попутно помочь с разработкой алгоритма. Есть желание учиться и получать новые знания.
Поэтому есть вопросы, связанные с кодом AMP_CONTROL: Использование констант 'PD6', 'PC3' в функциях -- это нестандартный подход или просто где-то в инете увидели и решили использовать, не понимая, что это такое? Вы ознакомились с документацией на функции 'analogRead' и 'analogWrite'? Или посмотрели на их название и решили, что этого достаточно для понимания сути их работы?
Так, для того, чтоб было проще обсуждать, выкладываю код сюда: Код (C++): #include <Wire.h> #include <LiquidCrystal_I2C.h> void setup () { pinMode(PD6, INPUT); //PD6 пин — на вход сигнала pinMode(PC3, OUTPUT); //PC3 пин - на выход вентилятора pinMode(A6, OUTPUT); //A6 пин - на выход светодиода перегрева Serial.begin(9600); //связь с компьютером 9600 бит/с LiquidCrystal_I2C lcd(0x27, 16, 2); //установлен адрес дисплея to 0x27 на 16 символов и 2 строки lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.print("HELLO"); // Выводим текст lcd.setCursor(0, 1);// Устанавливаем курсор в начало 2 строки lcd.print("NANO"); // Выводим текст } void loop() { int TEMP = analogRead(PD6); //читаем значение температуры с PD6 int LEDTEMP = analogRead(PD6); //значение на индикатор перегрева int FAN = analogRead(PC3); //венитлятор на порт PC3 if (TEMP >= 200) //Если значение температуры больше или равно 200 { digitalWrite(PC3, LOW); //То выключить вентилятор analogWrite(A6, 0); //То выключить светодиод } else //В ином случае { digitalWrite(PC3, HIGH); //Включить вентилятор analogWrite(A6, 150); //Включить ШИМ на светодиод на 150 } Serial.println(TEMP); //пишем это значение в последовательный порт (для калибровки) delay(10); // немного ждём }
Первый же вопрос у меня аналогичен вопросу оратора выше: что за PD6 и PC3 (что это выходы ног процессора - понятно, но где вы их взяли?) Далее.. Что у вас подключено к PD6 и PC3? Я, конечно, не копался в даташите TDA 7439, но терзают меня смутные сомнения, что для получения правильных значений не нужно производить никаких манипуляций с TEMP и FAN. Дистанционное управление - какое? ИК, радио, Wi-Fi? опишите подробнее. UPD. Код (C++): int TEMP = analogRead(PD6); //читаем значение температуры с PD6 int LEDTEMP = analogRead(PD6); //значение на индикатор перегрева Как так? Что за считывание данных с двух периферийных устройств с одного порта? Это вообще законно?)))