Les 17 (grafisch LCD 2)

Alleen lezen

Moderator: pe1br

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

Les 17 (grafisch LCD 2)

Post by pe1br »

Les17-1:

Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).

Monteer het grafisch display op de Arduino UNO zoals op onderstaande afbeelding:


In de vorige les hebben we al 2 bibliotheken geladen voor het LCD scherm.
Nu komt er nog een bibliotheek bij voor het touchscreen:
Installeer de bibliotheek met de naam touchScreen.

Als je deze bibliotheek niet kunt vinden in de standaard bibliotheken staat deze als .zip bestand onderaan deze pagina.
Je kunt deze dan installeren door in het menu te klikken naar schets >> bibliotheek begruiken >> .ZIP bibliotheek toevoegen.
Selecteer de gedownloade file en de Arduino software zal deze automatisch installeren.

Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de arduino ide:

Code: Select all

#include "Adafruit_GFX.h"// Algemene bibliotheek voor grafische lcd schermen
#include <MCUFRIEND_kbv.h> //specifieke bibliotheek voor dit type scherm
#include <TouchScreen.h> 

MCUFRIEND_kbv tft;  //koppel de functie tft aan de bibliotheek

//definieer de kleuren die we kunnen gebruiken 
#define black   0x0000
#define blue    0x001F
#define red     0xF800
#define green   0x07E0
#define cyan    0x07FF
#define magenta 0xF81F
#define yellow  0xFFE0
#define white   0xFFFF

#define LCD_CS A3 // Chip Select 
#define LCD_CD A2 // Command/Data 
#define LCD_WR A1 // LCD Write 
#define LCD_RD A0 // LCD Read 
#define LCD_RESET A4 // LCD Reset

uint16_t identifier;

int XP = 8, XM = A2, YP = A3, YM = 9;
TouchScreen myTouch(XP, YP, XM, YM, 300);
TSPoint tp;                     

//readbutton
long buttoncounter = 0;
byte button = 0;
byte menubutton = 0;
byte alarmbutton = 0;

//alarm
int alarm = 0;
int maxpower = 30;
int maxreflect = 3;
int maxtemp = 80;
int maxvolt = 15;
int maxampere = 12;

void writetext(String text, int x, int y, byte textsize, int textcolor) {
  tft.setCursor(x, y);
  tft.setTextColor(textcolor);
  tft.setTextSize(textsize);
  tft.print(text);
}

void writeint(int text, int x, int y, byte textsize, int textcolor) {
  tft.setCursor(x, y);
  tft.setTextColor(textcolor);
  tft.setTextSize(textsize);
  tft.print(text);
}

void printbutton(int buttonx, int buttony, int length, int height, String text, int color) {
  tft.fillRoundRect(buttonx, buttony, length, height, 8, color);
  tft.setCursor(buttonx + (length / 2) - (text.length() * 12 / 2), buttony + (height / 2) - 6);
  tft.setTextColor(black);
  tft.setTextSize(2);
  tft.print(text);
}

void printscreen() {
  tft.fillScreen(black);
  int buttonwith = 50;
  int buttonhight = 35;
  writetext("OUTPUT POWER", 15, 17, 2, white);
  printbutton(170, 5, buttonwith, buttonhight, "-", cyan);
  writeint(maxpower, 230, 17, 2, white);
  printbutton(260, 5, buttonwith, buttonhight, "+", cyan);
  writetext("REFL. POWER", 24, 65, 2, white);
  printbutton(170, 53, buttonwith, buttonhight, "-", cyan);
  writeint(maxreflect, 230, 65, 2, white);
  printbutton(260, 53, buttonwith, buttonhight, "+", cyan);
  writetext("TEMPERATURE", 24, 113, 2, white);
  printbutton(170, 101, buttonwith, buttonhight, "-", cyan);
  writeint(maxtemp, 230, 113, 2, white);
  printbutton(260, 101, buttonwith, buttonhight, "+", cyan);
  writetext("VOLTAGE", 69, 161, 2, white);
  printbutton(170, 149, buttonwith, buttonhight, "-", cyan);
  writeint(maxvolt, 230, 161, 2, white);
  printbutton(260, 149, buttonwith, buttonhight, "+", cyan);
  writetext("AMPERE", 78, 209, 2, white);
  printbutton(170, 197, buttonwith, buttonhight, "-", cyan);
  writeint(maxampere, 230, 209, 2, white);
  printbutton(260, 197, buttonwith, buttonhight, "+", cyan);
}

