faf

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
kaiquedog
Date:
Wed May 27 15:16:45 2020 +0000
Parent:
1:d5b85bc9e87b
Commit message:
Classe_LCD

Changed in this revision

LCD_ka.cpp Show annotated file Show diff for this revision Revisions of this file
LCD_ka.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/LCD_ka.cpp	Fri Apr 03 22:06:47 2020 +0000
+++ b/LCD_ka.cpp	Wed May 27 15:16:45 2020 +0000
@@ -1,25 +1,34 @@
 #include "LCD_ka.h"
 
-
 //**** Define as portas que o LCD lê: ****
-DigitalOut RS(D8);           
-DigitalOut E(D9);
-BusOut dados(D4, D5, D6, D7);
+LCD::LCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7) : RS(rs), E(e), dados(d4,d5,d6,d7){
+    Inicia_LCD();
+}
 
-//**** Variáveis que o código utiliza para funções internas: ****
+
 int _coluna = 1;
 int _linha = 1;
 
+string LCD::Lepos(void){
+    string buffer;
+    char li[6];
+    sprintf(li,"(%d,%d)", _linha, _coluna);
+    buffer.append(li);
+    return buffer;
+    
+}
+
 //**** Comando que indica para o LCD que metade dos bits foram enviados: ****
-void bate_enable(void){
+void LCD::bate_enable(void){
     E = 1;
     wait(0.000040f);
     E=0;
     wait(0.000040f);
 }
 
+
 //**** Função de inicialização do LCD: ****
-void Inicia_LCD(void){
+void LCD::Inicia_LCD(void){
     RS = 0;
     E = 0;
     dados = 0x0;
@@ -73,29 +82,10 @@
         clc(); 
 }
 
-//**** Função que recebe string e escreve no display: ****
-void disp(char* value){
-    for (int i = 0; value[i] != '\0';++i)
-    {
-        if (_coluna == 17)
-        {
-            RS = 0;
-            fim_de_curso();
-        }
-        RS = 1;
-        char txt = value[i];
-        dados = txt>>4;
-        bate_enable();
-        dados = txt;
-        bate_enable();
-        
-        _coluna = _coluna + 1;
-    }
-    RS = 0;
-}
+
 
 //**** Função que limpa o display e volta o cursor para (1,1): ****
-void clc(void){
+void LCD::clc(void){
     wait(0.02);
     
     dados = 0x0;
@@ -109,8 +99,9 @@
     _linha = 1;
 }
 
+
 //**** Função que volta o cursor para (1,1): ****
-void home(void){
+void LCD::home(void){
     wait(0.002);
     
     dados = 0x0;
@@ -124,8 +115,9 @@
     _linha = 1;
 }
 
+
 //**** Função que manda o cursor para a direita: ****
-void direita(void){
+void LCD::direita(void){
     wait(0.0002);
     
     dados = 0x1;
@@ -140,8 +132,9 @@
     fim_de_curso(); 
 }
 
+
 //**** Função quem manda o cursor para a esquerda: ****
-void esquerda(void){
+void LCD::esquerda(void){
     wait(0.0002);
     
     dados = 0x1;
@@ -156,8 +149,9 @@
     fim_de_curso();
 }
 
+
 //**** Função que apaga o que está no cursor: ****
-void apaga(void){
+void LCD::apaga(void){
     RS = 1;
     
     wait(0.002);
@@ -172,50 +166,39 @@
     pos(_linha,_coluna);
 }
 
+
 //**** Função que manda o display para linha de cima: ****
-void cima(void){
+void LCD::cima(void){
     pos(1,_coluna);
 
     _linha = 1;
 }
 
+
 //**** Função que manda o display para linha de baixo: ****
-void baixo(void){
+void LCD::baixo(void){
     pos(2,_coluna);
     
     _linha = 2;
 }
 
+
 //**** Função que posiciona o cursor na linha e coluna inseridas: ****
-void pos(int li, int co){
-    home();                      //   Primeiro o cursor volta para (0,0)
-    wait(0.002);
+void LCD::pos(int li, int co){
+    int POSI = 0x80 + ((li-1) * 0x40) + (co-1);
     
-    if (li == 1)                 //   Se o usuário inseriu a linha 1
-    {                            //esse comando faz o cursor andar
-        for(int i = 1; i < co; i++)  //para a direita até a posição declarada
-        { 
-            direita();           
-        }
-    }
+    dados = POSI>>4;
+    bate_enable();
+    dados = POSI;
+    bate_enable();
     
-    if (li == 2)                 //   Se o usuário inseriu a linha 2
-    {                            //Primeiro temos que mandar o cursor
-        dados = 0xC;             //para a linha dois e depois andar
-        bate_enable();           //para a direita até a posição declarada
-        dados = 0x0;
-        bate_enable();
-        for(int i = 1; i < co; i++)
-        {
-            direita();
-        }
-    }
     _coluna = co;
     _linha = li;
 }   
 
+
 //**** Função que define se o cursor saiu do display: ****
-void fim_de_curso (void){
+void LCD::fim_de_curso (void){
     switch (_coluna)
     {
         case 17 : 
@@ -234,5 +217,27 @@
 }
     
     
+ 
+ 
+ 
+int LCD::_putc(int value) {
+    if (value == '\n') {
+        baixo();
+    }else{
+        RS = 1;
+        dados = value>>4;
+        bate_enable();
+        dados = value;
+        bate_enable();
+        RS = 0;
+    }
+    _chars[_linha-1][_coluna-1] = value;
+    _coluna++;
+    fim_de_curso();
     
-    
\ No newline at end of file
+    return value;
+}
+
+int LCD::_getc() {
+    return -1;
+}
\ No newline at end of file
--- a/LCD_ka.h	Fri Apr 03 22:06:47 2020 +0000
+++ b/LCD_ka.h	Wed May 27 15:16:45 2020 +0000
@@ -1,54 +1,71 @@
 #ifndef LCD_H
 #define LCD_H
 #include "mbed.h"
-
+#include <string>
+#include <stdio.h>
+class LCD : public Stream {
+public:
+    LCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7);
+    
+    string Lepos(void);
+    
 // Comando que indica para o LCD que metade dos bits foram enviados:
-void bate_enable(void);
+    void bate_enable(void);
 
 
 // Função de inicialização do LCD:
-void Inicia_LCD(void);
+    void Inicia_LCD(void);
 
 
 // Função que recebe string e escreve no display:
-void disp(char* value);
+    void disp(char* value);
 
 
 // Função que limpa o display e volta o cursor para (1,1):
-void clc(void);
+    void clc(void);
+
 
 // Função que volta o cursor para (1,1):
-void home(void);
+    void home(void);
 
 
 // Função que manda o cursor para a direita:
-void direita(void);
+    void direita(void);
 
 
 // Função quem manda o cursor para a esquerda:
-void esquerda(void);
+    void esquerda(void);
 
 
 // Função que apaga o que está no cursor:
-void apaga(void);
+    void apaga(void);
 
 
 // Função que manda o display para linha de cima:
-void cima(void);
+    void cima(void);
 
 
 // Função que manda o display para linha de baixo:
-void baixo(void);
+    void baixo(void);
 
 
 // Função que posiciona o cursor na linha e coluna inseridas:
-void pos(int linha, int coluna);
+    void pos(int linha, int coluna);
 
 
 // Função que define se o cursor saiu do display:
-void fim_de_curso(void);
-
+    void fim_de_curso(void);
 
-
+//**** Variáveis que o código utiliza para funções internas: ****    
+    DigitalOut RS, E;
+    BusOut dados;
+    int _coluna;
+    int _linha;
+    char _chars[2][16];
 
+// Stream implementation functions
+    virtual int _putc(int value);
+    virtual int _getc();
+};
+  
 #endif
--- a/main.cpp	Fri Apr 03 22:06:47 2020 +0000
+++ b/main.cpp	Wed May 27 15:16:45 2020 +0000
@@ -1,43 +1,61 @@
 #include "mbed.h"
 #include "LCD_ka.h"
+LCD lcd(D8, D9, D4, D5, D6, D7);
+AnalogIn Buts(A0);
 AnalogIn Ya(A1);
 AnalogIn Xa(A2);
-DigitalIn botao(D3);
 
 int main(){
-    Inicia_LCD();
     int y = Ya.read()*1000;
     int x = Xa.read()*1000;
-    disp("Josueb6$#@!");
-    
-    while(1){
-        int y = Ya.read()*1000;
-        int x = Xa.read()*1000;
-        wait(0.00002);
-        if (botao == 0){
-            apaga();
-            wait(0.3);
+    while(1){    
+        y = Ya.read()*1000;
+        x = Xa.read()*1000;
+        
+        if ((Buts.read()*1000 > 750) && (Buts.read()*1000 < 850)){
+            lcd.printf("select");
+            wait(0.5);
+        }
+        if ((Buts.read()*1000 > 400) && (Buts.read()*1000 < 500)){
+            lcd.printf("left");
+            wait(0.5);
         }
+        if ((Buts.read()*1000 > 200) && (Buts.read()*1000 < 300)){
+            lcd.printf("down");
+            wait(0.5);
+        }
+        if ((Buts.read()*1000 > 60) && (Buts.read()*1000 < 150)){
+            lcd.printf("up");
+            wait(0.5);
+        }
+        if ((Buts.read()*1000 > 0) && (Buts.read()*1000 < 50)){
+            lcd.printf("right");
+            wait(0.5);
+        }
+        
         if((x < 400)||(x > 600)||(y < 400)||(y > 600)){
-            int y = Ya.read()*1000;
-            int x = Xa.read()*1000;
+            y = Ya.read()*1000;
+            x = Xa.read()*1000;
             
             if (x > 900){
-                direita();
+                lcd.direita();
+                wait(0.2);
+            }
+            
+            if (x < 100){
+                lcd.esquerda();
                 wait(0.2);
             }
             if (y > 900){
-                baixo();
-                wait(0.2);
-            }
-            if (x < 100){
-                esquerda();
+                lcd.baixo();
                 wait(0.2);
             }
             if (y < 100){
-                cima();
+                lcd.cima();
                 wait(0.2);
             }    
         }
+            
+        
     }
 }