funcionando

Dependencies:   EPD_GDE021A1 mbed reScale

Fork of DISCO-L053C8_ePD_demo by ST

Revision:
3:9229fd269ed0
Parent:
0:e5732175b08b
Child:
4:38ce0cfb14e2
diff -r 5244899e767f -r 9229fd269ed0 main.cpp
--- a/main.cpp	Wed Jun 07 11:56:39 2017 +0000
+++ b/main.cpp	Fri Aug 31 13:36:32 2018 +0000
@@ -1,5 +1,46 @@
+/*Código escrito por Marcelo Costanzo Miranda
+*Projeto feito conforme pedido do professor Silvio Szafir 
+*
+*1. IHM com placa ST discovery com display ePaper
+*
+*   1.1) funções pré-definidas para escrita na tela, de 1 até 5 linhas, 
+*            reconfiguráveis e atualizaveis uma-a-uma; 
+*    1.2) funcionamento através de conexão serial;
+*    1.3) conexão serial permite pelo menos três funções: 
+*           A) escolha da fonte e número de linhas; 
+*           B) limpar a tela; 
+*           C) imprimir (escrever) na linha/posição escolhida o texto enviado via comando ASCII serial;
+*
+*           Sugerir outras funções relevantes e experimentar a possibilidade de "animação" gráfica, 
+*           como p.ex.: "simbologia de ventilação", ou "motor girando"
+*
+*2. Placa ST ESCEVAL funcionando com potenciometro externo 
+*     para controle velocidade de 0% até 100% da velocidade máxima, no motor BLDC.
+*
+*3. IHM com placa ST discovery (botões e sliders) para controle de placa ST ESCEVAL para motor BLDC 
+*
+*   3.1) Possibilidade de IHM com placa ST discovery utilizando o recurso "slider" da placa, 
+*           para o ajuste da velocidade do motor BLDC entre 0% até 100% da velocidade máxima.
+* 
+*   3.2) Possibilidade de IHM com placa ST discovery utilizando botão do usuário para ligar/desligar motor
+*   3.3) Possibilidade de IHM com placa ST discovery utilizando botões extras 
+*           para reversão do sentido da rotação
+*
+*4. Documentação "open source" com descritivo do código IHM e ESCEVAL, 
+*     contendo programação mbed e detalhamento das funções implementadas 
+*     e sua forma de configuração / funcionamento.
+*
+*   São Paulo, SP
+*    30 de agosto de 2018
+*
+*/
+
 #include "mbed.h"
 #include "EPD_GDE021A1.h"
+#include"reScale.h"
+
+
+#define OFF       0.05
 
 #define EPD_CS       PA_15
 #define EPD_DC       PB_11
@@ -13,9 +54,16 @@
 EPD_GDE021A1 epd(EPD_CS, EPD_DC, EPD_RESET, EPD_BUSY, EPD_POWER, EPD_SPI_MOSI, EPD_SPI_MISO, EPD_SPI_SCK);
 
 DigitalOut led1(LED1);
+DigitalIn button(PA_0);
+Ticker flipper;
+PwmOut myservo(D10);
+AnalogIn CONTROL(PA_1);
+reScale _scale(0,1,0.05,0.1); 
+Serial pc(USBTX, USBRX); // tx, rx
 
 //width 48
 //height 26
+
 static uint8_t Battery_img[] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -45,10 +93,30 @@
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 };
 
