Marcos Perez
/
cartel
matrix de led
main.cpp@4:91c51d4191e4, 2017-05-25 (annotated)
- 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?
User | Revision | Line number | New 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 |