Les 4 (LCD scherm)

Alleen lezen

Moderator: pe1br

Post Reply
pe1br
Posts: 66
Joined: Thu Apr 14, 2016 3:37 am

Les 4 (LCD scherm)

Post by pe1br »

Les4-1:


Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:

Start het Arduino programma en sluit de USB kabel aan.

Vanaf nu gaan we de code niet meer overtypen:
selecteer onderstaande code en kopieer deze naar de arduino software:

Code: Select all

#include <LiquidCrystal.h>           //laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //stel de pinnen in die we gebruiken voor het scherm

void setup() {
  lcd.begin(16, 2);              //vertel de arduino welk type scherm we gebruiken
  lcd.setCursor(0, 0);           //set de cursor op de eerste letter van de eerste regel 
  lcd.print("Arduino workshop"); //print text
  lcd.setCursor(0, 1);           //set de cursor op de eerste letter van de 2de regel
  lcd.print("Marco PE1BR");      //print text
}

void loop() {
}
Klik op de upload button.

Verander mijn naam en call in je eigen naam en call en upload de software opnieuw.

Les4-2:
We gebruiken hetzelfde ontwerp om een aantal opties uit te leggen.

Code: Select all

#include <LiquidCrystal.h>           //laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //stel de pinnen in die we gebruiken voor het scherm

void lcdprint(String line1, String line2) {
  lcd.setCursor(0, 0);           //set de cursor op de eerste letter van de eerste regel
  lcd.print("                "); //maak de regel leeg
  lcd.setCursor(0, 0);           //set de cursor op de eerste letter van de eerste regel
  lcd.print(line1);              //print text
  lcd.setCursor(0, 1);           //set de cursor op de eerste letter van de 2de regel
  lcd.print("                "); //maak de regel leeg
  lcd.setCursor(0, 1);           //set de cursor op de eerste letter van de 2de regel
  lcd.print(line2);              //print text
}

void setup() {
  Serial.setTimeout(10);
  Serial.begin(9600);
  lcd.begin(16, 2);                              //vertel de arduino welk type scherm we gebruiken
  lcdprint("Arduino workshop", "Marco PE1BR");   //print text
  delay(5000);                                   //wacht 5 seconden
  lcdprint("hergebruik van", "dezelfde functie");//print text
  delay(5000);                                   //wacht 5 seconden
  lcdprint("type text:", "");                    //print text
}

void loop() {
  if (Serial.available() > 0) {           //kijk of er serial data binnen komt
    String incoming_serial;               //maak een container waar we de serial data in opslaan
    incoming_serial=Serial.readString();  //stop de serial data in de container
    lcdprint("type text:", incoming_serial); //print de text uit de container
  }
}
In dit voorbeeld heb ik de aansturing van het scherm verwerkt in een functie, ook gebruiken we hier de serial monitor functie uit les 3 om text op het lcd te schrijven.

Voordelen:
  • je hoeft de code maar 1 keer in te typen.
  • code beter leesbaar.
  • code makkelijker aan te passen (alles op 1 plek in plaats van door het hele programma).
  • gebruikt minder flash geheugen van de arduino dus er is meer ruimte voor andere code).
les4-3:
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).
voeg 2 drukknoppen toe aan het schema:

Start het Arduino programma en sluit de USB kabel aan.

Code: Select all

#include <LiquidCrystal.h>           //laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //aansluit pinnen voor het lcd scherm

int button1 = A4;                                                 //aansluitpin eerste button
int button2 = A5;                                                 //aansluitpin 2de button
int button = 0;                                                   //waarde van de button (dit kan 0, 1 of 2 zijn)
int buttoncounter = 0;                                            //counter voor de buttons
int menuoption = 0;                                               //waarde voor het menu
long frequencyvalue = 144000;                                     //waarde van de frequentie
int powervalue = 10;                                               //waarde van het vermogen
int micgainvalue = 10;                                             //waarde van de micgain
int ctcssvalue = 0;                                               //teller voor de ctcss waardes
float ctcssvaluearray[] = {71.9, 77.0, 82.5, 88.5};               //ctcss waardes 
int shiftvalue = 0;                                               //teller voor de repeater shift
float shiftvaluearray[] = {0, 600, 1600, 7600, -600, -1600,7600}; //repeatershift waarde
 
void readbuttons() {                   //functie om de buttons uit te lezen
  if (digitalRead (button1) == LOW) {  //als button 1 laag is voer de volgende commando's uit
    buttoncounter ++;                  //tel 1 bij de buttoncounter op 
    if (buttoncounter == 2) button = 1;//als de buttoncounter 2 is zet de waarde button op 1
    else button = 0;                   //anders zet de waarde button op 0
  }
  if (digitalRead (button2) == LOW) {  //als button 2 laag is voer de volgende commando's uit
    buttoncounter ++;                  //tel 1 bij de buttoncounter op
    if (buttoncounter == 2) button = 2;//als de buttoncounter 2 is zet de waarde button op 2
    else button = 0;                   //anders zet de waarde button op 0
  }
  if (digitalRead (button1) == HIGH && digitalRead (button2) == HIGH) buttoncounter = 0; //als beide buttons hoog zijn zet de waarde van de buttoncounter op 0
}

