Go Down

Topic: LCD scherm (Read 224 times) previous topic - next topic

sanjanakanhai

Oct 17, 2020, 12:45 pm Last Edit: Oct 17, 2020, 02:19 pm by sanjanakanhai
Ik wil dat er nadat de tweede vraag is getoond er einde op het scherm staat

#include <Wire.h>
#include "rgb_lcd.h"
#include <SoftwareSerial.h>

SoftwareSerial RFID(2, 3); // RX and TX

rgb_lcd lcd;

const int colorR = 0;
const int colorG = 0;
const int colorB = 255;

const int BUTTONPIN = 6;
int buttonState = 0;

const int ROTARYPIN = A0;
int rotaryValue = 0;

int state = 0; //0: wachten rfid, 1: keuze maken 2:antwoord laten, even wachten en dan terug naar 0

void setup() {
 // set up the LCD's number of columns and rows:
 lcd.begin(16, 2);
 lcd.setRGB(colorR, colorG, colorB);

 // Print a message to the LCD.
 lcd.print("Scan de tag");
 //
 //  lcd.setCursor(0, 1);
 //  lcd.print("A. nee B. ja");

 pinMode(BUTTONPIN, INPUT);
 pinMode(ROTARYPIN, INPUT);
 Serial.begin(9600);

 RFID.begin(9600);   // start serial to RFID reader
 pinMode(5, OUTPUT); //buzzer on pin 6

}

void loop() {
 if (state == 0) {
   //rfid check
   if (RFID.available() > 0) {

     delay(100); // needed to allow time for the data to come in from the serial buffer.
     for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
     {
       RFID.read();//content is read, but not stored in this example
     }
     RFID.flush();
     beep();

     state = state + 1;
   }
   //als kaart is gescand state = state + 1

 } else if (state == 1) {
   //vraag tonen

   //keuze laten zien
   rotaryValue = analogRead(ROTARYPIN);
   //Serial.println(rotaryValue);
   if (rotaryValue < 512) {
     lcd.setCursor(0, 0);
     lcd.print("grãos de mamão?");
     lcd.setCursor(0, 1);
     lcd.print("A. NÃO B. sim");
   } else {
     lcd.setCursor(0, 0);
     lcd.print("grãos de mamão?");
     lcd.setCursor(0, 1);
     lcd.print("A. não B. SIM");
   }

   //keuze vastleggen
   buttonState = digitalRead(BUTTONPIN);
   if (buttonState == 1) {
     if (rotaryValue < 512) {
       //antwoord a gekozen
       Serial.println("antwoord a gekozen");
       state = state + 1;
     } else {
       //antwoord b gekozen
       Serial.println("antwoord b gekozen");
       state = state + 1;
     }
     delay(250);
   }
 } else if (state == 2) {
   //antwoord laten zien
   lcd.setCursor(0, 0);
   lcd.print("Juiste antwoord:");
   lcd.setCursor(0, 1);
   lcd.print("A. NÃO B. sim");
   delay(7000);
   state = state + 1 ;
 } else if (state == 3) {
   lcd.setCursor(0, 0);
   lcd.print("Scan de tag     ");
   lcd.setCursor(0, 1);
   lcd.print("                ");
   if (RFID.available() > 0) {

     delay(100); // needed to allow time for the data to come in from the serial buffer.
     for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
     {
       RFID.read();//content is read, but not stored in this example
     }
     RFID.flush();
     beep();

     state = state + 1;
   }
 } else if (state == 4) {
   //keuze laten zien
   rotaryValue = analogRead(ROTARYPIN);
   //Serial.println(rotaryValue);
   if (rotaryValue < 512) {
     lcd.setCursor(0, 0);
     lcd.print("mandioca crua?  ");
     lcd.setCursor(0, 1);
     lcd.print("A.CRU B.cozinhou");
   } else {
     lcd.setCursor(0, 0);
     lcd.print("mandioca crua?  ");
     lcd.setCursor(0, 1);
     lcd.print("A.cru B.COZINHOU");
   }

   //keuze vastleggen
   buttonState = digitalRead(BUTTONPIN);
   if (buttonState == 1) {
     if (rotaryValue < 512) {
       //antwoord a gekozen
       Serial.println("antwoord a gekozen");
       state = state + 1;
     } else {
       //antwoord b gekozen
       Serial.println("antwoord b gekozen");
       state = state + 1;
     }
     delay(250);
   }

 } else if (state == 5) {
   //antwoord laten zien
   lcd.setCursor(0, 0);
   lcd.print("Juiste antwoord:");
   lcd.setCursor(0, 1);
   lcd.print("A.cru B.COZINHOU");
   delay(7000);
   state = 3 ;
 }


}//loop

void beep() {
 analogWrite(5, 200);
 delay(200);
 analogWrite(5, 0);
}

sanjanakanhai

#1
Oct 17, 2020, 02:17 pm Last Edit: Oct 17, 2020, 02:19 pm by sanjanakanhai
Code: [Select]


#include <Wire.h>
#include "rgb_lcd.h"
#include <SoftwareSerial.h>

SoftwareSerial RFID(2, 3); // RX and TX

rgb_lcd lcd;

const int colorR = 0;
const int colorG = 0;
const int colorB = 255;

const int BUTTONPIN = 6;
int buttonState = 0;

const int ROTARYPIN = A0;
int rotaryValue = 0;

int state = 0; //0: wachten rfid, 1: keuze maken 2:antwoord laten, even wachten en dan terug naar 0

void setup() {
 // set up the LCD's number of columns and rows:
 lcd.begin(16, 2);
 lcd.setRGB(colorR, colorG, colorB);

 // Print a message to the LCD.
 lcd.print("Scan de tag");
 //
 //  lcd.setCursor(0, 1);
 //  lcd.print("A. nee B. ja");

 pinMode(BUTTONPIN, INPUT);
 pinMode(ROTARYPIN, INPUT);
 Serial.begin(9600);

 RFID.begin(9600);   // start serial to RFID reader
 pinMode(5, OUTPUT); //buzzer on pin 6

}

void loop() {
 if (state == 0) {
   //rfid check
   if (RFID.available() > 0) {

     delay(100); // needed to allow time for the data to come in from the serial buffer.
     for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
     {
       RFID.read();//content is read, but not stored in this example
     }
     RFID.flush();
     beep();

     state = state + 1;
   }
   //als kaart is gescand state = state + 1

 } else if (state == 1) {
   //vraag tonen

   //keuze laten zien
   rotaryValue = analogRead(ROTARYPIN);
   //Serial.println(rotaryValue);
   if (rotaryValue < 512) {
     lcd.setCursor(0, 0);
     lcd.print("grãos de mamão?");
     lcd.setCursor(0, 1);
     lcd.print("A. NÃO B. sim");
   } else {
     lcd.setCursor(0, 0);
     lcd.print("grãos de mamão?");
     lcd.setCursor(0, 1);
     lcd.print("A. não B. SIM");
   }

   //keuze vastleggen
   buttonState = digitalRead(BUTTONPIN);
   if (buttonState == 1) {
     if (rotaryValue < 512) {
       //antwoord a gekozen
       Serial.println("antwoord a gekozen");
       state = state + 1;
     } else {
       //antwoord b gekozen
       Serial.println("antwoord b gekozen");
       state = state + 1;
     }
     delay(250);
   }
 } else if (state == 2) {
   //antwoord laten zien
   lcd.setCursor(0, 0);
   lcd.print("Juiste antwoord:");
   lcd.setCursor(0, 1);
   lcd.print("A. NÃO B. sim");
   delay(7000);
   state = state + 1 ;
 } else if (state == 3) {
   lcd.setCursor(0, 0);
   lcd.print("Scan de tag     ");
   lcd.setCursor(0, 1);
   lcd.print("                ");
   if (RFID.available() > 0) {

     delay(100); // needed to allow time for the data to come in from the serial buffer.
     for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
     {
       RFID.read();//content is read, but not stored in this example
     }
     RFID.flush();
     beep();

     state = state + 1;
   }
 } else if (state == 4) {
   //keuze laten zien
   rotaryValue = analogRead(ROTARYPIN);
   //Serial.println(rotaryValue);
   if (rotaryValue < 512) {
     lcd.setCursor(0, 0);
     lcd.print("mandioca crua?  ");
     lcd.setCursor(0, 1);
     lcd.print("A.CRU B.cozinhou");
   } else {
     lcd.setCursor(0, 0);
     lcd.print("mandioca crua?  ");
     lcd.setCursor(0, 1);
     lcd.print("A.cru B.COZINHOU");
   }

   //keuze vastleggen
   buttonState = digitalRead(BUTTONPIN);
   if (buttonState == 1) {
     if (rotaryValue < 512) {
       //antwoord a gekozen
       Serial.println("antwoord a gekozen");
       state = state + 1;
     } else {
       //antwoord b gekozen
       Serial.println("antwoord b gekozen");
       state = state + 1;
     }
     delay(250);
   }

 } else if (state == 5) {
   //antwoord laten zien
   lcd.setCursor(0, 0);
   lcd.print("Juiste antwoord:");
   lcd.setCursor(0, 1);
   lcd.print("A.cru B.COZINHOU");
   delay(7000);
   state = 3 ;
 }


}//loop

void beep() {
 analogWrite(5, 200);
 delay(200);
 analogWrite(5, 0);
}

sterretje

Voeg een extra state toe waarin je "einde" op het scherm zet?
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

sanjanakanhai

Ja heb ik geprobeerd, maar ik snap niet in welke state hij dan zit

MAS3

Ik heb even gekeken, en in de snelligheid 5 states gezien.
Na de 5e state zet je state terug op 3 en ga je een nieuwe tag lezen.
Wanneer je dat niet wil, maak je na 5 niet 3 maar 6.
In state 6 kun je je einde / fim bericht laten zien.
Je moet er even over nadenken of je daarna alsnog naar state 3 wil zodat de volgende kandidaat aan de slag kan.

Overigens zou ik niet if en else if gebruiken, maar switch...case (klik !).

Maar dat heeft verder niet zoveel met jouw vraag te maken.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

sanjanakanhai

Ik heb het geprobeerd, maar dan staat er op het startscherm Scan de tag en Einde. Ook laat hij dan niet meer de antwoorden zien. Zou  je mij ander de aangepaste code kunnen sturen?

sterretje

Laat je poging zioen en iemand kan misschien aanduiden waar het fout gaat.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

sanjanakanhai

Code: [Select]
#include <Wire.h>
#include "rgb_lcd.h"
#include <SoftwareSerial.h>

SoftwareSerial RFID(2, 3); // RX and TX

rgb_lcd lcd;

const int colorR = 0;
const int colorG = 0;
const int colorB = 255;

const int BUTTONPIN = 6;
int buttonState = 0;

const int ROTARYPIN = A0;
int rotaryValue = 0;

int state = 0; //0: wachten rfid, 1: keuze maken 2:antwoord laten, even wachten en dan terug naar 0

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);

  // Print a message to the LCD.
  lcd.print("Scan de tag");
  //
  //  lcd.setCursor(0, 1);
  //  lcd.print("A. nee B. ja");

  pinMode(BUTTONPIN, INPUT);
  pinMode(ROTARYPIN, INPUT);
  Serial.begin(9600);

  RFID.begin(9600);   // start serial to RFID reader
  pinMode(5, OUTPUT); //buzzer on pin 6

}

