Плата 1: Arduino Pro Mini 5v / 16MHz на процессоре ATMEGA328
2: Arduino Pro Mini 5v / 16MHz на процессоре ATMEGA168
вот код
- Код: Выделить всё
- /*
 Arduino IDE 1.5.4
 Паяльник на Arduino Pro Mini v0.4
 // Пины еодключения индикаторов
 ANODES(CATHODES):
 D1 - a
 D2 - b
 D4 - c
 D6 - d
 D7 - e
 D5 - f
 D3 - g
 D0 - dp (digital point) Я НЕ подключал - резерв... индикатора :)))
 
 a1
 ********
 * *
 f * * b2
 5 * g3 *
 ********
 * *
 e * * c4
 7 * d6 *
 ******** # dp0
 
 CATHODES(ANODES):
 D16 - cathode 3
 D15 - cathode 2
 D12 - cathode 1
 */
 // ------------------------------------------------------------------------------------------------
 int indicator = 0; // 0 = Катод 1 = Анод Выбрать под Ваш индикатор !!!!
 byte digits[] = {
 B00001001,B11101011,B00110001,B10100001,B11000011,B10000101,B00000101,B11101001,B00000001,B10000001};
 int digit_common_pins[]={16,15,12}; // пины для разрядов сегментов(при изменении убедитесь что Ваш порт не используется)
 int refresh_delay = 5;
 int count_delay = 1000; // COUNTING SECONDS IF count_delay = 1000
 long actual_count_delay = 0;
 long actual_refresh_delay = 0;
 int increment = 0; //Стартовое значение на сегментах
 int max_digits =3; // Кол-во знакомест
 int current_digit=max_digits-1;
 int increment_max = pow(10,max_digits);
 // -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------
 //--------------------- переменные паяльника -----------------------------
 int knopka = 3; //Пин кнопок
 int tin = 0; // Пин Датчика температуры IN Analog через LM358N
 int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM
 int tempust = 230; // установленная температура
 int tempmin = 200; // минимальная температура
 int tempmax = 480; // максимальная температура
 int tempreal = 250; // переменная датчика текущей температуры
 int temppwmmin = 40; // минимальное значение PWM нагревателя
 int temppwmmax = 180; // максимальное значение PWM нагревателя
 int temppwmreal = 0; // текущее значение PWM нагревателя
 int airreal = 100; // стартовое значение PWM вентилятора(если нужно)
 int temperror = -50; // разница температур(установленная - реальная)
 int temprazn = 0; // переменная разницы температуры(установленная - текущая)
 void setup(){
 
 if(indicator == 0){ //Если вначале был выбран общий Катод
 for(int i=0; i<10;i++){
 digits[i] = ~ digits[i];
 }
 }
 
 pinMode(pinpwm,OUTPUT); // Порт нагрузки(паяльника) настраиваем на выход
 analogWrite(pinpwm, temppwmreal); //Вывод шим в нагрузку паяльника (выводим 0 - старт с выключеным паяльником- пока не опредилим состояние температуры)
 
 
 // -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------
 DDRD = B11111111;
 for (int y=0;y<max_digits;y++)
 {
 pinMode(digit_common_pins[y],OUTPUT);
 digitalWrite(digit_common_pins[y], LOW);
 }
 // -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------
 }
 void loop() {
 
 show(increment); // Вывести значение переменной на экран(LED)
 
 
 if (tempreal < tempust ){ // Если температура паяльника ниже установленной температуры то:
 
 if ((tempust - tempreal) < 16 & (tempust - tempreal) > 6 ) // Проверяем разницу между у становленной температурой и текущей паяльника,
 // Если разница меньше 10 градусов то
 {
 temppwmreal = 99; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
 }
 else if ((tempust - tempreal) < 7 & (tempust - tempreal) > 3)
 {
 temppwmreal = 80; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
 }
 
 else if ((tempust - tempreal) < 4 )
 {
 temppwmreal = 45; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
 }
 
 
 else {
 temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255 мы делаем 230) на максимум для быстрого нагрева до нужной температуры
 }
 
 
 analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности
 }
 else { //Иначе (если температура паяльника равняется или выше установленной)
 
 temppwmreal = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) - таким образом мы отключаем паяльник
 analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности
 }
 
 
 if(millis() - actual_count_delay > count_delay) // это для сегментов
 {
 actual_count_delay = millis();
 // Здесь мы пишем нашу прогу по считыванию состояния кнопок (это место в счетчк не будет тормозить вывод на сегменты)
 
 tempreal = analogRead(0);// считываем текущую температуру
 
 tempreal=map(tempreal,-50,700,0,500); // нужно вычислить
 increment=tempreal;
 
 //---------------------------------------------------------- Кнопки -------------------------------------------------------------------------
 if (analogRead(knopka) == 0) // Если нажата вниз кнопка то понизить температуру на 5
 {
 if( tempust <= tempmin || (tempust-5) <= tempmin )
 {
 tempust= tempmin;
 increment = tempust;
 }
 else {
 tempust=tempust-5;
 increment = tempust;
 show(increment); // Вывести значение переменной на экран(LED)
 
 }
 
 
 
 }
 
 else if (analogRead(knopka) > 500 && analogRead(knopka) < 524 ) // Если нажата вверх кнопка то повысить температуру на 5
 {
 tempust=tempust+5;
 if( tempust >=tempmax)
 {
 tempust= tempmax;
 }
 increment = tempust;
 show(increment); // Вывести значение переменной на экран(LED)
 
 }
 
 
 }
 }
 void show(int value) { //------------------------------- подпрограмма для вывода на сегменты - лучше не изменять ---------------------------------------------
 int digits_array[]={};
 int y=0;
 boolean empty_most_significant = true;
 
 
 if(millis() - actual_refresh_delay >= refresh_delay)
 {
 for (int z=max_digits-1;z>=0;z--)
 {
 digits_array[z] = value / pow(10,z); //rounding down by converting from float to int
 
 if(digits_array[z] != 0 ) empty_most_significant = false; // DON'T SHOW LEADING ZEROS
 
 value = value - digits_array[z] * pow(10,z);
 
 if(z==current_digit)
 {
 if(!empty_most_significant || z==0){ // DON'T SHOW LEADING ZEROS EXCEPT FOR THE LEAST SIGNIFICANT
 
 PORTD = digits[digits_array[z]];
 }
 else
 {
 if(indicator == 0){ //Если вначале был выбран общий Катод
 PORTD = B00000000;
 }
 else{
 PORTD = B11111111;
 }
 }
 if(indicator == 0){
 digitalWrite(digit_common_pins[z], LOW);
 }
 else{
 digitalWrite(digit_common_pins[z], HIGH);
 }
 }
 else{
 
 if(indicator == 0){
 digitalWrite(digit_common_pins[z], HIGH);
 }
 else{
 digitalWrite(digit_common_pins[z], LOW);
 }
 }
 }
 
 current_digit--;
 if(current_digit < 0)
 {
 current_digit= max_digits; // NEED AN EXTRA REFRESH CYCLE TO CLEAR ALL DIGITS
 }
 
 actual_refresh_delay = millis();
 }
 }
А вот текст ошибки
- Arduino: 1.6.9 (Windows 7), Плата:"Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"
Скетч использует 4 572 байт (14%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 67 байт (3%) динамической памяти, оставляя 1 981 байт для локальных переменных. Максимум: 2 048 байт.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x1c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x1c
Проблема загрузки в плату. Помощь по загрузке: http://www.arduino.cc/en/Guide/Troubleshooting#upload .
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"






