немогу переделать функционал под Ir
- Войдите на сайт для отправки комментариев
Чт, 21/05/2020 - 18:47
здраствуйте помогите плиз переделать мой скеч под управление не серез кнопки а через инфракрасный пульт. нужно реализовать чтоб пульт менял яркость + можно было колибровать температуру с пульта и настраивать время. ну и цвета менять тоже не плохо былобы
вот мой скеч
//Made by Stevehh
//
//Seven-segment clock project
//Project for arduino-nano(ATmega328P)
//
//Small guide:
// pin 2 Button for turn Off/On running leds
// pin 4 Button for change minutes
// pin 5 Button for change hours
// your can change it on 75th-78th string
#include <iarduino_RTC.h>
#include <FastLED.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define NUM_LEDS 86 //Your number of leds
#define LED_TYPE WS2812B //Your chip in led-strip
#define COLOR_ORDER GRB //Type of led-strip
#define BRIGHTNESS 255 //Brigghtness for led-strip
#define LED_PIN 9 //Logic pin for led-strip
#define max_bright 255
#define min_bright 10
#define bright_constant 150
CRGB leds[NUM_LEDS];
iarduino_RTC time(RTC_DS3231); //Your time-module(DS1302, DS1307, DS3231)
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
byte digits[12][21] = {{0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1}, // Digit 0
{0,0,0, 1,1,1, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1,1,1}, // Digit 1
{1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1}, // Digit 2
{1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0}, // Digit 3
{1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 0,0,0}, // Digit 4
{1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0}, // Digit 5
{1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1}, // Digit 6
{0,0,0, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0}, // Digit 7
{1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1}, // Digit 8
{1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1}, // Digit 9
{1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0}, // Digit *0
{1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0, 0,0,0}}; // Digit C
bool TempShow=true;
bool LedSettings= false;
bool Dot = true;
int last_digit = 86;
long ledColor = CRGB::Red;
long ColorTable[16] = {
CRGB::Amethyst,
CRGB::Aqua,
CRGB::Red,
CRGB::Chartreuse,
CRGB::DarkGreen,
CRGB::DarkMagenta,
CRGB::DarkOrange,
CRGB::DeepPink,
CRGB::Fuchsia,
CRGB::Gold,
CRGB::GreenYellow,
CRGB::LightCoral,
CRGB::Tomato,
CRGB::Salmon,
CRGB::Red,
CRGB::Orchid
};
void setup() {
sensors.begin();
delay(300);
time.begin();
FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
FastLED.setBrightness(255);
pinMode(13, OUTPUT);
pinMode(7, INPUT_PULLUP); //Turn Off/On running leds
pinMode(4, INPUT_PULLUP); //Change minutes
pinMode(5, INPUT_PULLUP); //Change hours
}
void BrightnessCheck() {
const byte sensorPin = A0; // light sensor pin
const byte brightnessLow = 10; // Low brightness value
const byte brightnessHigh = 255; // High brightness value
int sensorValue = digitalRead(sensorPin); // Read sensor
if (sensorValue != 0) {
LEDS.setBrightness(brightnessHigh);
}
else {
LEDS.setBrightness(brightnessLow);
}
}
int Get_Time() {
time.gettime();
byte hour = time.Hours;
byte minute = time.minutes;
byte second = time.seconds;
if (second % 2 == 0) {Dot = true;}
else {Dot = false;};
return (hour * 100 + minute);
};
void TimeToArray() {
int Now = Get_Time();
int cursor = 86;
if (Dot) {
leds[42] = ledColor; //LED flashing
leds[43] = ledColor;
}else {
leds[42] = 0x000000;
leds[43] = 0x000000;
};
for (int i = 1; i <= 4; i++) {
int digit = Now % 10;
if (i == 1) {
cursor = 0;
for (int k = 0; k <= 20; k++) {
if (digits[digit][k] == 1) {
leds[cursor] = ledColor;
}
else if (digits[digit][k] == 0) {
leds[cursor] = 0x000000;
};
cursor ++;
};
if (digit != last_digit)
{if(LedSettings == 1){};
ledColor = ColorTable[random(16)];
}
last_digit = digit;
}
else if (i == 2) {
cursor = 21;
for (int k = 0; k <= 20; k++) {
if (digits[digit][k] == 1) {
leds[cursor] = ledColor;
}
else if (digits[digit][k] == 0) {
leds[cursor] = 0x000000;
};
cursor ++;
};
}
else if (i == 3) {
cursor = 44;
for (int k = 0; k <= 20; k++) {
if (digits[digit][k] == 1) {
leds[cursor] = ledColor;
}
else if (digits[digit][k] == 0) {
leds[cursor] = 0x000000;
};
cursor ++;
};
}
else if (i == 4) {
cursor = 65;
for (int k = 0; k <= 20; k++) {
if (digits[digit][k] == 1) {
leds[cursor] = ledColor;
}
else if (digits[digit][k] == 0) {
leds[cursor] = 0x000000;
};
cursor ++;
};
};
Now /= 10;
};
};
void TimeChange(){
time.gettime();
int SysHour = time.Hours;
int SysMin = time.minutes;
bool ChHourSys = !digitalRead(5);
if (ChHourSys == 1){
if(SysHour<23){
SysHour++;
time.settime(-1,-1,SysHour,-1,-1,-1,-1); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
}else{
SysHour=0;
time.settime(-1,-1,SysHour,-1,-1,-1,-1); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
}
delay(500);
}
bool ChMinSys = !digitalRead(4);
if (ChMinSys == 1){
if(SysMin<59){
SysMin++;
time.settime(-1,SysMin,-1,-1,-1,-1,-1); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
}else{
SysMin=0;
time.settime(-1,SysMin,-1,-1,-1,-1,-1); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
};
delay(500);
};
}
void TempToArray(){
if (time.seconds < 20 ) { ////////////////////////////////////////////////////////////////////
TempShow = false;
return;
} else {
if (time.seconds > 20 ) {
TempShow = true;
delay(3000);
sensors.requestTemperatures();
float cel = sensors.getTempCByIndex(0);
cel = cel*100+150;
int celsius = trunc(cel);
int cursor = 86; // last led number
leds[42]=ledColor;
leds[43]=0x000000;
for(int i=1;i<=4;i++){
int digit = celsius % 10; // get last digit in time
if (i==1){
cursor = 0;
for(int k=0; k<=20;k++){
if (digits[10][k]== 1){leds[cursor]=ledColor;}
else if (digits[10][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
}
else if (i==2){
cursor =21;
for(int k=0; k<=20;k++){
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
}
else if (i==3){
cursor =44;
for(int k=0; k<=20;k++){
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
}
else if (i==4){
cursor =65;
for(int k=0; k<=20;k++){
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
}
celsius /= 10;
};
};
};
}
void loop() {
BrightnessCheck(); // Check brightness
TimeChange();
TimeToArray(); // Get leds array with required configuration
TempToArray();
FastLED.show(); // Display leds array
}
за ранее спасибо
А препод чо говорит?
читайте правила форума - на форуме не делают работу за других. Мы можем вам помочь с вашей задачей при условии, что вы покажете, что пытались решить ее сами. Обязательгым условием является свой собственный код, направленный на решение задачи.
В выложенном вами скетче нет никаких попыток добавления IR управления. так что пока помогать вам причин нет.
здраствуйте помогите плиз переделать мой скеч под управление не серез кнопки а через инфракрасный пульт. нужно реализовать чтоб пульт менял яркость + можно было колибровать температуру с пульта и настраивать время. ну и цвета менять тоже не плохо былобы
вот мой скеч
за ранее спасибо
Спасибо - это очень много. Вот 15т.р. - это нормально.
54 стока ни о чем не говорит?
ну если на то пошло.
вот добавил функции ИР и смены яркость но всеравно как реализовать подствойку времени и смену цвета пока незнаю
смену цвета - так же как яркость. Текущий цвет задается в строке 54, в строке 55 начинается таблица всех доступных цветов.
В процедуре приема команд с пульта заводите код еще одной кнопки по аналогии с яркостью - и на эту кнопку вешаете увеличение номера цвета из таблицы. В итоге у вас при нажатии кнопки 16 цветов будут менятся по кругу.
Подстройку времени сделать с пульта сложнее, но принциптот же - на одну кнопку заводите увеличение часов на единицу, на другую - увеличение минут на 10 и на третью - минут на один...
Проблема может быть в чем угодно.
Я-то как раз имею понятие и ответ соответствует заданному вопросу. Абсолютли.
про коды повтора кнопок в курсе?
Пишите вопросы четче, чтоб не получать "остроумные" ответы. В каких ситуацих выдает "несколько кодов"? "несколько" - это сколько? - два, пять, десять? какие из них разные и какие совпадают?
может всетки найдется человек каторый сможет подсказать где я не правильно что сделал или что мне изменить чтоб настройки часов менялись в реальном времени а не с задержками
так вы сами насажали в код задержек. Зачем у вас в процедуре настройки времени две задержки по 500 мс? Более того - зачем у вас процедуре показа температуры задержка в 3 сек (3000 мс)? - с ней у вас вообще этот код нормально работать не будет
Я знаю тот код, который вы брали за основу, в нем никаких задержек не было.
вариантов много. Можно обнулять results.value, а можно добавить флаг "новые данные. Приняли сигнал с пульта - выставили флаг. Обработали один раз - сбросили. И реагировать на команду с пульта. только когда флаг выставлен
Поищи сам. Тебе же надо, а нам трудно.
pitrus - если вам не отвечают, то вариантов может быть много:
- никто не знает ответа
- всем лень или недосуг, нет настроения
- неохота связываться с нубом, слишком много обьяснять...
- личные мотивы и тд
Главное, что вам стоит усвоить - вам никто ничем не обязан. Ответили - скажите спасибо, не ответили - ищите ответы в другом месте или разбирайтесь сами.
А обсирать форум. только потому что никто не берется с вами за ручку выписывать буковки в прописи - не дело.
ОК, сжалюсь над новичком и дам ссылку на флаги - ссылка.
pitrus, когда вы только сюда пришли - вас сразу предупредили, что писать код за вас никто не будет.
Я дал вам несколько ответов по делу, хотя вы постоянно оскорбляете форум. Но "пережевывать" тему за вас я не собираюсь
вы получили направление - дальше искать нужно самостоятельно