void loop() {
  if (state == 0) {
    //rfid check
    if (RFID.available() > 0) {

      delay(100); // needed to allow time for the data to come in from the serial buffer.
      for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
      {
        RFID.read();//content is read, but not stored in this example
      }
      RFID.flush();
      beep();

      state = state + 1;
    }
    //als kaart is gescand state = state + 1

  } else if (state == 1) {
    //vraag tonen

    //keuze laten zien
    rotaryValue = analogRead(ROTARYPIN);
    //Serial.println(rotaryValue);
    if (rotaryValue < 512) {
      lcd.setCursor(0, 0);
      lcd.print("grãos de mamão?");
      lcd.setCursor(0, 1);
      lcd.print("A. NÃO B. sim");
    } else {
      lcd.setCursor(0, 0);
      lcd.print("grãos de mamão?");
      lcd.setCursor(0, 1);
      lcd.print("A. não B. SIM");
    }

    //keuze vastleggen
    buttonState = digitalRead(BUTTONPIN);
    if (buttonState == 1) {
      if (rotaryValue < 512) {
        //antwoord a gekozen
        Serial.println("antwoord a gekozen");
        state = state + 1;
      } else {
        //antwoord b gekozen
        Serial.println("antwoord b gekozen");
        state = state + 1;
      }
      delay(250);
    }
  } else if (state == 2) {
    //antwoord laten zien
    lcd.setCursor(0, 0);
    lcd.print("Juiste antwoord:");
    lcd.setCursor(0, 1);
    lcd.print("A. NÃO B. sim");
    delay(7000);
    state = state + 1 ;
  } else if (state == 3) {
    lcd.setCursor(0, 0);
    lcd.print("Scan de tag     ");
    lcd.setCursor(0, 1);
    lcd.print("                ");
    if (RFID.available() > 0) {

      delay(100); // needed to allow time for the data to come in from the serial buffer.
      for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
      {
        RFID.read();//content is read, but not stored in this example
      }
      RFID.flush();
      beep();

      state = state + 1;
    }
  } else if (state == 4) {
    //keuze laten zien
    rotaryValue = analogRead(ROTARYPIN);
    //Serial.println(rotaryValue);
    if (rotaryValue < 512) {
      lcd.setCursor(0, 0);
      lcd.print("mandioca crua?  ");
      lcd.setCursor(0, 1);
      lcd.print("A.CRU B.cozinhou");
    } else {
      lcd.setCursor(0, 0);
      lcd.print("mandioca crua?  ");
      lcd.setCursor(0, 1);
      lcd.print("A.cru B.COZINHOU");
    }

    //keuze vastleggen
    buttonState = digitalRead(BUTTONPIN);
    if (buttonState == 1) {
      if (rotaryValue < 512) {
        //antwoord a gekozen
        Serial.println("antwoord a gekozen");
        state = state + 1;
      } else {
        //antwoord b gekozen
        Serial.println("antwoord b gekozen");
        state = state + 1;
      }
      delay(250);
    }

  } else if (state == 5) {
    //antwoord laten zien
    lcd.setCursor(0, 0);
    lcd.print("Juiste antwoord:");
    lcd.setCursor(0, 1);
    lcd.print("A.cru B.COZINHOU");
    delay(7000);
   state = 6 ;
  }


  if (state == 6) {
    lcd.setCursor(0, 0);
    lcd.print("Einde           ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("Einde           ");

  }

}//loop

void beep() {
  analogWrite(5, 200);
  delay(200);
  analogWrite(5, 0);
}

sterretje

#8
Oct 18, 2020, 02:12 pm Last Edit: Oct 18, 2020, 02:13 pm by sterretje
Quote
Code: [Select]
  if (state == 6) {
    lcd.setCursor(0, 0);
    lcd.print("Einde           ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("Einde           ");
  }

Ongeacht de staat print je nu einde, of op de eerste regel of op de tweede regel.  Je wilt dat, als ik je goed begrijp, echter alleen zien als de state gelijk is aan 6. Dus je kunt het else gedeelte weggooien (dat zet het nemelijk op de tweede regel).

Code: [Select]
  if (state == 6) {
    lcd.setCursor(0, 0);
    lcd.print("Einde           ");
  }


In je vorige versies van het programma ging je ook terug naar state 3. Als dat nog steeds nodig is, kun je het uitbreiden
Code: [Select]
  if (state == 6) {
    lcd.setCursor(0, 0);
    lcd.print("Einde           ");
    delay(3000);
    state = 3;
  }

Je zult waarschijnlijk ook de tweede regel willen wissen; misschien eerst het scherm wissen met lcd.clear() in het begin van state 6.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

sanjanakanhai

Het werkt! Dank je wel. Weet iemand nog wat leuks wat ik met de LCD kan doen?

MAS3

#10
Oct 18, 2020, 03:28 pm Last Edit: Oct 18, 2020, 03:30 pm by MAS3
Wanneer je lcd.clear doet, hoef je daarna niet meer de cursor op 0,0 te zetten, want die staat daar dan al.


Och, er zijn zoveel mogelijkheden.

Maar voor jouw sketch:
Je gebruikt een RGB LCD.
Volgens mij betekent dat dat je de backlight van je schermpje van een willekeurige kleur kunt voorzien.
Nu maak je ook ergens een keer een piepje van een vijfde seconde zie ik.
Maar je kunt ook bijvoorbeeld je scherm rood laten oplichten als het antwoord fout is, en groen als het juist is.
En een andere kleur als er nog niets te zeggen is, zoals wit (-achtig).
Daarbij ga ik er wel van uit dat je inderdaad zo'n schermpje gebruikt, en dat het ook dusdanig is aangesloten dat je de kleur kunt veranderen.


Zelf heb ik ooit (toen ik net begonnen was met Arduino) een LCD keyboard shield gekocht.
Daar heb ik een sketchje voor gemaakt dat ik met de toetsen die daar op zitten door alle tekens die het ding kan afbeelden kon bladeren, en dat er dan bij stond welk tekennummer het was.
Later heb ik dat uitgebreid met een menu'tje waarmee ik uiteindelijk de teksten in verschillende talen kon afbeelden, de achtergrond helderheid kon instellen en daarna de achtergrond kon laten knipperen wanneer er een toetsdruk geregistreerd werd (dat kon apart worden aan en uitgezet in het menu).
Wat ik daarvoor terug kreeg was allemaal niet erg zinvol.
Maar ik heb er enorm veel van geleerd en das de werkelijke winst.
Want alles wat ik in de uiteindelijke sketch heb gemaakt, heb ik zelf uitgedokterd en ik heb niet van alles bij elkaar geraapt aan sketches en die in mijn eigen sketch gecombineerd.
Voor mij is dat een erg goede manier om te leren.


Een LCD is ook een heel goede debug hulp.
Je kunt daarop van alles zichtbaar maken zodat je kunt volgen wat er allemaal gebeurt in je sketch.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

sanjanakanhai

Het is inderdaad een leuk idee om het scherm rood te laten worden als het antwoord fout is en groen als het goed is. Hoe moet ik dit coderen? Zou ik daar ook een geluidje bij kunnen doen?

sterretje

Quote
Het is inderdaad een leuk idee om het scherm rood te laten worden als het antwoord fout is en groen als het goed is. Hoe moet ik dit coderen?
Misschien eens kijken naar de voorbeelden die bij de bibliotheek horen?

If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

sanjanakanhai

Ik heb even gekeken, maar er staat alleen om de kleur eenmalig te veranderen.

sterretje

#14
Oct 18, 2020, 05:45 pm Last Edit: Oct 18, 2020, 05:46 pm by sterretje
OK, waar heb je de bibliotheek vandaan gehaald?

Of laat die code even zien.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Go Up