Использую RemoteReceiver.h
Проблема в ттом, что я бы хотел сделать плавное включение и выключения. Для этого использую функцию Delay, но она в моей коде работает некоректно.
Т.е ставлю Делэй(500) и зная что 255*0,5 будет 125 сек, а цикл проходит за 1.5 сек.
Понимаю что, функция void showCode() завязана где то на прерывании, так как радиомодуль подключен к 4 ноге ардуино (Int0).Может быть в этом проблема.
создал подобный вопрос на http://arduino.ru/forum/programmirovani ... rovka-shim но там так и не смогли мне помочь.
Даю весь код
Код: Выделить всё
// include the library code:
#include <LiquidCrystal.h>
#include <RemoteReceiver.h>
#include <avr/eeprom.h>
// initialize the library with the numbers of the interface pins
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd(12, 11, 5, 4, 6, 7);
//const unsigned long receivedCode=0;
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
//lcd.print("hello, world!");
//Connect the receiver to digital pin 2.-пин 2.это вход для Радиоприёмника
RemoteReceiver::init(0, 3, showCode);
pinMode(8, OUTPUT);
pinMode(13, OUTPUT);
pinMode(9, OUTPUT); //шим на выход, там частот около 1кгц
// Пины D9 и D10 - 31.4 кГц (Переопределяем частоту ШИМ)
TCCR1A = 0b00000001; // 8bit
TCCR1B = 0b00000001; // x1 phase correct
}
void showCode(unsigned long receivedCode, unsigned int period)
{
lcd.clear();
lcd.print(":");
lcd.print(receivedCode);
lcd.print(",p:");
lcd.print(period);
int AR6;
int AR;
// on
if (receivedCode==66100)
{
AR6 =eeprom_read_byte(0);
//AR6=255;
AR=0;
while (AR<=AR6)
{
analogWrite(9, AR);
AR=AR+1;
//delay(500);
lcd.setCursor(0, 1);
lcd.print(AR);
}
}
// off
if (receivedCode==66132)
{
AR6 =eeprom_read_byte(0);
do {
analogWrite(9, AR6);
AR6=AR6-1;
delay(500);
lcd.setCursor(0, 1);
lcd.print(AR6);
} while (AR6>0)
;
}
// ступенчатое увеличение яркости
if (receivedCode==66099)
{
lcd.setCursor(0, 1);
lcd.print(AR6);
AR6 =eeprom_read_byte(0);
AR6=AR6+20;
if (AR6>255) {AR6=255;}//
analogWrite(9, AR6); // якрость
eeprom_write_byte(0,AR6);
lcd.setCursor(0, 1);
lcd.print(AR6);
}
// ступенчатое уменьшение яркости
if (receivedCode==66105)
{
AR6 =eeprom_read_byte(0);
AR6=AR6-20;
if (AR6<10) {AR6=10;}// ничего не делаем - яркость минимальная
analogWrite(9, AR6); // якрость
eeprom_write_byte(0,AR6);
lcd.setCursor(0, 1);
lcd.print(AR6);
}
}
void loop() {
}