-
Re: Фен паяльный
По отдельности скетчи работают нормально. Первый крутит вентилятор, второй регулирует накал лампочки. Но при попытке их объединить - лампочка мерцает.
Первый
PHP код:
#include <Encoder.h>
#define PIN_ENCODER_CLK 5
#define PIN_ENCODER_DT 6
#define PIN_ENCODER_SW 7
Encoder myEnc(PIN_ENCODER_DT, PIN_ENCODER_CLK);
int motorPin = 3;
int motorSpeed = 75; // Изначальная скорость двигателя
int accel = 1;
int i = 0;
long oldPosition = 0;
void setup() {
TCCR2B = TCCR2B & 0b11111000 | 7;
Serial.begin(9600);
pinMode(motorPin, OUTPUT);
}
void loop(){
analogWrite(motorPin, motorSpeed); // Устанавливаем первоначальную скорость
//=== ручка энкодера/регулироака
long newPosition = myEnc.read() / accel;
if (newPosition > oldPosition)
{
analogWrite(motorPin, newPosition);
motorSpeed += 5; // Прибавляем скорость
Serial.println(">>>");
if ( motorSpeed > 255 )
motorSpeed = 255;
}
else
if (newPosition < oldPosition)
{
analogWrite(motorPin, newPosition);
motorSpeed -= 5; // Убавляем скорость
Serial.println("<<<");
if ( motorSpeed < 75 )
motorSpeed = 75;
}
if ( newPosition != oldPosition)
{
i = (i + 1)%16;
oldPosition = newPosition;
analogWrite( motorPin, motorSpeed );
Serial.println(motorSpeed);
}
}
Второй
PHP код:
#include <Encoder.h>
#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile unsigned long Dimmer;
#define PIN_ENCODER_CLK 5
#define PIN_ENCODER_DT 6
#define PIN_ENCODER_SW 7
Encoder myEnc(PIN_ENCODER_DT, PIN_ENCODER_CLK);
int accel = 1;
int i = 0;
long oldPosition = 0;
void setup() {
D4_Out; //Настраиваем порты на выход
D4_Low; //установить на выходах низкий уровень сигнала
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
attachInterrupt(0, detect_up, RISING); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
Dimmer = 4500;
}
//********************обработчики прерываний*******************************
void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{
delay_us(Dimmer);
D4_High;
delay_us(40); //формируем импульс включения симистора
D4_Low;
}
//*************************************************************************
void loop(){
//=== ручка энкодера/регулироака
long newPosition = myEnc.read() / accel;
if (newPosition > oldPosition)
{
Dimmer -= 100;
if ( Dimmer < 2500 )
Dimmer = 2500;
}
else
if (newPosition < oldPosition)
{
Dimmer += 100;
if ( Dimmer > 9500 )
Dimmer = 9500;
}
if ( newPosition != oldPosition)
{
i = (i + 1)%16;
oldPosition = newPosition;
Dimmer = Dimmer;
}
}
Вместе
PHP код:
#include <Encoder.h>
#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile unsigned long Dimmer;
#define PIN_ENCODER_CLK 5
#define PIN_ENCODER_DT 6
#define PIN_ENCODER_SW 7
Encoder myEnc(PIN_ENCODER_DT, PIN_ENCODER_CLK);
int motorPin = 3;
int motorSpeed = 75; // Изначальная скорость двигателя
int accel = 1;
int i = 0;
long oldPosition = 0;
void setup() {
D4_Out; //Настраиваем порты на выход
D4_Low; //установить на выходах низкий уровень сигнала
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
attachInterrupt(0, detect_up, RISING); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
Dimmer = 4500;
TCCR2B = TCCR2B & 0b11111000 | 7; Serial.begin(9600);
pinMode(motorPin, OUTPUT);
}
//********************обработчики прерываний*******************************
void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{
delay_us(Dimmer);
D4_High;
delay_us(40); //формируем импульс включения симистора
D4_Low;
}
//*************************************************************************
void loop(){
analogWrite(motorPin, motorSpeed); // Устанавливаем первоначальную скорость
//=== ручка энкодера/регулироака
long newPosition = myEnc.read() / accel;
if (newPosition > oldPosition)
{
Dimmer -= 100;
if ( Dimmer < 500 )
Dimmer = 500;
analogWrite(motorPin, newPosition);
motorSpeed += 5; // Прибавляем скорость
Serial.println(">>>");
if ( motorSpeed > 255 )
motorSpeed = 255;
}
else
if (newPosition < oldPosition)
{
Dimmer += 100;
if ( Dimmer > 9500 )
Dimmer = 9500;
analogWrite(motorPin, newPosition);
motorSpeed -= 5; // Убавляем скорость
Serial.println("<<<");
if ( motorSpeed < 75 )
motorSpeed = 75;
}
if ( newPosition != oldPosition)
{
i = (i + 1)%16;
oldPosition = newPosition;
Dimmer = Dimmer;
analogWrite( motorPin, motorSpeed );
}
}
На больших оборотах / напряжении всё нормально, только на малых лампочка моргает
-
Re: Фен паяльный
Я бы для начала закоментировал все что связано с serial
-
Re: Фен паяльный
Уже сделано - это только тут осталось.
-
Re: Фен паяльный
-
Вложений: 1
Re: Фен паяльный
Да, но стоит отключить программно вентилятор //analogWrite( motorPin, motorSpeed ) ; нет вспышек
Хотел снять видео как вспыхивает, но неожиданно задымил резистор
Вложение 19341
-
Re: Фен паяльный
резистор 0,5W ?
Нужно код диммера из шапки брать, этот не пойдет
-
Re: Фен паяльный
Но диммер то работал пока не стал скрещивать с вентилятором. Брал тут
У меня такая схема
http://sampawno.ru/download/file.php...c09efe476987e1
Поменял резистор - снял видео. На полной мощности всё ок, ниже середины начинаются вспышки
https://www.youtube.com/watch?v=enl9DnBYIVQ
-
Re: Фен паяльный
По ссылке такой же код как в шапке темы. Который отличается от Вашего
-
Re: Фен паяльный
Ааа код.. а я про схему (совсем запарился сегодня)
-
Re: Фен паяльный
В схеме все нормально. Если не считать резисторы 0,25Вт