Luis Rodil-Fernandez
2 years ago
commit
ff653faa60
2 changed files with 180 additions and 0 deletions
-
8README.md
-
172chirpbot.ino
@ -0,0 +1,8 @@ |
|||
# Chirpbot |
|||
|
|||
It chirps, it's electronic, it's the chirpbot. |
|||
|
|||
Feed with sun. |
|||
Sleeps at sunset. |
|||
|
|||
|
@ -0,0 +1,172 @@ |
|||
// https://www.youtube.com/watch?v=tVwQ8cb8HbQ
|
|||
// ATtyny85 chirping and sleep
|
|||
|
|||
int analogPin = 3; |
|||
|
|||
/////////////
|
|||
#include <avr/sleep.h>
|
|||
void setup() { |
|||
pinMode(PB4, OUTPUT); //BEEP
|
|||
pinMode(PB3, INPUT); // ANALOG INPUT FOR RANDOM
|
|||
// randomSeed(analogRead(0));
|
|||
randomSeed(analogRead(PB3)); |
|||
setup_watchdog(7); //8 seconds
|
|||
} |
|||
|
|||
/////////////
|
|||
void loop() { |
|||
sleep(); |
|||
} |
|||
|
|||
/////////////
|
|||
void sleep() { |
|||
|
|||
digitalWrite (PB4,LOW); |
|||
ADCSRA &= ~_BV(ADEN); // ADC off
|
|||
set_sleep_mode(SLEEP_MODE_PWR_DOWN); |
|||
sleep_enable(); // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
|
|||
sei(); // Enable interrupts
|
|||
sleep_cpu(); // sleep
|
|||
|
|||
// cli(); // Disable interrupts
|
|||
// sleep_disable(); // Clear SE bit
|
|||
// sei(); // Enable interrupts
|
|||
|
|||
|
|||
} |
|||
|
|||
// Watchdog Interrupt Service / is executed when watchdog timed out
|
|||
ISR(WDT_vect) { |
|||
cli(); // Disable interrupts
|
|||
sleep_disable(); // Clear SE bit
|
|||
sei(); |
|||
|
|||
// BEGIN: this is where sound is generated
|
|||
tweet(2, 1); |
|||
//chirp();
|
|||
// END: this is where sound is generated
|
|||
|
|||
// setup_watchdog(random(5)+4); // add by tez
|
|||
// randomSeed(analogRead(analogPin));
|
|||
setup_watchdog(random(5)+random(3) + 2); // add by tez
|
|||
} |
|||
|
|||
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
|
|||
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
|
|||
void setup_watchdog(int ii) { |
|||
byte bb; |
|||
int ww; |
|||
if (ii > 9 ) ii=9; |
|||
bb=ii & 7; |
|||
if (ii > 7) bb|= (1<<5); |
|||
bb|= (1<<WDCE); |
|||
ww=bb; |
|||
|
|||
MCUSR &= ~(1<<WDRF); |
|||
// start timed sequence
|
|||
WDTCR |= (1<<WDCE) | (1<<WDE); |
|||
// set new watchdog timeout value
|
|||
WDTCR = bb; |
|||
WDTCR |= _BV(WDIE); |
|||
} |
|||
|
|||
/////////////
|
|||
void chirp() { |
|||
int inten_rand, chirpNum_rand; |
|||
inten_rand = int(random(2,4)); |
|||
chirpNum_rand = int(random(3,6)); |
|||
highChirp(inten_rand,chirpNum_rand); |
|||
// delay(100);
|
|||
delay(random(50,200)); |
|||
if(random(2) == true){ |
|||
lowChirp(200,2); |
|||
} |
|||
// delay(100);
|
|||
delay(random(50,200)); |
|||
// tweet(4,2);
|
|||
} |
|||
|
|||
/////////////
|
|||
void highChirp(int intensity, int chirpsNumber){ |
|||
int i; |
|||
int x; |
|||
int chirp_delay; |
|||
// chirp_delay = random(6, 9)*4;
|
|||
|
|||
chirp_delay = random(1, 15)*4; |
|||
|
|||
int reptimes = random(60, 300); |
|||
|
|||
for(int veces=0; veces<=chirpsNumber; veces++){ |
|||
for (i=50; i<reptimes; i=(i+1)) // 200
|
|||
{ |
|||
for (x=0; x<intensity; x++) |
|||
{ |
|||
digitalWrite (PB4,HIGH); |
|||
delayMicroseconds(i); |
|||
//if(i>300) delayMicroseconds(i);
|
|||
//else delayMicroseconds ((400-i));
|
|||
digitalWrite (PB4,LOW); |
|||
delayMicroseconds(i); |
|||
//if(i>300) delayMicroseconds(i);
|
|||
//else delayMicroseconds ((400-i));
|
|||
//delayMicroseconds (i);
|
|||
} |
|||
} |
|||
delay(chirp_delay); |
|||
chirp_delay=chirp_delay*0.75; |
|||
} |
|||
} |
|||
|
|||
/////////////
|
|||
void lowChirp(int intensity, int chirpsNumber){ |
|||
int i; |
|||
int x; |
|||
|
|||
int reptimes = random(1, 2); //random(100, 300);
|
|||
|
|||
for(int veces=0; veces<=chirpsNumber; veces++){ |
|||
for (i=0; i<reptimes; i++) // 200
|
|||
{ |
|||
digitalWrite (PB4,HIGH); |
|||
delayMicroseconds(i); |
|||
digitalWrite(PB4,LOW); |
|||
delayMicroseconds(i); |
|||
} |
|||
|
|||
int i_hi = random(90,150); |
|||
int i_lo = abs(i_hi - random(30,90)); |
|||
// for (i=90; i>80; i--)
|
|||
for (i=i_hi; i>i_lo; i--) |
|||
{ |
|||
int xrep = random(1,9); |
|||
for ( x=0; x<xrep; x++) // 5
|
|||
{ |
|||
digitalWrite (PB4,HIGH); |
|||
delayMicroseconds (i); |
|||
digitalWrite (PB4,LOW); |
|||
delayMicroseconds (i); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
/////////////
|
|||
void tweet(int intensity, int chirpsNumber){ |
|||
int i; |
|||
int x; |
|||
//normal chirpsNumber 3, normal intensity 5
|
|||
for(int veces=0; veces<chirpsNumber; veces++){ |
|||
for (int i=80; i>0; i--) |
|||
{ |
|||
for (int x=0; x<intensity; x++) |
|||
{ |
|||
digitalWrite (PB4,HIGH); |
|||
delayMicroseconds (i); |
|||
digitalWrite (PB4,LOW); |
|||
delayMicroseconds (i); |
|||
} |
|||
} |
|||
} |
|||
delay(1000); |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue