funcionando

Dependencies:   EPD_GDE021A1 mbed reScale

Fork of DISCO-L053C8_ePD_demo by ST

Committer:
Marcelocostanzo
Date:
Fri Aug 31 13:36:32 2018 +0000
Revision:
3:9229fd269ed0
Parent:
0:e5732175b08b
Child:
4:38ce0cfb14e2
Final, Funcionando

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marcelocostanzo 3:9229fd269ed0 1 /*Código escrito por Marcelo Costanzo Miranda
Marcelocostanzo 3:9229fd269ed0 2 *Projeto feito conforme pedido do professor Silvio Szafir
Marcelocostanzo 3:9229fd269ed0 3 *
Marcelocostanzo 3:9229fd269ed0 4 *1. IHM com placa ST discovery com display ePaper
Marcelocostanzo 3:9229fd269ed0 5 *
Marcelocostanzo 3:9229fd269ed0 6 * 1.1) funções pré-definidas para escrita na tela, de 1 até 5 linhas,
Marcelocostanzo 3:9229fd269ed0 7 * reconfiguráveis e atualizaveis uma-a-uma;
Marcelocostanzo 3:9229fd269ed0 8 * 1.2) funcionamento através de conexão serial;
Marcelocostanzo 3:9229fd269ed0 9 * 1.3) conexão serial permite pelo menos três funções:
Marcelocostanzo 3:9229fd269ed0 10 * A) escolha da fonte e número de linhas;
Marcelocostanzo 3:9229fd269ed0 11 * B) limpar a tela;
Marcelocostanzo 3:9229fd269ed0 12 * C) imprimir (escrever) na linha/posição escolhida o texto enviado via comando ASCII serial;
Marcelocostanzo 3:9229fd269ed0 13 *
Marcelocostanzo 3:9229fd269ed0 14 * Sugerir outras funções relevantes e experimentar a possibilidade de "animação" gráfica,
Marcelocostanzo 3:9229fd269ed0 15 * como p.ex.: "simbologia de ventilação", ou "motor girando"
Marcelocostanzo 3:9229fd269ed0 16 *
Marcelocostanzo 3:9229fd269ed0 17 *2. Placa ST ESCEVAL funcionando com potenciometro externo
Marcelocostanzo 3:9229fd269ed0 18 * para controle velocidade de 0% até 100% da velocidade máxima, no motor BLDC.
Marcelocostanzo 3:9229fd269ed0 19 *
Marcelocostanzo 3:9229fd269ed0 20 *3. IHM com placa ST discovery (botões e sliders) para controle de placa ST ESCEVAL para motor BLDC
Marcelocostanzo 3:9229fd269ed0 21 *
Marcelocostanzo 3:9229fd269ed0 22 * 3.1) Possibilidade de IHM com placa ST discovery utilizando o recurso "slider" da placa,
Marcelocostanzo 3:9229fd269ed0 23 * para o ajuste da velocidade do motor BLDC entre 0% até 100% da velocidade máxima.
Marcelocostanzo 3:9229fd269ed0 24 *
Marcelocostanzo 3:9229fd269ed0 25 * 3.2) Possibilidade de IHM com placa ST discovery utilizando botão do usuário para ligar/desligar motor
Marcelocostanzo 3:9229fd269ed0 26 * 3.3) Possibilidade de IHM com placa ST discovery utilizando botões extras
Marcelocostanzo 3:9229fd269ed0 27 * para reversão do sentido da rotação
Marcelocostanzo 3:9229fd269ed0 28 *
Marcelocostanzo 3:9229fd269ed0 29 *4. Documentação "open source" com descritivo do código IHM e ESCEVAL,
Marcelocostanzo 3:9229fd269ed0 30 * contendo programação mbed e detalhamento das funções implementadas
Marcelocostanzo 3:9229fd269ed0 31 * e sua forma de configuração / funcionamento.
Marcelocostanzo 3:9229fd269ed0 32 *
Marcelocostanzo 3:9229fd269ed0 33 * São Paulo, SP
Marcelocostanzo 3:9229fd269ed0 34 * 30 de agosto de 2018
Marcelocostanzo 3:9229fd269ed0 35 *
Marcelocostanzo 3:9229fd269ed0 36 */
Marcelocostanzo 3:9229fd269ed0 37
bcostm 0:e5732175b08b 38 #include "mbed.h"
bcostm 0:e5732175b08b 39 #include "EPD_GDE021A1.h"
Marcelocostanzo 3:9229fd269ed0 40 #include"reScale.h"
Marcelocostanzo 3:9229fd269ed0 41
Marcelocostanzo 3:9229fd269ed0 42
Marcelocostanzo 3:9229fd269ed0 43 #define OFF 0.05
bcostm 0:e5732175b08b 44
bcostm 0:e5732175b08b 45 #define EPD_CS PA_15
bcostm 0:e5732175b08b 46 #define EPD_DC PB_11
bcostm 0:e5732175b08b 47 #define EPD_RESET PB_2
bcostm 0:e5732175b08b 48 #define EPD_BUSY PA_8
bcostm 0:e5732175b08b 49 #define EPD_POWER PB_10
bcostm 0:e5732175b08b 50 #define EPD_SPI_MOSI PB_5
bcostm 0:e5732175b08b 51 #define EPD_SPI_MISO PB_4
bcostm 0:e5732175b08b 52 #define EPD_SPI_SCK PB_3
bcostm 0:e5732175b08b 53
bcostm 0:e5732175b08b 54 EPD_GDE021A1 epd(EPD_CS, EPD_DC, EPD_RESET, EPD_BUSY, EPD_POWER, EPD_SPI_MOSI, EPD_SPI_MISO, EPD_SPI_SCK);
bcostm 0:e5732175b08b 55
bcostm 0:e5732175b08b 56 DigitalOut led1(LED1);
Marcelocostanzo 3:9229fd269ed0 57 DigitalIn button(PA_0);
Marcelocostanzo 3:9229fd269ed0 58 Ticker flipper;
Marcelocostanzo 3:9229fd269ed0 59 PwmOut myservo(D10);
Marcelocostanzo 3:9229fd269ed0 60 AnalogIn CONTROL(PA_1);
Marcelocostanzo 3:9229fd269ed0 61 reScale _scale(0,1,0.05,0.1);
Marcelocostanzo 3:9229fd269ed0 62 Serial pc(USBTX, USBRX); // tx, rx
bcostm 0:e5732175b08b 63
bcostm 0:e5732175b08b 64 //width 48
bcostm 0:e5732175b08b 65 //height 26
Marcelocostanzo 3:9229fd269ed0 66
bcostm 0:e5732175b08b 67 static uint8_t Battery_img[] = {
bcostm 0:e5732175b08b 68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
bcostm 0:e5732175b08b 69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
bcostm 0:e5732175b08b 70 0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f,
bcostm 0:e5732175b08b 71 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x0c,
bcostm 0:e5732175b08b 72 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x08,
bcostm 0:e5732175b08b 73 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x08,
bcostm 0:e5732175b08b 74 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x08,
bcostm 0:e5732175b08b 75 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x08,
bcostm 0:e5732175b08b 76 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x18,
bcostm 0:e5732175b08b 77 0xfe, 0xff, 0xff, 0x3f, 0x10, 0x38,
bcostm 0:e5732175b08b 78 0xfe, 0xff, 0xff, 0x3f, 0x10, 0x38,
bcostm 0:e5732175b08b 79 0xfe, 0xff, 0xff, 0x3f, 0x10, 0x38,
bcostm 0:e5732175b08b 80 0xfe, 0xff, 0xff, 0x3f, 0xff, 0x39,
bcostm 0:e5732175b08b 81 0xfe, 0xff, 0xff, 0x3f, 0x10, 0x38,
bcostm 0:e5732175b08b 82 0xfe, 0xff, 0xff, 0x3f, 0x10, 0x38,
bcostm 0:e5732175b08b 83 0xfe, 0xff, 0xff, 0x3f, 0x10, 0x38,
bcostm 0:e5732175b08b 84 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x38,
bcostm 0:e5732175b08b 85 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x18,
bcostm 0:e5732175b08b 86 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x08,
bcostm 0:e5732175b08b 87 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x08,
bcostm 0:e5732175b08b 88 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x08,
bcostm 0:e5732175b08b 89 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x0c,
bcostm 0:e5732175b08b 90 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x0c,
bcostm 0:e5732175b08b 91 0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f,
bcostm 0:e5732175b08b 92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
bcostm 0:e5732175b08b 93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
bcostm 0:e5732175b08b 94 };
bcostm 0:e5732175b08b 95
Marcelocostanzo 3:9229fd269ed0 96 void flip() //time para envio das infos pela serial
Marcelocostanzo 3:9229fd269ed0 97 {
Marcelocostanzo 3:9229fd269ed0 98 led1=!led1;
Marcelocostanzo 3:9229fd269ed0 99 }
Marcelocostanzo 3:9229fd269ed0 100
Marcelocostanzo 3:9229fd269ed0 101 float p=0.05, k;
Marcelocostanzo 3:9229fd269ed0 102 uint8_t x=0, y=0, i=0;
Marcelocostanzo 3:9229fd269ed0 103 char c;
Marcelocostanzo 3:9229fd269ed0 104 char s[100];
Marcelocostanzo 3:9229fd269ed0 105 bool flag_init = 0;
bcostm 0:e5732175b08b 106 int main()
bcostm 0:e5732175b08b 107 {
Marcelocostanzo 3:9229fd269ed0 108 //-----As linhas abaixo configuram e ligam o ESC--------
Marcelocostanzo 3:9229fd269ed0 109 myservo.period(0.02f); //configura o periodo para o padrão PPM
Marcelocostanzo 3:9229fd269ed0 110 myservo = 0.1; //pulso mais longo 2mS
Marcelocostanzo 3:9229fd269ed0 111 wait(1);
Marcelocostanzo 3:9229fd269ed0 112 myservo = OFF; //pulso mais curto 1mS
Marcelocostanzo 3:9229fd269ed0 113 wait(1);
Marcelocostanzo 3:9229fd269ed0 114 //fim das configs do ESC
Marcelocostanzo 3:9229fd269ed0 115
Marcelocostanzo 3:9229fd269ed0 116 flipper.attach(&flip, 0.1);//interrupção para piscar o led, debug para saber se o uC travou
bcostm 0:e5732175b08b 117
Marcelocostanzo 3:9229fd269ed0 118
Marcelocostanzo 3:9229fd269ed0 119 //mensagens de boas vindas
bcostm 0:e5732175b08b 120 epd.Clear(EPD_COLOR_WHITE);
bcostm 0:e5732175b08b 121 epd.DisplayStringAtLine(5, (uint8_t*)"MBED", CENTER_MODE);
bcostm 0:e5732175b08b 122 epd.DisplayStringAtLine(3, (uint8_t*)"Epaper display", LEFT_MODE);
bcostm 0:e5732175b08b 123 epd.DisplayStringAtLine(2, (uint8_t*)"demo", LEFT_MODE);
bcostm 0:e5732175b08b 124 epd.DrawImage(130, 0, 48, 26, Battery_img);
bcostm 0:e5732175b08b 125 epd.DrawRect(50, 4, 60, 4);
bcostm 0:e5732175b08b 126 epd.RefreshDisplay();
Marcelocostanzo 3:9229fd269ed0 127 wait(1);
Marcelocostanzo 3:9229fd269ed0 128 epd.Clear(EPD_COLOR_WHITE);
Marcelocostanzo 3:9229fd269ed0 129 epd.RefreshDisplay();
Marcelocostanzo 3:9229fd269ed0 130 epd.Clear(EPD_COLOR_WHITE);
Marcelocostanzo 3:9229fd269ed0 131
Marcelocostanzo 3:9229fd269ed0 132 flag_init = 1;
Marcelocostanzo 3:9229fd269ed0 133
Marcelocostanzo 3:9229fd269ed0 134 myservo = OFF;
Marcelocostanzo 3:9229fd269ed0 135 while(1)
Marcelocostanzo 3:9229fd269ed0 136 {
Marcelocostanzo 3:9229fd269ed0 137 //---------------------MENU PRINCIPAL---------------------------------------
Marcelocostanzo 3:9229fd269ed0 138 if(flag_init == 1)
Marcelocostanzo 3:9229fd269ed0 139 {
Marcelocostanzo 3:9229fd269ed0 140 pc.printf("\nOla, escolha uma opcao abaixo:");
Marcelocostanzo 3:9229fd269ed0 141 pc.printf("\nA. Selecionar fonte");
Marcelocostanzo 3:9229fd269ed0 142 pc.printf("\nB. Limpar o Epaper");
Marcelocostanzo 3:9229fd269ed0 143 pc.printf("\nC. Escreve texto no Epaper");
Marcelocostanzo 3:9229fd269ed0 144 pc.printf("\nD. Para usar o brushless");
Marcelocostanzo 3:9229fd269ed0 145 pc.printf("\nE. Para reiniciar\n\n");
Marcelocostanzo 3:9229fd269ed0 146 flag_init = 0;
Marcelocostanzo 3:9229fd269ed0 147 }//FIM DO MENU PRINCIPAL
Marcelocostanzo 3:9229fd269ed0 148
Marcelocostanzo 3:9229fd269ed0 149 c = pc.getc();
Marcelocostanzo 3:9229fd269ed0 150
Marcelocostanzo 3:9229fd269ed0 151 //--------------------MENU DE FONTES-----------------------------------------
Marcelocostanzo 3:9229fd269ed0 152 if(c == 'A')
Marcelocostanzo 3:9229fd269ed0 153 {
Marcelocostanzo 3:9229fd269ed0 154 pc.printf("\n1. para a fonte pequena");
Marcelocostanzo 3:9229fd269ed0 155 pc.printf("\n2. para a fonte media");
Marcelocostanzo 3:9229fd269ed0 156 pc.printf("\n3. para a fonte grande");
Marcelocostanzo 3:9229fd269ed0 157 c = pc.getc();
Marcelocostanzo 3:9229fd269ed0 158
Marcelocostanzo 3:9229fd269ed0 159 //FONTE PEQUENA
Marcelocostanzo 3:9229fd269ed0 160 if(c == '1')
Marcelocostanzo 3:9229fd269ed0 161 {
Marcelocostanzo 3:9229fd269ed0 162 epd.SetFont(&Font8);
Marcelocostanzo 3:9229fd269ed0 163 pc.printf("\nFonte pequena selecionada");
Marcelocostanzo 3:9229fd269ed0 164 c = 0x00;
Marcelocostanzo 3:9229fd269ed0 165 }
Marcelocostanzo 3:9229fd269ed0 166
Marcelocostanzo 3:9229fd269ed0 167 //FONTE MEDIA
Marcelocostanzo 3:9229fd269ed0 168 if(c == '2')
Marcelocostanzo 3:9229fd269ed0 169 {
Marcelocostanzo 3:9229fd269ed0 170 epd.SetFont(&Font12);
Marcelocostanzo 3:9229fd269ed0 171 pc.printf("\nFonte media selecionada");
Marcelocostanzo 3:9229fd269ed0 172 c = 0x00;
Marcelocostanzo 3:9229fd269ed0 173 }
Marcelocostanzo 3:9229fd269ed0 174
Marcelocostanzo 3:9229fd269ed0 175 //FONTE GRANDE
Marcelocostanzo 3:9229fd269ed0 176 if(c == '3')
Marcelocostanzo 3:9229fd269ed0 177 {
Marcelocostanzo 3:9229fd269ed0 178 epd.SetFont(&Font16);
Marcelocostanzo 3:9229fd269ed0 179 pc.printf("\nFonte grande selecionada");
Marcelocostanzo 3:9229fd269ed0 180 c = 0x00;
Marcelocostanzo 3:9229fd269ed0 181 }
Marcelocostanzo 3:9229fd269ed0 182
Marcelocostanzo 3:9229fd269ed0 183 }//FIM DO MENU DE FONTES
Marcelocostanzo 3:9229fd269ed0 184
Marcelocostanzo 3:9229fd269ed0 185 //--------------LIMPAR EPAPER------------------------------------
Marcelocostanzo 3:9229fd269ed0 186 if(c == 'B')
Marcelocostanzo 3:9229fd269ed0 187 {
Marcelocostanzo 3:9229fd269ed0 188 epd.Clear(EPD_COLOR_WHITE);
Marcelocostanzo 3:9229fd269ed0 189 epd.RefreshDisplay();;
Marcelocostanzo 3:9229fd269ed0 190 pc.printf("\nEpaper limpo\n");
Marcelocostanzo 3:9229fd269ed0 191 c = 0x00;
Marcelocostanzo 3:9229fd269ed0 192 }//FIM DA ROTINA DE LIMPEZA DO EPAPER
Marcelocostanzo 3:9229fd269ed0 193
Marcelocostanzo 3:9229fd269ed0 194 //----------ROTINA PARA ESCREVER NO EPAPER------------------------
Marcelocostanzo 3:9229fd269ed0 195 if(c == 'C')
Marcelocostanzo 3:9229fd269ed0 196 {
Marcelocostanzo 3:9229fd269ed0 197 c = 0x00;
Marcelocostanzo 3:9229fd269ed0 198 pc.printf("Entre com seu texto (com line feed - LF):");
Marcelocostanzo 3:9229fd269ed0 199 //led2 = 1;
Marcelocostanzo 3:9229fd269ed0 200
Marcelocostanzo 3:9229fd269ed0 201 do
Marcelocostanzo 3:9229fd269ed0 202 {
Marcelocostanzo 3:9229fd269ed0 203 c = pc.getc();
Marcelocostanzo 3:9229fd269ed0 204 s[i] = c;
Marcelocostanzo 3:9229fd269ed0 205 ++i;
Marcelocostanzo 3:9229fd269ed0 206 }
Marcelocostanzo 3:9229fd269ed0 207 while(c!='\n'); //entra em loop, coletando os caracteres até achar o \n, e então sai do loop
Marcelocostanzo 3:9229fd269ed0 208
Marcelocostanzo 3:9229fd269ed0 209 s[i-1] = '\0'; //elimina o caracter terminador de strings
Marcelocostanzo 3:9229fd269ed0 210 pc.printf("%s", s);
Marcelocostanzo 3:9229fd269ed0 211 epd.DisplayStringAtLine(5, (uint8_t*)s, CENTER_MODE);
Marcelocostanzo 3:9229fd269ed0 212 epd.RefreshDisplay();
Marcelocostanzo 3:9229fd269ed0 213 i=0;
Marcelocostanzo 3:9229fd269ed0 214
Marcelocostanzo 3:9229fd269ed0 215 }//FIM DA ROTINA PARA ESCREVER NO EPAPER
Marcelocostanzo 3:9229fd269ed0 216
Marcelocostanzo 3:9229fd269ed0 217 //----------ROTINA PARA CONTROLAR O MOTOR BRUSHLESS- PULSOS PPM----------------
Marcelocostanzo 3:9229fd269ed0 218 if(c == 'D')
Marcelocostanzo 3:9229fd269ed0 219 {
Marcelocostanzo 3:9229fd269ed0 220 pc.printf("\nP para parar");
Marcelocostanzo 3:9229fd269ed0 221 while(1)
Marcelocostanzo 3:9229fd269ed0 222 {
Marcelocostanzo 3:9229fd269ed0 223 k = CONTROL;
Marcelocostanzo 3:9229fd269ed0 224 p =_scale.from(k); //converte o valor do ADC (0.0 - 1.0) para valor compativel do PPM (1 - 2 mS)
Marcelocostanzo 3:9229fd269ed0 225 myservo = p;
Marcelocostanzo 3:9229fd269ed0 226 pc.printf("control %f\n\r",p);
Marcelocostanzo 3:9229fd269ed0 227 wait(0.2);
Marcelocostanzo 3:9229fd269ed0 228 if(pc.readable())
Marcelocostanzo 3:9229fd269ed0 229 {
Marcelocostanzo 3:9229fd269ed0 230 c = pc.getc();
Marcelocostanzo 3:9229fd269ed0 231 }
Marcelocostanzo 3:9229fd269ed0 232 if(c == 'P')
Marcelocostanzo 3:9229fd269ed0 233 {
Marcelocostanzo 3:9229fd269ed0 234 break;
Marcelocostanzo 3:9229fd269ed0 235 }
Marcelocostanzo 3:9229fd269ed0 236 if(button == 1)
Marcelocostanzo 3:9229fd269ed0 237 {
Marcelocostanzo 3:9229fd269ed0 238 wait(0.1); //Debounce
Marcelocostanzo 3:9229fd269ed0 239 if(button == 1)
Marcelocostanzo 3:9229fd269ed0 240 {
Marcelocostanzo 3:9229fd269ed0 241 break;
Marcelocostanzo 3:9229fd269ed0 242 }
Marcelocostanzo 3:9229fd269ed0 243 }
Marcelocostanzo 3:9229fd269ed0 244 }
Marcelocostanzo 3:9229fd269ed0 245 myservo = OFF;
Marcelocostanzo 3:9229fd269ed0 246 pc.printf("\nSaindo da funcao brushless");
Marcelocostanzo 3:9229fd269ed0 247 }//FIM DA ROTINA DO MOTOR BRUSHLESS
Marcelocostanzo 3:9229fd269ed0 248
Marcelocostanzo 3:9229fd269ed0 249 //-------ROTINA PARA EXIBIR NOVAMENTE O MENU PRINCIPAL-------------
Marcelocostanzo 3:9229fd269ed0 250 if(c == 'E')
Marcelocostanzo 3:9229fd269ed0 251 flag_init = 1;
Marcelocostanzo 3:9229fd269ed0 252
Marcelocostanzo 3:9229fd269ed0 253 }//FIM DA WHILE
Marcelocostanzo 3:9229fd269ed0 254 }//FIM DO PROGRAMA