Тинька Пульт и Свет
- Войдите на сайт для отправки комментариев
Сб, 09/01/2016 - 19:43
Накидал я скетч (точнее собрал из кусков) для управления светом.
Спаял уже платку на базе ATtiny85.
Ввиду своей огромной опытности в програмировании, не могу догнать как оптимизировать код так, чтобы он помещался в тиньку.
#include <IRremote.h> // это скачанная библиотека int RECV_PIN = A3; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; unsigned long eventTime=0; boolean but1 = true; byte power = 20; byte light = 0; #define Led 1 // светодиодик в выключателе #define button A2 // обычный выключатель света #define L1 4 // выход, через MOSFET свет void setup(){ irrecv.enableIRIn(); // включить приемник pinMode(Led, OUTPUT); // назначаем пины как выходы pinMode(L1, OUTPUT); pinMode(button,INPUT_PULLUP); pinMode(RECV_PIN, INPUT); } void loop() { if (digitalRead(RECV_PIN) == LOW) eventTime=millis(); if(millis()-eventTime>100) digitalWrite(Led, LOW); if (irrecv.decode(&results)) { if (results.value == 2155833750 || results.value == 2155815390 || results.value == 2155824060 || results.value == 2155856700)digitalWrite(Led, HIGH); if (results.value == 2155833750 && power <= 250) power = power + 5; if (results.value == 2155856700 && power >=5) power = power - 5; if (results.value == 2155815390) {light = 0; analogWrite (L1, light);} if(results.value == 2155824060 || results.value == 2155833750 || results.value == 2155856700) { light = power; analogWrite(L1, light);} irrecv.resume(); } boolean but2 = digitalRead(button); if(but1 == !but2){ eventTime=millis(); if(millis()-eventTime>50) but2 = digitalRead(button); if(but1 == !but2 && light >= 1) light = 0; else if (but1 == !but2 && light == 0) light = power; analogWrite(L1, light); but1 = but2; } }
На ARDUINO PRO MICRO (с изменением пинов ввода\вывода) все работает.
При смене платы на ATTiny85 - IDE выдает ошибку:
Arduino: 1.6.1 (Windows 7), Плата"ATtiny85 @ 16 MHz (internal PLL; 4.3 V BOD)"
Third-party platform.txt does not define compiler.path. Please report this to the third-party hardware maintainer.
c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.8.1/../../../../avr/bin/ld.exe: C:\Users\D899~1\AppData\Local\Temp\build2294397848251248995.tmp/IRDA2.cpp.elf section `.text' will not fit in region `text'
c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.8.1/../../../../avr/bin/ld.exe: region `text' overflowed by 340 bytes
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.
Это сообщение будет содержать больше информации чем
"Отображать вывод во время компиляции"
включено в Файл > Настройки
SERgunCHIK, скорее никак, этот код не для тинек. мою тему читали? Я правда потом случайно нашёл специальную библиотеку ir-remote для дижиспарка из пакета DigistumpIDE1.5.8C, но не изучал её , т.к. уже было не актуально.
Мало чего понял, но похоже, вся проблема в тяжелой библиотеке.
При условии, что будет использоваться 1 пульт, и заранее известные команды с него.
Можно ли обойтись вообще без библиотеки?
Можно ли обойтись вообще без библиотеки?
Я же обошёлся ) Но вам бы посоветовал вытащить библу из дижистампа.
Такая же байда для Atmega8, Atmega88. Та же самая ошибка...При этом на Attiny85 скомпилировалось и прошилось...На симуляторе работает.. https://wokwi.com/projects/337797792212714066
Кто нить может подсказать в чем дело то?
In order to fit the examples to the 8K flash of ATtiny85 and ATtiny88, the Arduino library ATtinySerialOut is required for this CPU's.
Я вообще не понимаю, зачем на радио пульте Сериал?
Что касается радио на Тини, уточните, вам нужен приемник или передатчик? Чтобы запустить приемник на тини85, в стандартной либе достаточно исправить одну строчку. Помнится, я даже писал об этом на форуме году так в 18м... И занимает эта либа совсем немного места...
У ТС весь код 50 строк, это все должно помещать в 85-у со свистом, это же не тини13, у 85й целых 8к
Это временно , прошивать конечно же не буду сериал
Нужен приемник...Как я уже писал выше на Тини85 код прошивается на ура....а вот на Атмеге8, 88 ни в какую не хочет, ошибка...
.........`.text' will not fit in region `text'
Что эти ошибки означают?? Текст не поместился в область текст и вторая типа область `текст переполнена на 486 байт текста? Какого текста? у меня нет области текста...
'если опустить технические подробности, это означает что ваша прошивка на 486 байт больше доступного размера флеша на плате. Вы точно ту самую плату выбираете? Сколько там места под программу?
На вид ваш код не должен занимать больше 3-4кбайт...
Сейчас попробовал собрать для Атмеги88 - у меня ваш код входит.
С сериалом размер 7580 байт, без Сериала - 7056 байт.
А у Атмеги88 - 8192 байта...
Сейчас попробовал собрать для Атмеги88 - у меня ваш код входит.
С сериалом размер 7580 байт, без Сериала - 7056 байт.
А у Атмеги88 - 8192 байта...
Подскажите какую IDE используете, ну и плата какая?
Подскажите какую IDE используете, ну и плата какая?
плата атмега88, а IDE 1.8.13
А вообще, попробуйте лучше либу IRSwitch.h вместо IRRemote.h, она раза в два меньше...
Подскажите какую IDE используете, ну и плата какая?
плата атмега88, а IDE 1.8.13
А вообще, попробуйте лучше либу IRSwitch.h вместо IRRemote.h, она раза в два меньше...
Такая?
ну почти :) Я плату в ИДЕ сам добавлял, там столько подробностей нет.
Главное отличие - у меня плата без бута.
А для того чтоб проверить, сколько у вас реально занимает код - скомпилируйте свой скетч для платы Ардуино Нано. Контроллер точно такой же, только размер больше, размер кода будет тем же как для атмеги88, но зато Ардуино ИДЕ вам его покажет, а не будет ругаться что нет памяти
Вот щас снова попробывал для Atmega8, 88 снова ошибка, а для Attiny85 все скомпилировалось без ошибок...я не понимаю ваще...(((
ну почти :) Я плату в ИДЕ сам добавлял, там столько подробностей нет.
Главное отличие - у меня плата без бута.
можно ссылочку на вашу плату?
можно ссылочку на вашу плату?
какую ссылочку, о чем вы? Я же пишу - я сам ее добавлял, то есть открывал файл boards.txt и вручную вписывал...
Но не думайте, от того как описана плата - размер кода не меняется. Размер может зависеть от версии ИДЕ и от версий библиотек. У вас что-то не то с настройками, размер получается на 1500 байт больше моего...
Кстати, какой размер получается для Тини?
можно ссылочку на вашу плату?
Кстати, какой размер получается для Тини?
А еще...когда я захожу в менеджер плат выскакивает вот такая надпись, не подскажете как от этого избавиться, ведь такого не должно быть?
Не найден boards.txt в C:\Users\Boris\AppData\Local\Arduino15\packages\ATtiny10Core\hardware\avr\2.1.0. Это точно pre-1.5?
Что у тебя там не получается то? По идеи - там не может не получиться.
У меня (Arduino IDE 1.8.19 / MiniCore):
1) Atmega8:
2) Atmega88:
Другое ядро (Arduino IDE 1.8.19 / ATTinyCore):
3) Attiny85:
Скомпилированные выше HEX-файлы можно взять тут: https://cloud.mail.ru/public/oCZq/utqZqTd8X
Используемые настройки:
Atmega8:
Atmega88:
Attiny85:
Используемый для компиляции код из #4:
А вот у меня для Nano:
Заметь, у меня для всех atmega8/88/328 указано количество байт глобальных переменных как 686, а у тебя почему-то - 426. Из чего я делаю вывод, что выложил ты один код, а компилируешь совершенно другой!
Заметь, у меня для всех atmega8/88/328 указано количество байт глобальных переменных как 686, а у тебя почему-то - 426. Из чего я делаю вывод, что выложил ты один код, а компилируешь совершенно другой!
У меня тоже на его коде получвется примерно 400
На Тини 85 у меня тоже чуть больше 400, возможно это и не «показатель».
А на нано у тебя какой "выхлоп"?
А на нано у тебя какой "выхлоп"?
мои результаты в сообщении #10
Короче все работает на другом компе, все компилируется и прошивается... Разобрался почему и на этом компе не работало!! Все дело в библиотеке IRremote.h было, перекачал с гитхаба другую, залил, все заработало, закомпилировалось...Теперь вот так для Atmega88
Скомпилированные выше HEX-файлы можно взять тут: https://cloud.mail.ru/public/oCZq/utqZqTd8X
Спасибо конечно, но это ж симуляция, коды кнопок из симулятора... https://wokwi.com/projects/337825464684905042
позже будут реальные...