error: 'ardprintf' was not declared in this scopeпопробуйте распечатать переменные T,T1,D1,D2:
Код:#include "CyberLib.h" //Библиотека от Cyber-Place.ru volatile uint32_t T,T1,D1,D2; #define DT 10 //длительность импульса #define Tdet 10000 //длительность импульса 100 Гц #define Tdet2 Tdet/2 // половина длительность 100 Гц void setup() { D5_Out; D6_Out; //Настраиваем порты на выход D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль pinMode(A0, INPUT); pinMode(A1, INPUT); T=micros(); attachInterrupt(0,detect,RISING); // настроить срабатывание прерывания interrupt0 на pin 2 по положительному фронту UART_Init(115200); //инициализация порта } void loop() { D5_Low; D6_Low; T1=micros()-T; ardprintf(" %d %d %d %d ", T,T1,D1,D2); if (T1>0 && T1<Tdet) //контроль длительности импульса детектора { if (D1-T1)>0) { D5_High; delayMicroseconds(DT);D1=0;} if (D2-T1)>0) { D6_High; delayMicroseconds(DT);D2=0;} } } void detect() // обработка внешнего прерывания { if (T1>Tdet2) //фильтр дребезга перехода { T=micros(); D1=map(analogRead(0), 0, 1023, 255, 0); // Эти входы для потенциометров D2= map(analogRead(1), 0, 1023, 255, 0); } }
Понимаю.у меня нет такого модуля, поэтому отладить могу на ESP8266 и на СИ.
искал в ардуине эквивалент os_printf с форматом, нашел этот.error: 'ardprintf' was not declared in this scope
ardprintf(" %d %d %d %d ", T,T1,D1,D2);
^~~~~~~~~
Или я не понимаю что подразумевается под словом "распечатать переменные"? ((
Я частично брал готовый скетч но на один канал и с управлением по серийному порту. Немножко поиздевался над ним как мог, попутно лазя по форумам. То что получилось - получилось. Все работает, да вот, мерцает немножко, что бьет по глазам и нервам.Еще обратил внимание, что у вас вроде бы алгоритм в скетче не соответствует схеме.
Вы схему и скетч сами написали или взяли готовую?
На сколько я понял, вместо "void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту " надо поменять на стабильную длительность импульса в 10 мс и тогда остановка таймера.Но вы по его окончанию останавливаете таймер.
По-моему здесь ошибка. проверьте логику .
нет не то.На сколько я понял, вместо "void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту " надо поменять на стабильную длительность импульса в 10 мс и тогда остановка таймера.
Только вот какими магическими байками ему указывать это? Может кто в курсе магии Nano?
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint32_t T,T1,D1,D2,s;
volatile uint8 s,s1; // s - сигнал pin2
#define DT 10 //длительность импульса
#define Tdet 10000 //длительность импульса 100 Гц
#define Tdet2 Tdet/2 // половина длительность 100 Гц
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT); pinMode(A1, INPUT);
T=micros(); s=0; s1=0;
UART_Init(115200); //инициализация порта
}
void loop()
{ D5_Low; D6_Low;
T1=micros()-T;
if ((T1>0) && (T1<Tdet)) //контроль длительности импульса детектора
{
if ((D1-T1)>0) { D5_High; delayMicroseconds(DT);D1=0;}
if ((D2-T1)>0) { D6_High; delayMicroseconds(DT);D2=0;}
}
s=... //читаем сигнал с pin2 в s -- надо добавить чтение пина
if ((s==1) && (s1==0)) {
T=micros();
D1 = map(analogRead(0), 0, 1023, 255, 0);
D2 = map(analogRead(1), 0, 1023, 255, 0);
}
s1=s;
}
Не понял. Так там же и есть указан Pin2 на чтение перехода нуля. Что-то еще надо ему прикручивать?вот еще вариант более простой ,без прерываний И таймера
надо вставить чтение pin2.
вот тутНе понял. Так там же и есть указан Pin2 на чтение перехода нуля. Что-то еще надо ему прикручивать?
Дело ясное что дело темное. Надо искать форум по Nano.вот тут
s=... //читаем сигнал с pin2 в s -- надо добавить чтение пина
надо написать присвоение s значения pin2
попробуйте этот вариант:Дело ясное что дело темное. Надо искать форум по Nano.
Спасибо огромное вам за попытку разрешить вопрос.
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint32_t tic, Dimmer1, Dimmer2;
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT);
pinMode(A1, INPUT);
attachInterrupt(0, detect_up, LOW); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
UART_Init(115200); //инициализация порта
}
void loop()
{
D5_Low; D6_Low;
uint32_t T1=micros()-tic;
if ((Dimmer1-T1)>0) { D5_High; delayMicroseconds(100);Dimmer1 =0;}
if ((Dimmer2-T1)>0) { D6_High; delayMicroseconds(100);Dimmer2 =0;}
}
//********************обработчики прерываний*******************************
void detect_up()
{
attachInterrupt(0, detect_down, HIGH); //перепрограммировать прерывание на другой обработчик
}
void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
{
tic=micros();
Dimmer1= map(analogRead(0), 0, 1023, 255, 0); // Эти входы для потенциометров
Dimmer2 = map(analogRead(1), 0, 1023, 255, 0); }
attachInterrupt(0, detect_up, LOW); //перепрограммировать прерывание на другой обработчик
}
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint16 tic, Dimmer1, Dimmer2;
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT);
pinMode(A1, INPUT);
attachInterrupt(0, detect,High); // настроить прерывание interrupt0 на pin 2 на высокий уровень
UART_Init(115200); //инициализация порта
}
void loop()
{
D5_Low; D6_Low;
uint16 T1=micros()-tic;
digitalWrite(ledPin, val); // устанавливаем значение на све
if ((Dimmer1-T1)>0) { D5_High; delayMicroseconds(50);Dimmer1 =0;}
if ((Dimmer2-T1)>0) { D6_High; delayMicroseconds(50);Dimmer2 =0;}
}
//********************обработчики прерываний*******************************
void detect() // обработка внешнего прерывания.
{
tic=micros();
Dimmer1= map(analogRead(0), 0,1023,50,9800); // Эти входы для потенциометров
Dimmer2 = map(analogRead(1), 0,1023,50,9800);
}
Код:
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint16 tic, Dimmer1, Dimmer2;
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT);
pinMode(A1, INPUT);
attachInterrupt(0, detect,High); // настроить прерывание interrupt0 на pin 2 на высокий уровень
UART_Init(115200); //инициализация порта
}
void loop()
{ D5_Low; D6_Low;
uint16 T1=micros()-tic;
if (T1>0) {
if ((Dimmer1-T1)>0) { D5_High; delayMicroseconds(50);Dimmer1 =0;}
if ((Dimmer2-T1)>0) { D6_High; delayMicroseconds(50);Dimmer2 =0;}
}
}
//********************обработчики прерываний*******************************
void detect() // обработка внешнего прерывания.
{
tic=micros();
Dimmer1= map(analogRead(0), 0,1023,50,9800); // Эти входы для потенциометров
Dimmer2 = map(analogRead(1), 0,1023,50,9800);
}
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint16 tic, Dimmer1, Dimmer2;
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT); pinMode(A1, INPUT);
attachInterrupt(0, detect,High); // interrupt0 на pin 2 на высокий уровень
UART_Init(115200); //инициализация порта
}
void loop()
{ D5_Low; D6_Low;
tic++;
if ((Dimmer1-tic)>0) { D5_High; Dimmer1 =0;}
if ((Dimmer2-tic)>0) { D6_High; Dimmer2 =0;}
}
}
//********************обработчики прерываний*******************************
void detect()
{ tic=0; Dimmer1=analogRead(0); Dimmer2=analogRead(1); }
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint16 Dimmer1, Dimmer2;
void setup()
{
D5_Out; D6_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(A0, INPUT); pinMode(A1, INPUT);
attachInterrupt(0, detect,High); // настроить срабатывание прерывания interrupt0 на pin 2 на высокий уровень
UART_Init(115200); //инициализация порта
}
void loop()
{ D5_Low; D6_Low;
if ((Dimmer1--)==0) D5_High;
if ((Dimmer2--)==0) D6_High;
}
//********************обработчики прерываний*******************************
void detect()
{ Dimmer1=analogRead(0)+5; Dimmer2=analogRead(1)+5; }
error: 'uint16' does not name a type; did you mean 'uint16_t'?совсем смешной диммер:
Код:#include "CyberLib.h" //Библиотека от Cyber-Place.ru volatile uint16 Dimmer1, Dimmer2; void setup() { D5_Out; D6_Out; //Настраиваем порты на выход D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль pinMode(A0, INPUT); pinMode(A1, INPUT); attachInterrupt(0, detect,High); // настроить срабатывание прерывания interrupt0 на pin 2 на высокий уровень UART_Init(115200); //инициализация порта } void loop() { D5_Low; D6_Low; if ((Dimmer1--)==0) D5_High; if ((Dimmer2--)==0) D6_High; } //********************обработчики прерываний******************************* void detect() { Dimmer1=analogRead(0)+5; Dimmer2=analogRead(1)+5; }
попробуйте заменить на uint32_terror: 'uint16' does not name a type; did you mean 'uint16_t'?
volatile uint16 Dimmer1, Dimmer2;
^~~~~~
uint16_t
________________________________________________________________________