does anyone know where I can get the library jeelib.h. I need itb to compile cricket. tia
Likely from one of the links off this page:
https://jeelabs.org/w/download/
... I could not find it however. Do you have a source code link that requires this lib?
Here it is: https://github.com/jeelabs/jeelib/blob/master/JeeLib.h
/* ---------------------------------
"Crickeduino" by Connor Nishijima
---------------------------------
Released under the GPLv3 License
http://www.gnu.org/licenses/gpl-3.0.en.html
This is a prank sketch designed to produce convincing cricket noises
at random intervals and go into deep sleep when not in use. Loudness
attenuation is done using my Volume library:
https://github.com/connornishijima/arduino-volume1
I developed this library specifically for this project, so that I
could hide a "cricket" in my pal's vent with magnets. By driving the
speaker or piezo with a PWM whose frequency is higher than your hearing
range, you can attenuate the perceived volume of the sound creating a
more convincing cricket.
Deep sleep is acheived with the amazing JeeLib "Sleepy" function.
Using an ATmega328p with nothing but the speaker and a ceramic resonator
to drive it at 16MHz with 5 volts, current usage is as follows:
Awake: 16.0 mA
Sleep: 0.2 mA
Estimated life on 2x 2500mAh 18650 batteries (6.6V): 438 days
(You will also lose a bit of current depending on what 5V regulator you
use, bringing the total days a bit lower. Stick to switching regulators
as opposed to linears like the LM7805.)
I haven't gotten my Volume library to run properly at 8MHz / 3.3V,
but if you can the efficency would increase by a factor of 5:
Awake: 3.60 mA
Sleep: 0.04 mA
Estimated life on 2500mAh 18650 battery: 2,191 days - no regulator needed
However, running on 3.3 volts results in only 66% the maximum volume,
so you might have to be creative on how to hide this project effectively.
16MHz boards only - only tested with ATmega328p / Arduino Uno.
This will work on 16MHz ATmega32u4 based boards like the Pro Micro if you
alter the Volume library init to use pin 3 instead of 5 or 6.
*/
#include <Volume.h> // Used for programmatic volume control
#include <JeeLib.h> // Used for deep sleep
Volume vol; // Plug your speaker into the default pin for your board type:
// https://github.com/connornishijima/arduino-volume1#supported-pins
ISR(WDT_vect) { // Jeelib Sleepy uses this to wake back up
Sleepy::watchdogEvent();
}
const bool demoMode = true; // Use this to test your speaker and hear the sounds at 2sec intervals. Set to false for long sleep mode.
const unsigned int sleepTimes[] PROGMEM = {3, 10, 30, 60, 180}; // These are the random sleep intervals: 3min, 10min, 30min, 1hr, 3hr.
unsigned int sleepMinutes = 0;
// This is used to make the cricket do an initial extended
// sleep if you'd like. use anywhere from 0 to 65,535 minutes (45 days!)
// This is good for hiding the payload inconspicuously. ;)
byte repeat = 0; // Used at random to combine noises
void setup() {
// Do initial sleep if set
while (sleepMinutes > 0) {
int sleepTime = 60000;
Sleepy::loseSomeTime(sleepTime);
sleepMinutes--;
}
// Start timers for Volume lib:
vol.begin();
// Take random reading from empty analog pin to seed the Arduino's pseudo-RNG.
randomSeed(analogRead(A5));
}
void loop() {
chirpAndSleep(); // Run any extra code above this line
}
void chirpAndSleep() {
chirp(); // Go decide on a type of noise to make then come back
int chance = random(1, 10); // 1 in 10 chance of making two or three random noises this cycle
if (chance == 1) {
repeat = random(1, 2);
}
if (repeat > 0) { // If we're making more than one noise, don't sleep
repeat--;
}
else { // No noises left, time to sleep
if (demoMode == true) { // If we're in demo mode, don't sleep.
vol.delay(2000);
}
else { // If not, sleep tight!
int sleepTime = sleepTimes[random(0, 5)] + random(0, 6); // Get random time from sleepTimes list, and add a random 0-5 minutes.
// Nighty night
while (sleepTime > 0) { // sleep one minute at a time
Sleepy::loseSomeTime(60000);
sleepTime--;
}
}
}
}
void chirp() {
int freq = random(3700, 4000); // random frequency in this range is picked for this chirp
float volume = random(10, 100+1) / 100.00; // random volume between 10-100% is chosen for this chirp
int chirpType = random(0, 3); // randomly pick a type of noise to make
if (chirpType == 0) { // Burst chirp
int chirpCount = random(1, 3);
int count = random(1, 6);
while (chirpCount > 0) {
chirpLoud(count, freq, volume);
vol.delay(100);
chirpCount--;
}
}
if (chirpType == 1) { // Faded chirp
int chirpCount = random(1, 3);
chirpFade(chirpCount, freq, volume);
}
if (chirpType == 2) { // Creepy rustle noise
int chirpCount = random(1, 3);
int count = 3;
while (chirpCount > 0) {
chirpNoise(count, volume);
vol.delay(10);
chirpCount--;
}
}
}
void chirpLoud(byte times, int freq, float volume) {
while (times > 0) {
int v = 0;
while (v < 255) {
vol.tone(freq, v * volume);
v += 4;
}
v = 255;
while (v > 0) {
vol.tone(freq, v * volume);
v -= 4;
}
vol.delay(10);
times--;
}
vol.noTone();
}
void chirpFade(byte times, int freq, float volume) {
float fadeOut = 1.00;
while (times > 0) {
float mv = 0;
while (mv < 1.00) {
int v = 0;
while (v < 255) {
vol.tone(freq, v * volume * mv * fadeOut);
v += 4;
}
v = 255;
while (v > 0) {
vol.tone(freq, v * volume * mv * fadeOut);
v -= 4;
}
vol.delay(20);
mv += 0.2;
}
mv = 1.00;
while (mv > 0.00) {
int v = 0;
while (v < 255) {
vol.tone(freq, v * volume * mv * fadeOut);
v += 4;
}
v = 255;
while (v > 0) {
vol.tone(freq, v * volume * mv * fadeOut);
v -= 4;
}
vol.delay(20);
mv -= 0.2;
}
vol.noTone();
fadeOut -= 0.75;
times--;
}
}
void chirpNoise(byte times, float volume) {
while (times > 0) {
int v = 0;
while (v < 128) {
vol.tone(random(6000, 10000), v * volume);
v += 4;
}
v = 128;
while (v > 0) {
vol.tone(random(6000, 10000), v * volume);
v -= 4;
}
vol.delay(10);
times--;
}
vol.noTone();
}
// Special thanks to Andrew Neal for dealing with this cricket for what's hopefully months.
Which Arduino board do you use ?
I put it in Wokwi:
The audio in Wokwi is not the same as in the real world.
In the sketch at Wokwi, I wrote how I did it:
Sketch from here: https://github.com/connornishijima/arduino-volume1/blob/master/examples/volume_crickeduino_prank/volume_crickeduino_prank.ino
Buzzer at pin 5.
Library "Volume" is in the Arduino IDE Library Manager.
It is therefor also in the Wokwi Library Manager.
Source code at: GitHub - connornishijima/arduino-volume1: Arduino tone() just got 8-bit volume control - with no extra components!
Library "JeeLib" is not in the Arduino IDE Library Manager.
JeeLib: GitHub - jeelabs/jeelib: JeeLib for Arduino IDE: Ports, RF12, and RF69 drivers from JeeLabs
Only the "Ports.cpp" and "Ports.h" are used, so I took those from the JeeLib library,
and uploaded them to this Wokwi project.
Changed the sketch to include "Ports.h"
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.