Go Down

Topic: function called activated boolean write (Read 516 times) previous topic - next topic

dvdspelert

Hi there,

As i am having alot of waking up problems, I am creating an alarm. 8)

When alarm goes off the functions in ** alarm ** will be called. I then want to set alarmValue to true and use alarmSound to read alarmValue and make the noise/led burn/ complicated mechanism/ whatever. But i don't know hot to do this.

It goes wrong in lines 83-115

boolean alarmValue = false
pinmode alarmSound = pin 5 output
start
void(function te be called upon alarm)
- digitalwrite(boolean, true) (no succes)
- boolean = true (no succes)

Code: [Select]
/*
  ______         _   _____ ___  ___
|| || ||  /_\  |_     |   |_  |___|
|| || || /   \  _|    |   |__ |  \

------------- CLOCK ---------------
*/

#include <Time.h>
#include <TimeAlarms.h>
#include <LiquidCrystal.h>


// ********************************************
// ********** PIN OUT *************************
// ********************************************

int light = 6;                                                 // The pin that the led is attached to (PWM)
int alarmSound = 5;                                            // The pin that sets the alarm on (PWM)
int lightSensor = A0;   
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);                        //LiquidCrystal lcd(RS, E, D4, D5, D6, D7)


// *********************************************
// ********** VARIABLE *************************
// *********************************************

int brightness = 0;                                            // how bright the LED is
int fadeSteps = 5;                                             // how many points to fade the LED by at a time
int lightValue = 0;
boolean alarmValue = false;                                        //false = alarm uit, true = alarm aan


// *********************************************
// ********** STATUS ***************************
// *********************************************

int lightThreshold = 100;                                      // light threshold value at witch it switches, zie ook serial read
int fadeTime = 5000;                                           

/*
Also the clock must be set to a time on or after Jan1 1971 when using the Alarm methods.
Timer methods are unchanged and will function even if the clock has not been set
*/

// ----------------------------------------------
//                   SETUP
// ----------------------------------------------


void setup()  {

  Serial.begin(9600);
  pinMode(light, OUTPUT);
  pinMode(alarmSound, OUTPUT);
  pinMode(lightSensor, INPUT);
  lcd.begin(16, 2);                                            // lcd.begin(width, height); Initialize the display and set the size.
  lcd.setCursor(1,1);
  lcd.print("Tijd:");

  setTime(9,59,55,1,1,11);                                     // set time to Saturday 8:29:00am Jan 1 2011
  // create the alarms
  Alarm.alarmRepeat(9, 59, 58, MorningAlarm);                  // 8:30am every day
  Alarm.alarmRepeat(17,45,0, EveningAlarm);                    // 5:45pm every day
  Alarm.alarmRepeat(dowSaturday,8,30,30, WeeklyAlarm);         // 8:30:30 every Saturday


  Alarm.timerRepeat(15, Repeats);                               // timer for every 15 seconds   
  Alarm.timerOnce(10, OnceOnly);                                // called once after 10 seconds
}

// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
//                   LOOP
// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------



void  loop(){ 
  digitalClockDisplay();
  Alarm.delay(1000);                                           // wait one second between clock display
}

// *************** alarm ************************
                                                               // functions to be called when an alarm triggers:
void MorningAlarm(){
  Serial.println("Alarm: - MorningAlarm");
  alarmValue = true; 
}
void EveningAlarm(){
  Serial.println("Alarm: - turn lights on");       
  alarmValue = true; 
}
void WeeklyAlarm(){
  Serial.println("Alarm: - its Monday Morning");     
  alarmValue = true; 
}
void ExplicitAlarm(){
  Serial.println("Alarm: - this triggers only at the given date and time");       
  alarmValue = true; 
}
void Repeats(){
  Serial.println("15 second timer");
  alarmValue == true; 

}
void OnceOnly(){
  Serial.println("This timer only triggers once"); 
  if(alarmValue == false){
    (alarmValue == true);
}}
void AlarmOn(){
if(alarmValue = true){
    digitalWrite(alarmSound, HIGH);
  }}

// *************** display ************************

void digitalClockDisplay(){
  // digital clock display of the time
  if(hour() < 10)
  {
    lcd.setCursor(7, 1);
  }
  else
  {
    lcd.setCursor(6, 1);
  }                       //(x, y) Move the cursor to position (x, y). These are zero-based coordinates
  lcd.print(hour());
  if(minute() < 10)
  {
    lcd.setCursor(10, 1);
  }
  else
  {
    lcd.setCursor(9, 1);
  }
  lcd.print(minute());
  if(second() < 10)
  {
    lcd.setCursor(13, 1);
  }
  else
  {
    lcd.setCursor(12, 1);
  }
  lcd.print(second());

}





void test()
{
  lcd.setCursor(2,0);
  lcd.print(alarmValue);
}
Thank you!!

PaulS

Code: [Select]
  Alarm.alarmRepeat(9, 59, 58, MorningAlarm);                  // 8:30am every day

Might I suggest that you just buy an alarm clock? If you can't put meaningful comments in, at least keep the useless ones correct.

Code: [Select]
void AlarmOn(){
if(alarmValue = true){
    digitalWrite(alarmSound, HIGH);
  }}

Put each { on a new line, and ONE } per line. Then, explain why you are assigning true to alarmValue in that if statement.

Nick Gammon

Code: [Select]
if(alarmValue == false){
    (alarmValue == true);


Don't use brackets like that on the second line, they aren't necessary.

Code: [Select]
if(alarmValue = true){
    digitalWrite(alarmSound, HIGH);
  }}


PaulS is right about that. You are missing an "=" there.
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

PeterH

Are you using a real-time clock here? I can't see any evidence of it, but without one I don't see how you can hope to set or maintain an accurate time. That seems like a fairly important requirement for an alarm clock.
I only provide help via the forum - please do not contact me for private consultancy.

dvdspelert

What is the fun in buying an alarm clock? I thought this would be a good learning project for me. I indeed did not work very accurate there, but its not that important in that piece of code. As long as we understand it, right ;)

I am using a library for the time
Code: [Select]
#include <Time.h>
#include <TimeAlarms.h>


If I set the alarmfunctions like this:
Code: [Select]
void Repeats(){
  Serial.println("15 second timer");
  digitalWrite(alarmSound, HIGH);


the led goes on when the alarm triggers the function. But how do I write alarmValue (boolean) to true?

Code: [Select]

void MorningAlarm(){
  Serial.println("Alarm: - MorningAlarm");
  alarmValue == true;  // doesnt work
}
void OnceOnly(){
  Serial.println("This timer only triggers once"); 
  if(alarmValue == false){
    alarmValue == true; // doesnt work
}
}
void AlarmOn(){
if(alarmValue == true){
    digitalWrite(alarmSound, HIGH);
}
}


does the function "void Repeats(){" talk outside its own function, so to another function? (if a value is changed in void Repeats, can that value be read in void AlarmOn?)


Thank you!!

Arrch


    alarmValue == true; // doesnt work


= is assignment
== is comparison

Nick Gammon

You need this general style:

Code: [Select]

if (a == b)  // compare (two == signs)
  c = d;     // assign (one = sign)
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

PaulS

Quote
alarmValue == true; // doesnt work

It most certainly does. It simply doesn't do what you seem to think it does.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy