Пт окт 02, 2020 11:42:03
// 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() {
}
Пт окт 02, 2020 13:45:46
Пт окт 02, 2020 15:03:31
Пт окт 02, 2020 15:10:01
if (receivedCode==66132)
{
AR6 =eeprom_read_byte(0);
do {
analogWrite(9, AR6);
AR6=AR6-1;
cli();
delay(500);
lcd.setCursor(0, 1);
lcd.print(AR6);
sei();
} while (AR6>0)
;
}
Пт окт 02, 2020 15:11:09
Пт окт 02, 2020 15:16:52
но вставка сама по себе Дэлей() с любым значением приводи к плавному 1.5 секунднгму гашению/разгорнию.
Без Дэлей() светодиод вспыхивает без задержки.
Пт окт 02, 2020 17:07:11
NStorm писал(а):ообще правильно когда сработало прерывание - проверили код и в некую переменную записали себе что было нажато и в какое состояние мы переходим. А уже затем в цикле loop() если значение этой переменной равно нужному действию - там плавно и гасим. Тогда новые прерывания не будут мешать.
Пт окт 02, 2020 18:46:26
NStorm, как так получается что я пишу
eeprom_write_byte(0,255);
а в память ложиться ff. Это такая фишка среды ардуино,что бы я не волновался?
Пт окт 02, 2020 20:52:45
Пт окт 02, 2020 21:49:11
Пт окт 02, 2020 23:58:12
Сб окт 03, 2020 00:21:06
olegue писал(а):Есть Атмега328
olegue писал(а):я бы хотел сделать плавное включение и выключения. Для этого использую функцию Delay
olegue писал(а):управление лампой на радиомодуле
Сб окт 03, 2020 08:25:41
вот это получилось
for(int m=0; m<100;m++)
{
delay(100);
lcd.setCursor(0, 1);
lcd.print(AR);
}
работате с непонятно задержкой правда, но медленно
Сб окт 03, 2020 11:06:39
Сб окт 03, 2020 13:13:19
Сб окт 03, 2020 13:35:13
Сб окт 03, 2020 15:43:12
BOB51 писал(а):Это при работе под ассемблером или Си "в чистом виде" - при работе в рамках референса ардуиноIDE необходимо учитывать его особенности применения...
Вс окт 04, 2020 08:08:53