funcionando
Dependencies: EPD_GDE021A1 mbed reScale
Fork of DISCO-L053C8_ePD_demo by
Diff: main.cpp
- Revision:
- 3:9229fd269ed0
- Parent:
- 0:e5732175b08b
- Child:
- 4:38ce0cfb14e2
--- 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