void clearlcd() {
  lcd.setCursor(0, 0);           //set de cursor op de eerste letter van de eerste regel
  lcd.print("                "); //maak de regel leeg
  lcd.setCursor(0, 1);           //set de cursor op de eerste letter van de 2de regel
  lcd.print("                "); //maak de regel leeg
}  

void lcdprint(String line1, float line2, String line3) {
  lcd.setCursor(0, 0);           //set de cursor op de eerste letter van de eerste regel
  lcd.print(line1);              //print text 1
  lcd.setCursor(0, 1);           //set de cursor op de eerste letter van de 2de regel
  lcd.print(line2);              //print text 2
  lcd.print(line3);              //print text 3
}

void menu() {
  if (button == 1) {                   //als de waarde button 1 is voer de volgende commando's uit
    menuoption ++;                     //tel 1 bij de menuoption op 
    clearlcd();                        //maak het lcd scherm, leeg
  }
  if (menuoption == 0) frequency();    //als de waarde menuoption 0 is run functie frequency
  if (menuoption == 1) ctcsstone();    //als de waarde menuoption 1 is run functie ctcsstone
  if (menuoption == 2) power();        //als de waarde menuoption 2 is run functie power
  if (menuoption == 3) micgain();      //als de waarde menuoption 3 is run functie micgain
  if (menuoption == 4) repeatershift();//als de waarde menuoption 4 is run functie repeatershift  
  if (menuoption == 5) menuoption = 0; //als de waarde menuoption 5 zet de waarde menuoption terug naar 0
}

void frequency() {                                            //functie frequency
  lcdprint("Frequency", frequencyvalue, " KHz");              //lcd print 3 posities op het scherm (naam, waarde, eenheid) 
  if (button == 2) frequencyvalue = frequencyvalue + 25;      //als button 2 ingedrukt word tel 25 bij de frequency op
  if (frequencyvalue == 146000) frequencyvalue = 144000;      //als de waarde to hoog wordt ga terug naar de beginwaarde
}

void ctcsstone() {                                            //functie ctcsstone
  lcdprint("CTCSS tone", ctcssvaluearray[ctcssvalue], " Hz"); //lcd print 3 posities op het scherm (naam, waarde, eenheid) 
  if (button == 2) ctcssvalue ++;                             //als button 2 ingedrukt word tel 1 bij de ctcssvalue op
  if (ctcssvalue == 4) ctcssvalue = 0;                        //als de waarde to hoog wordt ga terug naar de beginwaarde
}

void power() {                                                //functie power
  lcdprint("Power", powervalue, " Watt");                     //lcd print 3 posities op het scherm (naam, waarde, eenheid) 
  if (button == 2) powervalue ++;                             //als button 2 ingedrukt word tel 1 bij de powervalue op
  if (powervalue == 11) {                                     //als de waarde to hoog is voer de volgende commando's uit                       
    powervalue = 1;                                           //ga terug naar de begin waarde
    clearlcd();                                               //wis het lcd scherm
  }
}

void micgain() {                                              //functie micgain                               
  lcdprint("Mic gain", micgainvalue, " dB");                   //lcd print 3 posities op het scherm (naam, waarde, eenheid) 
  if (button == 2) micgainvalue = micgainvalue + 1;           //als button 2 ingedrukt word tel 1 bij de migainvalue op
  if (micgainvalue == 11) {                                   //als de waarde to hoog is voer de volgende commando's uit
    micgainvalue = 0;                                         //ga terug naar de begin waarde
    clearlcd();                                               //wis het lcd scherm
  }
}

void repeatershift() {                                            //functie micgain
  lcdprint("repeater shift", shiftvaluearray[shiftvalue], " KHz"); //lcd print 3 posities op het scherm (naam, waarde, eenheid)
  if (button == 2) shiftvalue ++;                                 //als button 2 ingedrukt word tel 1 bij de migainvalue op
  if (shiftvalue == 6) {                                          //als de waarde to hoog is voer de volgende commando's uit
    shiftvalue = 0;                                               //ga terug naar de begin waarde
    clearlcd();                                                   //wis het lcd scherm
  }
}

void setup() {                     //deze functie wordt 1 keer uitgevoerd bij het opstarten
  lcd.begin(16, 2);                //vertel de arduino welk type scherm we gebruiken
  pinMode (button1, INPUT);        //set de buttonpin als ingang
  digitalWrite (button1, HIGH);    //set de buttonpin hoog zodat we deze laag kunnen trekken naar GND
  pinMode (button2, INPUT);        //set de buttonpin als ingang
  digitalWrite (button2, HIGH);    //set de buttonpin hoog zodat we deze laag kunnen trekken naar GND
}

void loop() {                      //deze functie wordt continu doorlopen na het opstarten
  readbuttons();                   //start de functie readbuttons
  menu();                          //start de functie menu
}
In dit programma hebben we een hele set aan extra functies toegevoegd.
Ik zal deze tijdens de workshop 1 voor 1 doorlopen en uitleggen.
Attachments
les-4-3_bb.jpg
(907.46 KiB) Not downloaded yet
les-4-1_bb.jpg
(832.45 KiB) Not downloaded yet
Post Reply