немогу переделать функционал под 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, когда вы только сюда пришли - вас сразу предупредили, что писать код за вас никто не будет.
Я дал вам несколько ответов по делу, хотя вы постоянно оскорбляете форум. Но "пережевывать" тему за вас я не собираюсь
вы получили направление - дальше искать нужно самостоятельно