Как создать <avr/delay.h> в Arduino?

slaventyi
Offline
Зарегистрирован: 28.04.2014

Ребята,помогите пожалуйста. Взял код с этого сайта http://habrahabr.ru/post/145653/

Библиотеки <IRremote.h> и <EEPROM.h>добавил в программе Ардуино, а где взять <avr/delay.h> не знаю. Подскажите пожалуйста,где эту библиотеку взять??

#include <IRremote.h>
#include <avr/delay.h>
#include <EEPROM.h>
#define button 7
#define speaker 11
#define lamp 6

IRrecv irrecv(2); //вход для ик приемника
decode_results results;
unsigned long ir_command;
uint8_t swt, count, state = 0; //статус лампочки

void setup()
{
pinMode(speaker, OUTPUT);//громкоговоритель
pinMode(button, INPUT);//вход для кнопки
digitalWrite(button,HIGH);//включить подтяжку
pinMode(lamp, OUTPUT);//лампочка
irrecv.enableIRIn(); // включить приемник
}

void loop()
{
swt=digitalRead(button);
count=0;
while(swt==0)
{
if(count>30)
{
beep(100,400);
for(unsigned long i=0; i<2000000; i++)
{
if (irrecv.decode(&results))
{
SaveEEPROM(results.value);
irrecv.resume();
break;
}
}
beep(30,900);
break;
}
count++;
swt=digitalRead(button);
_delay_ms(100);
}

ir_command=LoadEEPROM();
if (irrecv.decode(&results))
{
if(ir_command==results.value)
{
state=~state;
digitalWrite(lamp, state);
beep(10,300);
_delay_ms(700);
}
irrecv.resume();
} else if(count>1)
{
state=~state;
digitalWrite(lamp, state);
beep(10,500);
_delay_ms(100);
}
}

void SaveEEPROM(unsigned long ir_code)
{
EEPROM.write(0, ir_code & 0xFF);
EEPROM.write(1, (ir_code & 0xFF00) >> 8);
EEPROM.write(2, (ir_code & 0xFF0000) >> 16);
EEPROM.write(3, (ir_code & 0xFF000000) >> 24);
}

unsigned long LoadEEPROM()
{
byte val = EEPROM.read(3);
unsigned long ir_code=val;
val = EEPROM.read(2);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(1);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(0);
ir_code= (ir_code << 8) | val;
return ir_code;
}

void beep(byte dur, word frq)
{
dur=(1000/frq)*dur;
for(byte i=0; i<dur; i++)
{
digitalWrite(speaker, HIGH);
_delay_us(frq);
digitalWrite(speaker, LOW);
_delay_us(frq);
}
}

slaventyi
Offline
Зарегистрирован: 28.04.2014

 

Ребята,помогите пожалуйста. Взял код с этого сайта http://habrahabr.ru/post/145653/

Библиотеки <IRremote.h> и <EEPROM.h>добавил в программе Ардуино, а где взять <avr/delay.h> не знаю. Подскажите пожалуйста,где эту библиотеку взять??

slaventyi
Offline
Зарегистрирован: 28.04.2014

Ребята,помогите пожалуйста. Взял код с этого сайта http://habrahabr.ru/post/145653/

Библиотеки <IRremote.h> и <EEPROM.h>добавил в программе Ардуино, а где взять <avr/delay.h> не знаю. Подскажите пожалуйста,где эту библиотеку взять??

DimaP.
Offline
Зарегистрирован: 21.04.2013

slaventyi пишет:

Ребята,помогите пожалуйста. Взял код с этого сайта http://habrahabr.ru/post/145653/

Библиотеки <IRremote.h> и <EEPROM.h>добавил в программе Ардуино, а где взять <avr/delay.h> не знаю. Подскажите пожалуйста,где эту библиотеку взять??

Уважаемый, а для чего вам сея библиотека!! Она ведь встроена в язык Arduino и вот ссылочки http://arduino.ru/Reference/Delay здесь описанно применение Delay чтобы создавать задержку миллисекундах

а вот эта ссылка http://arduino.ru/Reference/DelayMicroseconds а здесь применение выдержки в микросекундах

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