+void flip() //time para envio das infos pela serial
+{
+    led1=!led1;  
+}
+
+float p=0.05, k;
+uint8_t x=0, y=0, i=0;
+char c;
+char s[100];
+bool flag_init = 0;
 int main()
 {
-    led1 = 1;
+//-----As linhas abaixo configuram e ligam o ESC--------
+    myservo.period(0.02f); //configura o periodo para o padrão PPM
+    myservo = 0.1;      //pulso mais longo 2mS
+    wait(1);
+    myservo = OFF; //pulso mais curto 1mS
+    wait(1);
+//fim das configs do ESC
+
+    flipper.attach(&flip, 0.1);//interrupção para piscar o led, debug para saber se o uC travou
     
+    
+    //mensagens de boas vindas
     epd.Clear(EPD_COLOR_WHITE);  
     epd.DisplayStringAtLine(5, (uint8_t*)"MBED", CENTER_MODE);
     epd.DisplayStringAtLine(3, (uint8_t*)"Epaper display", LEFT_MODE);
@@ -56,10 +124,131 @@
     epd.DrawImage(130, 0, 48, 26, Battery_img);
     epd.DrawRect(50, 4, 60, 4);
     epd.RefreshDisplay();
-    wait(2);
-  
-    while(1) {
-        led1 = !led1;
-        wait(1);
-    }
-}
+    wait(1);
+    epd.Clear(EPD_COLOR_WHITE);  
+    epd.RefreshDisplay();
+    epd.Clear(EPD_COLOR_WHITE); 
+    
+    flag_init = 1;
+    
+    myservo = OFF;
+    while(1)
+    {
+//---------------------MENU PRINCIPAL---------------------------------------        
+        if(flag_init == 1)
+        {
+            pc.printf("\nOla, escolha uma opcao abaixo:");
+            pc.printf("\nA. Selecionar fonte");
+            pc.printf("\nB. Limpar o Epaper");
+            pc.printf("\nC. Escreve texto no Epaper");  
+            pc.printf("\nD. Para usar o brushless"); 
+            pc.printf("\nE. Para reiniciar\n\n"); 
+            flag_init = 0;  
+        }//FIM DO MENU PRINCIPAL
+        
+        c = pc.getc(); 
+        
+//--------------------MENU DE FONTES-----------------------------------------        
+        if(c == 'A')
+        {
+            pc.printf("\n1. para a fonte pequena");
+            pc.printf("\n2. para a fonte media");
+            pc.printf("\n3. para a fonte grande");
+            c = pc.getc(); 
+            
+            //FONTE PEQUENA
+            if(c == '1')
+            {
+                epd.SetFont(&Font8);
+                pc.printf("\nFonte pequena selecionada");  
+                c = 0x00;
+            }    
+            
+            //FONTE MEDIA
+            if(c == '2')
+            {
+                epd.SetFont(&Font12);
+                pc.printf("\nFonte media selecionada"); 
+                c = 0x00; 
+            }  
+            
+            //FONTE GRANDE
+            if(c == '3')
+            {
+                epd.SetFont(&Font16);
+                pc.printf("\nFonte grande selecionada"); 
+                c = 0x00; 
+            }
+
+        }//FIM DO MENU DE FONTES   
+        
+//--------------LIMPAR EPAPER------------------------------------        
+        if(c == 'B')
+        {
+            epd.Clear(EPD_COLOR_WHITE);  
+            epd.RefreshDisplay();;
+            pc.printf("\nEpaper limpo\n"); 
+            c = 0x00;
+        }//FIM DA ROTINA DE LIMPEZA DO EPAPER
+       
+//----------ROTINA PARA ESCREVER NO EPAPER------------------------        
+        if(c == 'C') 
+        {   
+            c = 0x00;
+            pc.printf("Entre com seu texto (com line feed - LF):");
+            //led2 = 1;
+           
+           do
+           {
+               c = pc.getc();
+               s[i] = c;
+               ++i;
+            }
+            while(c!='\n'); //entra em loop, coletando os caracteres até achar o \n, e então sai do loop
+            
+            s[i-1] = '\0';   //elimina o caracter terminador de strings
+            pc.printf("%s", s);
+            epd.DisplayStringAtLine(5, (uint8_t*)s, CENTER_MODE);
+            epd.RefreshDisplay();
+            i=0;
+
+        }//FIM DA ROTINA PARA ESCREVER NO EPAPER 
+        
+//----------ROTINA PARA CONTROLAR O MOTOR BRUSHLESS- PULSOS PPM----------------
+        if(c == 'D')
+        {
+            pc.printf("\nP para parar");
+            while(1)
+            {
+                k = CONTROL;
+                p =_scale.from(k);  //converte o valor do ADC (0.0 - 1.0) para valor compativel do PPM (1 - 2 mS)
+                myservo = p;
+                pc.printf("control %f\n\r",p);    
+                wait(0.2);
+                if(pc.readable())
+                {
+                    c = pc.getc();
+                }
+                if(c == 'P')
+                {   
+                    break;
+                }
+                if(button == 1)
+                {
+                    wait(0.1);   //Debounce
+                    if(button == 1)
+                    {
+                        break;
+                    }
+                }    
+            }
+            myservo = OFF;
+            pc.printf("\nSaindo da funcao brushless");
+        }//FIM DA ROTINA DO MOTOR BRUSHLESS
+        
+//-------ROTINA PARA EXIBIR NOVAMENTE O MENU PRINCIPAL-------------        
+        if(c == 'E') 
+        flag_init = 1; 
+            
+    }//FIM DA WHILE
+}//FIM DO PROGRAMA
\ No newline at end of file