Dupa ce am modificat un pic sketch-ul anterior pentru a muta informatiile legate de frecventa radio, am urmatoarea prezentare:
Am completat sketch-ul cu partea de RTC, obtinand:
/*********************************************************************
This is an example sketch for our Monochrome Nokia 5110 LCD Displays
Pick one up today in the adafruit shop!
These displays use SPI to communicate, 4 or 5 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
// Nokia 5110 LCD (PCD8544) from https://code.google.com/p/pcd8544/
/* niq_ro ( http://nicuflorica.blogspot.ro ) case for Nokia 5110 LCD (PCD8544) - LPH 7366:
For module from China, you must connect like this:
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE) -> Arduino digital 7 (D7)
* Pin 3 (DC) -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) - Arduino digital 3 (D3)
* Pin 6 (Vcc) -> +5V thru adaptor module (see http://nicuflorica.blogspot.ro/2013/06/afisajul-folosit-la-telefoanele-nokia.html )
* Pin 7 (LIGHT) -> +5V thru 56-100 ohms resistor (for permanent lights) or... other pin control
* Pin 8 (GND) -> GND1 or GND2
*/
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
// original sketck from http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/
// add part with SQW=1Hz from http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/
// adapted sketch by niq_ro from http://nicuflorica.blogspot.ro
// version 4.0 for FM radio with TEA5767 - http://www.tehnic.go.ro
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Adafruit_PCD8544 display = Adafruit_PCD8544(SCLK, DIN, DC, CS, RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);
#include <TEA5767.h>
#include <Wire.h>
#include <Button.h>
// TEA5767 begin
TEA5767 Radio;
double old_frequency;
double frequency;
int search_mode = 0;
int search_direction;
unsigned long last_pressed;
Button btn_forward(11, PULLUP);
Button btn_backward(12, PULLUP);
// TEA5767 end
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Wire.begin();
Radio.init();
Radio.set_frequency(104.5);
Serial.begin(9600);
display.begin();
// init done
// you can change the contrast around to adapt the display
// for the best viewing!
display.setContrast(60);
display.clearDisplay();
RTC.begin();
// RTC.adjust(DateTime(__DATE__, __TIME__));
// if you need set clock... just remove // from line above this
// part code for flashing LED
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// Print a logo message to the LCD.
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(8,0);
display.println("tehnic.go.ro");
display.setCursor(20, 8);
display.print("& niq_ro");
display.setCursor(16, 24);
display.print("radio FM");
display.setCursor(5, 32);
display.print("si ceas/data");
display.setCursor(0, 40);
display.print("versiunea ");
display.setTextColor(WHITE, BLACK);
display.print("4.0");
display.display();
delay (5000);
display.clearDisplay();
}
void loop () {
DateTime now = RTC.now();
unsigned char buf[5];
int stereo;
int signal_level;
double current_freq;
unsigned long current_millis = millis();
if (Radio.read_status(buf) == 1) {
current_freq = floor (Radio.frequency_available (buf) / 100000 + .5) / 10;
stereo = Radio.stereo(buf);
signal_level = Radio.signal_level(buf);
display.setTextSize(2);
display.setTextColor(BLACK);
if (current_freq >=100)
display.setCursor(0,16);
else
display.setCursor(12,16);
display.print(display.print(current_freq));
// erase 2 number from right
for (int x = 16; x < 30; x++)
{
display.drawLine(60, x, 84, x, WHITE);
}
display.setTextSize(1);
display.setCursor(65,19);
display.print("MHz");
display.setCursor(0,35);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
if (stereo) display.print("STEREO"); else display.print("MONO");
display.display();
delay (500);
display.clearDisplay();
// draw a signal level triangle...
display.drawLine(80, 30, 80, 45, BLACK);
display.drawLine(80, 45, 50, 45, BLACK);
display.drawLine(50, 45, 80, 30, BLACK);
// draw an antenna
display.drawLine(55, 32, 55, 40, BLACK);
display.drawLine(56, 32, 56, 40, BLACK);
display.drawLine(52, 32, 55, 36, BLACK);
display.drawLine(51, 32, 55, 37, BLACK);
display.drawLine(59, 32, 56, 36, BLACK);
display.drawLine(60, 32, 56, 37, BLACK);
int sl = signal_level;
for (int x = 0; x < sl; x++)
{
display.drawLine(50+2*x, 45, 50+2*x, 45-x, BLACK);
}
}
if (search_mode == 1) {
if (Radio.process_search (buf, search_direction) == 1) {
search_mode = 0;
}
}
if (btn_forward.isPressed()) {
last_pressed = current_millis;
search_mode = 1;
search_direction = TEA5767_SEARCH_DIR_UP;
Radio.search_up(buf);
delay(300);
}
if (btn_backward.isPressed()) {
last_pressed = current_millis;
search_mode = 1;
search_direction = TEA5767_SEARCH_DIR_DOWN;
Radio.search_down(buf);
delay(300);
}
delay(100);
// need for display time
int zs = now.second()/10;
int us = now.second() - zs*10;
if (us > 2 )
{
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(0, 0);
{ if ( now.hour() < 10)
{
display.print(" ");
display.print(now.hour(), DEC);
}
else
{
display.print(now.hour(), DEC);
}
display.setCursor(20, 0);
display.print(":");
display.setCursor(28, 0);
if ( now.minute() < 10)
{
display.print("0");
display.print(now.minute(), DEC);
}
else
{
display.print(now.minute(), DEC);
}
display.setCursor(48, 0);
display.print(":");
display.setCursor(57, 0);
if ( now.second() < 10)
{
display.print("0");
display.print(now.second(), DEC);
}
else
{
display.print(now.second(), DEC);
}
}
}
else
{
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(16, 0);
if ( now.hour() < 10)
{
display.print(" ");
display.print(now.hour(), DEC);
}
else
{
// display.setCursor(16, 0);
display.print(now.hour(), DEC);
}
display.print(":");
if ( now.minute() < 10)
{
display.print("0");
display.print(now.minute(), DEC);
}
else
{
display.print(now.minute(), DEC);
}
display.print(":");
if ( now.second() < 10)
{
display.print("0");
display.print(now.second(), DEC);
}
else
{
display.print(now.second(), DEC);
}
display.setCursor(10, 8);
if ( now.day() < 10)
{
display.print("0");
display.print(now.day(), DEC);
}
else
{
display.print(now.day(), DEC);
}
display.print("/");
if ( now.month() < 10)
{
display.print("0");
display.print(now.month(), DEC);
}
else
{
display.print(now.month(), DEC);
}
display.print("/");
display.print(now.year(), DEC);
}
}
Filmuletul, care prezinta, ce am scris mai sus, se numeste FM radio with TEA5767 and Arduino (III):
Am mai facut un filmulet, numit FM radio with TEA5767 and Arduino (IV)
PS: Am conectat si senzorul DHT11 si am informatii despre temperatura si umiditate, dar pare prea "sorcova", asa ca nu am mai "bibilit" la sketch prea mult...
/*********************************************************************
This is an example sketch for our Monochrome Nokia 5110 LCD Displays
Pick one up today in the adafruit shop!
------> http://www.adafruit.com/products/338
These displays use SPI to communicate, 4 or 5 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
// Nokia 5110 LCD (PCD8544) from https://code.google.com/p/pcd8544/
/* niq_ro ( http://nicuflorica.blogspot.ro ) case for Nokia 5110 LCD (PCD8544) - LPH 7366:
For module from China, you must connect like this:
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE) -> Arduino digital 7 (D7)
* Pin 3 (DC) -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) - Arduino digital 3 (D3)
* Pin 6 (Vcc) -> +5V thru adaptor module (see http://nicuflorica.blogspot.ro/2013/06/afisajul-folosit-la-telefoanele-nokia.html )
* Pin 7 (LIGHT) -> +5V thru 56-100 ohms resistor (for permanent lights) or... other pin control
* Pin 8 (GND) -> GND1 or GND2
*/
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
// original sketck from http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/
// add part with SQW=1Hz from http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/
// adapted sketch by niq_ro from http://nicuflorica.blogspot.ro
// version 4.1 for FM radio with TEA5767 - http://www.tehnic.go.ro
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Adafruit_PCD8544 display = Adafruit_PCD8544(SCLK, DIN, DC, CS, RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);
#include <TEA5767.h>
// from https://github.com/andykarpov/TEA5767
#include <Wire.h>
#include <Button.h>
// from http://arduino-info.wikispaces.com/file/view/Button.zip/405390486/Button.zip
// TEA5767 begin
TEA5767 Radio;
double old_frequency;
double frequency;
int search_mode = 0;
int search_direction;
unsigned long last_pressed;
Button btn_forward(11, PULLUP);
Button btn_backward(12, PULLUP);
// TEA5767 end
#include <DHT.h>
#define DHTPIN A2 // what pin we're connected DHT11
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Wire.begin();
Radio.init();
Radio.set_frequency(104.5);
Serial.begin(9600);
// sensor DHT for humidity and temperature
dht.begin();
display.begin();
// init DHT done
// you can change the contrast around to adapt the display
// for the best viewing!
display.setContrast(55);
display.clearDisplay();
RTC.begin();
// RTC.adjust(DateTime(__DATE__, __TIME__));
// if you need set clock... just remove // from line above this
// part code for flashing LED
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
// Wire.write(0x00); // turns the SQW pin off
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz
// Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHz
Wire.endTransmission();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// Print a logo message to the LCD.
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(8,0);
display.println("tehnic.go.ro");
display.setCursor(20, 8);
display.print("& niq_ro");
display.setCursor(16, 24);
display.print("radio FM");
display.setCursor(5, 32);
display.print("si ceas/data");
display.setCursor(0, 40);
display.print("versiunea ");
display.setTextColor(WHITE, BLACK);
display.print("4.1");
display.display();
delay (5000);
display.clearDisplay();
}
void loop () {
DateTime now = RTC.now();
unsigned char buf[5];
int stereo;
int signal_level;
double current_freq;
unsigned long current_millis = millis();
if (Radio.read_status(buf) == 1) {
current_freq = floor (Radio.frequency_available (buf) / 100000 + .5) / 10;
stereo = Radio.stereo(buf);
signal_level = Radio.signal_level(buf);
display.setTextSize(2);
display.setTextColor(BLACK);
if (current_freq >=100)
display.setCursor(0,16);
else
display.setCursor(12,16);
display.print(display.print(current_freq));
// erase 2 number from right
for (int x = 16; x < 30; x++)
{
display.drawLine(60, x, 84, x, WHITE);
}
display.setTextSize(1);
display.setCursor(65,16);
display.print("MHz");
display.setCursor(65,24);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
if (stereo) display.print("ST"); else display.print(" ");
// read value from DHT sensor
int h = dht.readHumidity();
int t = dht.readTemperature();
display.setTextColor(BLACK);
display.setCursor(6,32);
display.setTextSize(1);
display.print(h);
display.print("%H");
display.setCursor(0,40);
display.setTextColor(WHITE, BLACK);
display.print("+");
display.print(t);
display.print("^C ");
display.display();
delay (500);
display.clearDisplay();
// draw a signal level triangle...
display.drawLine(80, 30, 80, 45, BLACK);
display.drawLine(80, 45, 50, 45, BLACK);
display.drawLine(50, 45, 80, 30, BLACK);
// draw an antenna
display.drawLine(55, 32, 55, 40, BLACK);
display.drawLine(56, 32, 56, 40, BLACK);
display.drawLine(52, 32, 55, 36, BLACK);
display.drawLine(51, 32, 55, 37, BLACK);
display.drawLine(59, 32, 56, 36, BLACK);
display.drawLine(60, 32, 56, 37, BLACK);
int sl = signal_level;
for (int x = 0; x < sl; x++)
{
display.drawLine(50+2*x, 45, 50+2*x, 45-x, BLACK);
}
}
if (search_mode == 1) {
if (Radio.process_search (buf, search_direction) == 1) {
search_mode = 0;
}
}
if (btn_forward.isPressed()) {
last_pressed = current_millis;
search_mode = 1;
search_direction = TEA5767_SEARCH_DIR_UP;
Radio.search_up(buf);
delay(300);
}
if (btn_backward.isPressed()) {
last_pressed = current_millis;
search_mode = 1;
search_direction = TEA5767_SEARCH_DIR_DOWN;
Radio.search_down(buf);
delay(300);
}
delay(100);
// need for display time
int zs = now.second()/10;
int us = now.second() - zs*10;
if (us > 2 )
{
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(0, 0);
{ if ( now.hour() < 10)
{
display.print(" ");
display.print(now.hour(), DEC);
}
else
{
display.print(now.hour(), DEC);
}
display.setCursor(20, 0);
display.print(":");
display.setCursor(28, 0);
if ( now.minute() < 10)
{
display.print("0");
display.print(now.minute(), DEC);
}
else
{
display.print(now.minute(), DEC);
}
display.setCursor(48, 0);
display.print(":");
display.setCursor(57, 0);
if ( now.second() < 10)
{
display.print("0");
display.print(now.second(), DEC);
}
else
{
display.print(now.second(), DEC);
}
}
}
else
{
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(16, 0);
if ( now.hour() < 10)
{
display.print(" ");
display.print(now.hour(), DEC);
}
else
{
// display.setCursor(16, 0);
display.print(now.hour(), DEC);
}
display.print(":");
if ( now.minute() < 10)
{
display.print("0");
display.print(now.minute(), DEC);
}
else
{
display.print(now.minute(), DEC);
}
display.print(":");
if ( now.second() < 10)
{
display.print("0");
display.print(now.second(), DEC);
}
else
{
display.print(now.second(), DEC);
}
display.setCursor(10, 8);
if ( now.day() < 10)
{
display.print("0");
display.print(now.day(), DEC);
}
else
{
display.print(now.day(), DEC);
}
display.print("/");
if ( now.month() < 10)
{
display.print("0");
display.print(now.month(), DEC);
}
else
{
display.print(now.month(), DEC);
}
display.print("/");
display.print(now.year(), DEC);
}
}
Schema de conectare devine: