Hello,
I am working through my first major project and i am running into some issues with my code. For now I am working on building a radio but i do not have all of the parts yet. So i am doing one thing at a time while learning the nuances. Right now I am using a 16x2 LCD screen, an Arduino Uno, a push button, and a DHT11. I will be adding a couple of rotary encoders (Volume and Freq), a RTC module, a class D amp module, the TEA5767, and of course a couple speakers with an antenna later on.
My end goal is to have an FM radio with one 16x2 LCD screen using one button (Not a switch) to swap the display from Freq/Date to Temp/Humidity. A nice to have would be to add in a code so the display switches again while the rotary encoder for volume is being adjusted to display current volume. But i will get to that later on.
The problem i am running into now pertains to the screen swap upon button push. I have 3 programs written right now for testing and combining purposes. ClockRadio_With_Temp_TEST is the current version of temp and humidity display that works to display current temp and current humidity to the LCD screen. Button_Push_Screen_Switch2_TEST is the current screen swapping sketch that works 100% when swapping between "Hello World" and "Goodbye World". ClockRadio_With_Temp_TEST_2 is my attempt at combining them. The program will compile without issues but the LCD will only display the startup message. Pressing the button does not display anything different anymore. One thing of note is that the serial monitor is still processing data and displaying it. I posted only the combined code below due to character limits of this post. I added all 3 as attachments with a few pictures
The only thing i can think of is that both codes use serial data and therefore it cannot keep track of both logic circuits?? Any advice would be greatly appreciated even if it is get a second display because it is not possible.
ClockRadio_With_Temp_TEST_2
// include the library code:
#include <Bounce2.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define DHT11_PIN 0 // pin A0
//Initializations
const int buttonPin = 7; // Pin 7
Bounce button; //Debounced Button
bool textDisplay; //Which text to display
//Initialize DHT11
byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i++)
{
while(!(PINC & _BV(DHT11_PIN))); // wait for 50us
delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN))
{
result |=(1<<(7-i));
}
while((PINC & _BV(DHT11_PIN))); // wait '1' finish
}
return result;
}
//Temp and Humidity Module
byte dht11_dat[5];
byte dht11_in;
byte i;
void setup()
{
// Bootup Display
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Loading...");
delay(1000);
// initialize the serial communications:
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
Serial.begin(9600);
Serial.println("Ready");
//Button
button.attach(buttonPin, INPUT);
}
void loop()
{
// start condition
// 1. pull-down i/o pin from 18ms
PORTC &= ~_BV(DHT11_PIN);
delay(18);
PORTC |= _BV(DHT11_PIN);
delayMicroseconds(40);
DDRC &= ~_BV(DHT11_PIN);
delayMicroseconds(40);
dht11_in= PINC & _BV(DHT11_PIN);
if(dht11_in)
{
Serial.println("dht11 start condition 1 not met");
return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN);
if(!dht11_in)
{
Serial.println("dht11 start condition 2 not met");
return;
}
delayMicroseconds(80);
// now ready for data reception
for (i=0; i<5; i++)
dht11_dat[i] = read_dht11_dat();
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
//Print into Serial Monitor
Serial.print("Current Humdity = ");
Serial.print(dht11_dat[0], DEC);
Serial.print(".");
Serial.print(dht11_dat[1], DEC);
Serial.print("% ");
Serial.print("Temperature = ");
Serial.print((dht11_dat[2]*1.8)+32, BIN);
Serial.println("F ");
delay(2000);
// Update the state of the debounced button.
button.update();
// Toggle display on rising edges of the button.
if (button.rose())
{
lcd.setCursor(0,1);
if (textDisplay)
{
//Show Temp and Humidity on LCD Display
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp: ");
lcd.print((dht11_dat[2]*1.8)+32, BIN);
lcd.print("F");
lcd.setCursor(2,1);
lcd.print("Humidity: ");
lcd.print(dht11_dat[0], DEC);
lcd.print("%");
textDisplay = false;
}
else
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Freq Here");
lcd.setCursor(0,1);
lcd.print("Date Here");
textDisplay = true;
}
}
}
Thank You,
Carl_Olson
ClockRadio_With_Temp_TEST.ino (2.39 KB)
Button_Push_Screen_Switch2_TEST.ino (1.26 KB)
ClockRadio_With_Temp_TEST_2.ino (3.22 KB)