Hello,
My project is about a money counter, every day has a different led starting from Sunday until Saturday. Every time we press on the button a different led lights up according to the day and the number of presses, I have to problems the first one is that the project starts from the led number two but not the first one and the second problem is that I should keep pressing on the button so that the lights change although I should change it to only press it and let go then another light turns on but I don't know how to do that.
Thank you for your help, the project is in the attachment.
void setup() {
// nora +joelle//
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(6, OUTPUT); //LEDS//
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
int x = 0, i = 6, i1, i2, i3, i4, i5;
int y = 1; //1=5v//
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i5 = 0; i5 < 8; i5++) { //checks al inputs//
delay(700);
if ( y != digitalRead(2) && (x != 8)) {
x++;
delay(1000);
for (i2 = 6; i2 < (i + x); i2++) {
digitalWrite(i2, HIGH);
}
digitalWrite(i + x, LOW);
Serial.print(x);
Serial.println();
}
Serial.print("0");
delay(1000);
}
if (x == 8) { // end of counting//
for (i1 = 0; i1 < 8; i1++) {
digitalWrite(i1 + i, LOW);
delay(80);
}
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i3 = 8; i3 > 0; i3--) {
digitalWrite(i3 + i, LOW);
delay(80);
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i1 = 0; i1 < 8; i1++) {
digitalWrite(i1 + i, LOW);
delay(80);
}
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i3 = 8; i3 > 0; i3--) {
digitalWrite(i3 + i, LOW);
delay(80);
}
}
}
}
the first one is that the project starts from the led number two but not the first one
That sounds like you are using an array and starting to read it from index 1 instead of index 0 and quite probably straying outside the array boundary at the top end.
the second problem is that I should keep pressing on the button so that the lights change although I should change it to only press it and let go then another light turns on but I don't know how to do that.
Look at the StateChangeDetection example in the IDE to see how to act when a button becomes pressed rather than when it is pressed.
I haven't changed a thing because I don't know what to change in order to get the program right. I want it to start working from the first led that means that when I press the button the leds start lightning up from the second one. Also I have to keep pressing on the button in order to it change the lights, to be exact to change a led so I want it to work when I only press on the button and remove my finger of it.
The code
[code]
void setup() {
// nora +joelle//
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(6, OUTPUT); //LEDS//
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
int x = 0, i = 6, i1, i2, i3, i4, i5;
int y = 1; //1=5v//
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i5 = 0; i5 < 8; i5++) { //checks al inputs//
delay(700);
if ( y != digitalRead(2) && (x != 8)) {
x++;
delay(1000);
for (i2 = 6; i2 < (i + x); i2++) {
digitalWrite(i2, HIGH);
}
digitalWrite(i + x, LOW);
Serial.print(x);
Serial.println();
}
Serial.print("0");
delay(1000);
}
if (x == 8) { // end of counting//
for (i1 = 0; i1 < 8; i1++) {
digitalWrite(i1 + i, LOW);
delay(80);
}
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i3 = 8; i3 > 0; i3--) {
digitalWrite(i3 + i, LOW);
delay(80);
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i1 = 0; i1 < 8; i1++) {
digitalWrite(i1 + i, LOW);
delay(80);
}
for (i4 = 6; i4 < 14; i4++) {
digitalWrite(i4, HIGH);
}
for (i3 = 8; i3 > 0; i3--) {
digitalWrite(i3 + i, LOW);
delay(80);
}
}
}
}
want it to work when I only press on the button and remove my finger of it.
I use Mr. Gammon's switch monitor library.
It handles things like this.
Take what you need from this sketch:
/*SwitchManager skeleton
LarryD
This sketch is to introduce new people to the SwitchManager library written by Nick Gammon
The library handles switch de-bouncing and provides timing and state change information in your sketch.
The SwitchManager.h file should be placed in your libraries folder, i.e.
C:\Users\YourName\Documents\Arduino\libraries\SwitchManager\SwitchManager.h
You can download the library at:
http://gammon.com.au/Arduino/SwitchManager.zip Thank you Nick!
In this example we have 2 normally open (N.O.) switches connected to the Arduino - increment and decrement.
The increment switch will also be used as a "Reset" switch if pressed for more than two seconds.
The two switches are connected between GND (0 volts) and an Arduino input pin.
The library enables pull-up resistors for your switch inputs.
Pushing a switch makes its pin LOW. Releasing a switch makes its pin HIGH.
The SwitchManager library provides 10ms de-bounce for switches.
i.e. enum { debounceTime = 10, noSwitch = -1 };
If you need more time, edit the SwitchManager.h file
i.e. enum { debounceTime = 50, noSwitch = -1 }; //here it is changed to 50ms
*/
#include <SwitchManager.h>
//object instantiations
SwitchManager myIncSwitch;
SwitchManager myDecSwitch;
unsigned long currentMillis;
unsigned long heartBeatMillis;
unsigned long heartFlashRate = 500UL; // time the led will change state
unsigned long incShortPress = 500UL; // 1/2 second
unsigned long incLongPress = 2000UL;// 2 seconds
unsigned long decShortPress = 500UL; // 1/2 second
const byte heartBeatLED = 13;
const byte incSwitch = 4; //increment switch is on Arduino pin 4
const byte decSwitch = 5; //decrement switch is on Arduino pin 5
int myCounter;
//======================================================================
void setup()
{
Serial.begin(9600);
//gives a visual indication if the sketch is blocking
pinMode(heartBeatLED, OUTPUT);
myIncSwitch.begin (incSwitch, handleSwitchPresses);
myDecSwitch.begin (decSwitch, handleSwitchPresses);
//the handleSwitchPresses() function is called when a switch changes state
} // E N D O F s e t u p ( )
//======================================================================
void loop()
{
//leave this line of code at the top of loop()
currentMillis = millis();
//***************************
//some code to see if the sketch is blocking
if (CheckTime(heartBeatMillis, heartFlashRate, true))
{
//toggle the heartBeatLED
digitalWrite(heartBeatLED,!digitalRead(heartBeatLED));
}
//***************************
//check to see what's happening with the switches
//"Do not use delay()s" in your sketch as it will make switch changes unresponsive
//Use BlinkWithoutDelay (BWD) techniques instead.
myIncSwitch.check ();
myDecSwitch.check ();
//***************************
//put other non-blocking stuff here
} // E N D O F l o o p ( )
//======================================================================
// F U N C T I O N S
//======================================================================
// C h e c k T i m e ( )
//**********************************************************************
//Delay time expired function
//parameters:
//lastMillis = time we started
//wait = delay in ms
//restart = do we start again
boolean CheckTime(unsigned long & lastMillis, unsigned long wait, boolean restart)
{
//has time expired for this task?
if (currentMillis - lastMillis >= wait)
{
//should this start again?
if(restart)
{
//yes, get ready for the next iteration
lastMillis += wait;
}
return true;
}
return false;
} // E N D o f C h e c k T i m e ( )
// h a n d l e S w i t c h P r e s s e s( )
//**********************************************************************
void handleSwitchPresses(const byte newState, const unsigned long interval, const byte whichPin)
{
// You get here "ONLY" if there has been a change in a switches state.
//When a switch has changed state, SwitchManager passes this function 3 arguments:
//"newState" this will be HIGH or LOW. This is the state the switch is in now.
//"interval" the number of milliseconds the switch stayed in the previous state
//"whichPin" is the switch pin that we are examining
switch (whichPin)
{
//***************************
//are we dealing with this switch?
case incSwitch:
//has this switch gone from LOW to HIGH (gone from pressed to not pressed)
//this happens with normally open switches wired as mentioned at the top of this sketch
if (newState == HIGH)
{
//The incSwitch was just released
//was this a short press followed by a switch release
if(interval <= incShortPress)
{
Serial.print("My counter value is = ");
myCounter++;
if(myCounter > 1000)
{
//limit the counter to a maximum of 1000
myCounter = 1000;
}
Serial.println(myCounter);
}
//was this a long press followed by a switch release
else if(interval >= incLongPress)
//we could also have an upper limit
//if incLongMillis was 2000UL; we could then have a window between 2-3 seconds
//else if(interval >= incLongMillis && interval <= incLongMillis + 1000UL)
{
//this could be used to change states in a StateMachine
//in this example however, we will just reset myCounter
myCounter = 0;
Serial.print("My counter value is = ");
Serial.println(myCounter);
}
}
//if the switch is a normally closed (N.C.) and opens on a press this section would be used
//the switch must have gone from HIGH to LOW
else
{
Serial.println("The incSwitch was just pushed");
}
break; //End of case incSwitch
//***************************
//are we dealing with this switch?
case decSwitch:
//has this switch gone from LOW to HIGH (gone from pressed to not pressed)
//this happens with normally open switches wired as mentioned at the top of this sketch
if (newState == HIGH)
{
//The decSwitch was just released
//was this a short press followed by a switch release
if(interval <= decShortPress)
{
Serial.print("My counter value is = ");
myCounter--;
if(myCounter < 0)
{
//don't go below zero
myCounter = 0;
}
Serial.println(myCounter);
}
}
//if the switch is a normally closed (N.C.) and opens on a press this section would be used
//the switch must have gone from HIGH to LOW
else
{
Serial.println("The decSwitch switch was just pushed");
}
break; //End of case decSwitch
//***************************
//Put default stuff here
//default:
//break; //END of default
} //End switch (whichPin)
} // E n d o f h a n d l e S w i t c h P r e s s e s ( )
//======================================================================
// E N D O F C O D E
//======================================================================