void changevalue() {
  tp = myTouch.getPoint();
  if (tp.z > 0 && tp.z < 1000) {
    //Serial.print("\r\nx="); Serial.print(tp.x);
    //Serial.print(" y="); Serial.print(tp.y);
    //Serial.print(" z="); Serial.print(tp.z);
    int x = tp.x;
    int y = tp.y;
    if (x > 775 && x < 900 && y > 360 && y < 490) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxpower, 230, 17, 2, black);
      maxpower --;
      if (maxpower < 0) maxpower = 0;
      writeint(maxpower, 230, 17, 2, white);
    }
    if (x > 775 && x < 900 && y > 130 && y < 260) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxpower, 230, 17, 2, black);
      maxpower ++;
      writeint(maxpower, 230, 17, 2, white);
    }
    if (x > 615 && x < 730 && y > 360 && y < 490) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxreflect, 230, 65, 2, black);
      maxreflect --;
      if (maxreflect < 0) maxreflect = 0; 
      writeint(maxreflect, 230, 65, 2, white);
    }
    if (x > 615 && x < 730 && y > 130 && y < 260) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxreflect, 230, 65, 2, black);
      maxreflect ++;
      writeint(maxreflect, 230, 65, 2, white);
    }
    if (x > 460 && x < 565 && y > 360 && y < 490) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxtemp, 230, 113, 2, black);
      maxtemp --;
      if (maxtemp < 0) maxtemp = 0; 
      writeint(maxtemp, 230, 113, 2, white);
    }
    if (x > 460 && x < 565 && y > 130 && y < 260) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxtemp, 230, 113, 2, black);
      maxtemp ++;
      writeint(maxtemp, 230, 113, 2, white);
    }
    if (x > 300 && x < 410 && y > 360 && y < 490) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxvolt, 230, 161, 2, black);
      maxvolt --;
      if (maxvolt < 0) maxvolt = 0; 
      writeint(maxvolt, 230, 161, 2, white);
    }
    if (x > 300 && x < 410 && y > 130 && y < 260) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);      
      writeint(maxvolt, 230, 161, 2, black);
      maxvolt ++;
      writeint(maxvolt, 230, 161, 2, white);
    }
    if (x > 145 && x < 260 && y > 360 && y < 490) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);     
      writeint(maxampere, 230, 209, 2, black);
      maxampere --;
      if (maxampere < 0) maxampere = 0; 
      writeint(maxampere, 230, 209, 2, white);
    }
    if (x > 145 && x < 260 && y > 130 && y < 260) {
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);
      writeint(maxampere, 230, 209, 2, black);
      maxampere ++;
      writeint(maxampere, 230, 209, 2, white);
    }
    delay(100);
  }
}

void setup() {
  Serial.begin(9600);
  uint16_t identifier = tft.readID();
  tft.reset();
  delay(1000);
  tft.begin(identifier);                                     //Start het lcd scherm
  tft.fillScreen(black);                          //vul het scherm op in de kleur zwart
  tft.setRotation(3); //0-3                    //Stel het scherm in op horizontaal met de text boven de buttons
  printscreen();
} 

void loop() {
  changevalue();
  Serial.println(maxpower);
  Serial.println(maxreflect);
  Serial.println(maxtemp);
  Serial.println(maxvolt);
  Serial.println(maxampere);
  Serial.println("");
}
Druk op de toetsen op het scherm, als het goed is zal de waarde veranderen.
Attachments
Touch-Screen-Library-master.zip
(7.79 KiB) Downloaded 3200 times
Post Reply