Im want my lcd to have a on/off/reset switch

Im want my lcd to have a on/off/reset switch. If digitalRead(10 == HIGH) Iw ant thedisplay to clear out and if digitalRead(10 == LOW) I want the display to start again at 0

#include <LiquidCrystal.h>
int myDelayTime = 500;
//henter inn liquidcrystal library
int seconds = 0;//setter sekund telleren til 0 sekunder ved start
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//hvilke pins som blir brukt
byte ball[8] = {
  B00000,
  B00100,
  B01110,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000,
}
;

void setup(){
  pinMode(10, INPUT);
  pinMode(9, OUTPUT);
  lcd.begin(16, 2); //velger antall rader og rekker som skal brukes.
  lcd.print("break my screen!");// sender en tekst som kommer opp på displayet
  lcd.createChar(7, ball);
}

void loop()
{
  if (digitalRead(10 == HIGH)){
      lcd.clear();
    digitalWrite(9, HIGH);
  }
   if (digitalRead(10 == LOW));{
   // (note: linje 1 er 2. raden på displayet altså øverste er 0 g nederste er 1
   lcd.setCursor(6, 1); // velger at sekundene skal telles i rute 6 i linjen under 
   lcd.print(seconds);  // viser sekunder som har gått på displayet
   delay(myDelayTime);; // venter 1 sekund
   seconds += 1;//sekundene blir + 1
  for( int i=0; i<=15; i++){
    lcd.setCursor(i, 0);
    lcd.write(7);
    delay(myDelayTime);
    lcd.setCursor(0, 0);
    lcd.print("                ");
    myDelayTime -= 0.5;
   }
  }
}

Should be:

if (digitalRead(10) == LOW);{

if(digitalRead(10 == LOW)) will never be true since 10 cannot equal 0.

Your "schematic" is hard to read with lines on top of each other.

The problem is that it still doesn't work after trying that

#include <LiquidCrystal.h>
int myDelayTime = 500;
//henter inn liquidcrystal library
int seconds = 0;//setter sekund telleren til 0 sekunder ved start
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//hvilke pins som blir brukt
byte ball[8] = {
  B00000,
  B00100,
  B01110,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000,
}
;

void setup(){
  pinMode(10, INPUT);
  pinMode(9, OUTPUT);
  lcd.begin(16, 2); //velger antall rader og rekker som skal brukes.
  lcd.print("break my screen!");// sender en tekst som kommer opp på displayet
  lcd.createChar(7, ball);
}

void loop()
{
  if (digitalRead(10) == HIGH);{
      lcd.clear();
    digitalWrite(9, HIGH);
  }
   if (digitalRead(10) == LOW);{
   // (note: linje 1 er 2. raden på displayet altså øverste er 0 g nederste er 1
   lcd.setCursor(6, 1); // velger at sekundene skal telles i rute 6 i linjen under 
   lcd.print(seconds);  // viser sekunder som har gått på displayet
   delay(myDelayTime);; // venter 1 sekund
   seconds += 1;//sekundene blir + 1
  for( int i=0; i<=15; i++){
    lcd.setCursor(i, 0);
    lcd.write(7);
    delay(myDelayTime);
    lcd.setCursor(0, 0);
    lcd.print("                ");
    myDelayTime -= 0.5;
   }
  }
}

That statement conveys no useful information.

nothing happens? aka it doesn't work. if just skips the if high and go straight to low even it pinmode 10 is high

Show how the switch is wired. It is hard to tell from the Fritz picture with the overlapping wires. A proper schematic would be better. Hand drawn, photographed and posted is fine. Include all pin names/numbers, components, their part numbers and/or values and power supplies.


Pin 9 connects to nothing on the schematic.

I missed it at first. Sorry, it is late here. You must get rid of the semicolons at the ends of the if statements.

#include <LiquidCrystal.h>
int myDelayTime = 500;
//henter inn liquidcrystal library
int seconds = 0;//setter sekund telleren til 0 sekunder ved start
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//hvilke pins som blir brukt
byte ball[8] =
{
   B00000,
   B00100,
   B01110,
   B11111,
   B11111,
   B01110,
   B00100,
   B00000,
}
;

void setup()
{
   pinMode(10, INPUT);
   pinMode(9, OUTPUT);
   lcd.begin(16, 2); //velger antall rader og rekker som skal brukes.
   lcd.print("break my screen!");// sender en tekst som kommer opp på displayet
   lcd.createChar(7, ball);
}

void loop()
{
   if (digitalRead(10) == HIGH)  // ***** delete ;
   {
      lcd.clear();
      digitalWrite(9, HIGH);
   }
   if (digitalRead(10) == LOW)  // ***** delete ;
   {
      // (note: linje 1 er 2. raden på displayet altså øverste er 0 g nederste er 1
      lcd.setCursor(6, 1); // velger at sekundene skal telles i rute 6 i linjen under
      lcd.print(seconds);  // viser sekunder som har gått på displayet
      delay(myDelayTime);; // venter 1 sekund
      seconds += 1;//sekundene blir + 1
      for ( int i = 0; i <= 15; i++)
      {
         lcd.setCursor(i, 0);
         lcd.write(7);
         delay(myDelayTime);
         lcd.setCursor(0, 0);
         lcd.print("                ");
         myDelayTime -= 0.5;
      }
   }
}

The above is my favored formatting style. Each { and } on their own lines. Code blocks stand out better.

why are you talking about pin 9?

What are you doing with pin 9 there?

oopsie! ; at the end of the if (digitalRead(10) == LOW) messes things up.

See C++ If ... Else for a lesson on how to properly format an ```if````.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.