matrix de led

Dependencies:   mbed

Committer:
damian2340
Date:
Thu May 25 01:04:58 2017 +0000
Revision:
4:91c51d4191e4
Parent:
3:ab372258bd50
Asado del 24

Who changed what in which revision?

UserRevisionLine numberNew contents of line
damian2340 1:6e9b9cc2c375 1 #include <stdint.h>
damian2340 1:6e9b9cc2c375 2 #include <string.h>
damian2340 1:6e9b9cc2c375 3
damian2340 0:644da2e23ddc 4 #include "mbed.h"
damian2340 0:644da2e23ddc 5 #include "Serial.h"
damian2340 0:644da2e23ddc 6 #include "matrixDisplay.h"
damian2340 0:644da2e23ddc 7
damian2340 1:6e9b9cc2c375 8 const int rxBuffersize = 48;
damian2340 1:6e9b9cc2c375 9 const int comSize = 3;
damian2340 1:6e9b9cc2c375 10
damian2340 1:6e9b9cc2c375 11 /* Type prototypes*/
damian2340 1:6e9b9cc2c375 12
damian2340 1:6e9b9cc2c375 13 typedef enum{
damian2340 1:6e9b9cc2c375 14 comUnInit = 0,
damian2340 1:6e9b9cc2c375 15 comInactive,
damian2340 1:6e9b9cc2c375 16 comNewDataRecived,
damian2340 1:6e9b9cc2c375 17 comNewCommandRecived,
damian2340 1:6e9b9cc2c375 18 comWaiting
damian2340 1:6e9b9cc2c375 19 }CommandTaskState_t;
damian2340 1:6e9b9cc2c375 20
damian2340 1:6e9b9cc2c375 21 typedef struct{
damian2340 1:6e9b9cc2c375 22 uint8_t msgBuffer[rxBuffersize];
damian2340 1:6e9b9cc2c375 23 int menssageLength;
damian2340 1:6e9b9cc2c375 24 uint8_t effect;
damian2340 1:6e9b9cc2c375 25 }CommandMsg;
damian2340 1:6e9b9cc2c375 26
damian2340 1:6e9b9cc2c375 27 /* function prototype */
damian2340 1:6e9b9cc2c375 28 void serialComCallback(int e);
damian2340 1:6e9b9cc2c375 29
damian2340 1:6e9b9cc2c375 30 /* Globals */
damian2340 0:644da2e23ddc 31 Serial pc(USBTX, USBRX, 9600); // tx, rx
damian2340 0:644da2e23ddc 32
damian2340 1:6e9b9cc2c375 33 uint8_t CommandsReady = 0;
damian2340 1:6e9b9cc2c375 34 CommandMsg command[comSize];
damian2340 1:6e9b9cc2c375 35 CommandTaskState_t comState = comUnInit;
damian2340 1:6e9b9cc2c375 36
damian2340 1:6e9b9cc2c375 37 uint8_t rxbuffer[rxBuffersize] = "TODO OK! ";
damian2340 1:6e9b9cc2c375 38 int mensageLength = rxBuffersize;
damian2340 1:6e9b9cc2c375 39
damian2340 1:6e9b9cc2c375 40
damian2340 1:6e9b9cc2c375 41 /* Interrupt Callbacks */
damian2340 1:6e9b9cc2c375 42 void serialComCallback(int e){
damian2340 1:6e9b9cc2c375 43 if(comState != comUnInit)
damian2340 1:6e9b9cc2c375 44 comState = comNewDataRecived;
damian2340 1:6e9b9cc2c375 45 }
damian2340 1:6e9b9cc2c375 46
damian2340 1:6e9b9cc2c375 47 void commandTask(){
damian2340 1:6e9b9cc2c375 48 switch(comState){
damian2340 1:6e9b9cc2c375 49 case comUnInit:
damian2340 1:6e9b9cc2c375 50 for(int i = 0 ; i < comSize ; i++){
damian2340 3:ab372258bd50 51 memset( command[i].msgBuffer, 0, rxBuffersize );
damian2340 1:6e9b9cc2c375 52 command[i].menssageLength = 0;
damian2340 1:6e9b9cc2c375 53 command[i].effect = 0;
damian2340 1:6e9b9cc2c375 54 }
damian2340 3:ab372258bd50 55 pc.printf("Limpuando Buffers\n");
damian2340 1:6e9b9cc2c375 56 comState = comInactive;
damian2340 1:6e9b9cc2c375 57 break;
damian2340 1:6e9b9cc2c375 58 case comInactive:
damian2340 3:ab372258bd50 59
damian2340 1:6e9b9cc2c375 60 pc.read((uint8_t*)(command[CommandsReady].msgBuffer), 1, (const event_callback_t)serialComCallback, SERIAL_EVENT_RX_COMPLETE, '\n');
damian2340 1:6e9b9cc2c375 61 comState = comWaiting;
damian2340 3:ab372258bd50 62 pc.printf("iniciando Comunicacion\n");
damian2340 1:6e9b9cc2c375 63 break;
damian2340 1:6e9b9cc2c375 64 case comNewDataRecived:
damian2340 3:ab372258bd50 65
damian2340 1:6e9b9cc2c375 66 /* Si hay espacio libres para comandos */
damian2340 1:6e9b9cc2c375 67 if(CommandsReady < comSize){
damian2340 3:ab372258bd50 68 /* TODO : iterar esta identacion hasta que se encuentre el 0*/
damian2340 3:ab372258bd50 69 bool endOfData = false;
damian2340 3:ab372258bd50 70 do{
damian2340 3:ab372258bd50 71 /* Revisar si llego un fin de linea o si se lleno el buffer*/
damian2340 3:ab372258bd50 72 if( // command[CommandsReady].msgBuffer[command[CommandsReady].menssageLength] == 0 || // esto no es fin de linea, es fin de datos en el buffer de entrada
damian2340 3:ab372258bd50 73 command[CommandsReady].msgBuffer[command[CommandsReady].menssageLength] == 10 ||
damian2340 3:ab372258bd50 74 command[CommandsReady].msgBuffer[command[CommandsReady].menssageLength] == 12 ||
damian2340 3:ab372258bd50 75 command[CommandsReady].menssageLength >= (rxBuffersize - 1) ){
damian2340 3:ab372258bd50 76 command[CommandsReady].msgBuffer[command[CommandsReady].menssageLength] = 0;
damian2340 3:ab372258bd50 77 pc.printf("fin de linea recivido\n");
damian2340 3:ab372258bd50 78 CommandsReady++;
damian2340 3:ab372258bd50 79 comState = comNewCommandRecived;
damian2340 3:ab372258bd50 80 endOfData = true;
damian2340 3:ab372258bd50 81 }
damian2340 3:ab372258bd50 82 else if(command[CommandsReady].msgBuffer[command[CommandsReady].menssageLength] == 0){
damian2340 3:ab372258bd50 83 endOfData = true;
damian2340 4:91c51d4191e4 84 comState = comWaiting;
damian2340 3:ab372258bd50 85 pc.read((uint8_t*)(&(command[CommandsReady].msgBuffer[command[CommandsReady].menssageLength])), 1, (const event_callback_t)serialComCallback, SERIAL_EVENT_RX_COMPLETE, '\n');
damian2340 3:ab372258bd50 86 }
damian2340 3:ab372258bd50 87 /* Si no llego un fin de linea y hay espacio, esperar por un nuevo caracter*/
damian2340 3:ab372258bd50 88 else{
damian2340 3:ab372258bd50 89 pc.printf("caracter recivido: %c\n",command[CommandsReady].msgBuffer[command[CommandsReady].menssageLength]);
damian2340 3:ab372258bd50 90 command[CommandsReady].menssageLength++;
damian2340 3:ab372258bd50 91 }
damian2340 4:91c51d4191e4 92 }while(endOfData == false);
damian2340 1:6e9b9cc2c375 93 }
damian2340 1:6e9b9cc2c375 94 else{
damian2340 1:6e9b9cc2c375 95 pc.printf("Demasiados Mensajes!. \n\rLimpie la memoria de mensages!\n\r");
damian2340 1:6e9b9cc2c375 96 comState = comWaiting;
damian2340 1:6e9b9cc2c375 97 }
damian2340 1:6e9b9cc2c375 98 break;
damian2340 1:6e9b9cc2c375 99 case comNewCommandRecived:
damian2340 1:6e9b9cc2c375 100 if(CommandsReady <= comSize){
damian2340 1:6e9b9cc2c375 101 pc.printf("Escribiendo: -%s-\n",command[CommandsReady-1].msgBuffer);
damian2340 1:6e9b9cc2c375 102 //TODO: procesar comandos;
damian2340 1:6e9b9cc2c375 103 switch(command[CommandsReady-1].msgBuffer[0]){
damian2340 1:6e9b9cc2c375 104 case 'T': break;
damian2340 1:6e9b9cc2c375 105 case 'M': break;
damian2340 1:6e9b9cc2c375 106 case 'E': break;
damian2340 1:6e9b9cc2c375 107 default:;
damian2340 1:6e9b9cc2c375 108 }
damian2340 1:6e9b9cc2c375 109 }
damian2340 1:6e9b9cc2c375 110 comState = comInactive;
damian2340 1:6e9b9cc2c375 111 break;
damian2340 1:6e9b9cc2c375 112 case comWaiting:
damian2340 1:6e9b9cc2c375 113 break;
damian2340 1:6e9b9cc2c375 114 default:;
damian2340 1:6e9b9cc2c375 115 }
damian2340 0:644da2e23ddc 116 }
damian2340 0:644da2e23ddc 117
damian2340 0:644da2e23ddc 118 int main()
damian2340 0:644da2e23ddc 119 {
damian2340 0:644da2e23ddc 120 matrixDisplay display = matrixDisplay( 0.05, PB_8, PB_9, PA_9, PA_8, PA_7, PA_6, PA_5, PC_7 );
damian2340 0:644da2e23ddc 121 display.setMessage((char*)rxbuffer, 10);
damian2340 0:644da2e23ddc 122 pc.printf("Cartelito!\n");
damian2340 0:644da2e23ddc 123 while (true){
damian2340 1:6e9b9cc2c375 124 commandTask();
damian2340 0:644da2e23ddc 125 }
damian2340 0:644da2e23ddc 126 }
damian2340 1:6e9b9cc2c375 127
damian2340 1:6e9b9cc2c375 128