slaventyi пишет:

Ребята,помогите пожалуйста. Взял код с этого сайта http://habrahabr.ru/post/145653/

Библиотеки <IRremote.h> и <EEPROM.h>добавил в программе Ардуино, а где взять <avr/delay.h> не знаю. Подскажите пожалуйста,где эту библиотеку взять??

строка <avr/delay.h> избыточна - delay.h находится в стандартном дистрибутиве и указывать ея в скетче не обязательно для использования функции delay.

slaventyi
Offline
Зарегистрирован: 28.04.2014

Спасибо ребята! Получилось!Работает!)

Prostovova
Offline
Зарегистрирован: 17.10.2017

Я то же попробовал этот код

работает, если убираю последнюю функцию (комментирую все ее потроха)

А с ней ругается при компиляции, и похоже именно на delay

В связи с этим вопрос

Синтаксис встроеной функции: delay(ms), а в примере: _delay_us и _delay_ms

Как правильно и почему конструкция не работает?

void beep(byte dur, word frq)
{
dur=(1000/frq)*dur;
for(byte i=0; i<dur; i++)
{
digitalWrite(speaker, HIGH);
_delay_us(frq);
digitalWrite(speaker, LOW);
_delay_us(frq);
}

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Prostovova пишет:

А с ней ругается при компиляции, и похоже именно на delay

Приведите полный текст ошибки. И полный текст скетча, который не компилируется (код вставляйте по правилам).

Prostovova
Offline
Зарегистрирован: 17.10.2017

Код собственно в топике

а ругается так:(я все таки убрал много буков, но по моему затык где то здесь, а топикастер писал, что все работает)

Arduino: 1.8.5 (Windows 7), Плата:"Arduino Nano, ATmega328P"
 
"C:\Users\4B6B~1\AppData\Local\Temp\arduino_build_730615/..\arduino_cache_874660\core\core_arduino_avr_nano_cpu_atmega328_40e1cda142f995e7809c91ab4c42f7c2.a" "-LC:\Users\4B6B~1\AppData\Local\Temp\arduino_build_730615" -lm
c:\users\Users\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2\avr\include\util\delay.h: In function 'beep':
 
c:\users\Users\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2\avr\include\util\delay.h:276:40: error: __builtin_avr_delay_cycles expects a compile time integer constant
 
  __builtin_avr_delay_cycles(__ticks_dc);
 
                                        ^
 
c:\users\Users\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2\avr\include\util\delay.h:276:40: error: __builtin_avr_delay_cycles expects a compile time integer constant
 
  __builtin_avr_delay_cycles(__ticks_dc);
 
                                        ^
 
lto-wrapper: C:\Users\Users\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2/bin/avr-gcc returned 1 exit status
 
c:/users/Users/appdata/local/arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: error: lto-wrapper failed
 
collect2.exe: error: ld returned 1 exit status
 
Используем библиотеку IRremote версии 2.2.3 из папки: C:\Arduino_Skech_s\libraries\IRremote 
Используем библиотеку EEPROM версии 2.0 из папки: C:\Users\Users\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.20\libraries\EEPROM 
exit status 1
Ошибка компиляции для платы Arduino Nano.

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

_delay_us это delayMicroseconds()

_delay_ms это delay()

Prostovova
Offline
Зарегистрирован: 17.10.2017

а зачем такая разно...опица?

Блин, перестала ругаться после указанной замены

Придется динамик подключать :-)

Prostovova
Offline
Зарегистрирован: 17.10.2017

Еще вопрос по синтаксису, вызванный этим кодом:

это то же одинаковые конструкции?

state=~state; и state=!state;

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Prostovova пишет:

Еще вопрос по синтаксису, вызванный этим кодом:

это то же одинаковые конструкции?

state=~state; и state=!state;

Похоже вы простой как валенок . Это разные функции  как & ,&& , | ,||.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

~ побитовое отрицание

! логическое отрицание

Prostovova
Offline
Зарегистрирован: 17.10.2017

qwone пишет:

Похоже вы простой как валенок . Это разные функции  как & ,&& , | ,||.

[/quote]

Неа

Как чайник

Извините