Test CAN bus on Stm32F746nG
Dependencies: F746_GUI mbed CANMsg
main.cpp@0:77e62347e7c9, 2020-08-06 (annotated)
- Committer:
- 38domo
- Date:
- Thu Aug 06 14:21:20 2020 +0000
- Revision:
- 0:77e62347e7c9
- Child:
- 1:68083f9dd39d
test can bus on stm32f746ng
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
38domo | 0:77e62347e7c9 | 1 | /* |
38domo | 0:77e62347e7c9 | 2 | programme test sur carte stm32F746ng-discovery |
38domo | 0:77e62347e7c9 | 3 | |
38domo | 0:77e62347e7c9 | 4 | update 30/07/2019 : display datas on lcd ok |
38domo | 0:77e62347e7c9 | 5 | update 29/07/2020 : send can ok ( after received), receive can ok |
38domo | 0:77e62347e7c9 | 6 | update 29/07/2020 : remove touch screen |
38domo | 0:77e62347e7c9 | 7 | update 28/07/2020 : add serial and CAN |
38domo | 0:77e62347e7c9 | 8 | update 21/07/2020 : test buttons |
38domo | 0:77e62347e7c9 | 9 | update 20/07/2020 : display buttons |
38domo | 0:77e62347e7c9 | 10 | update 17/07/2020 GC : change colors |
38domo | 0:77e62347e7c9 | 11 | */ |
38domo | 0:77e62347e7c9 | 12 | |
38domo | 0:77e62347e7c9 | 13 | #include "mbed.h" |
38domo | 0:77e62347e7c9 | 14 | #include "stm32746g_discovery_lcd.h" |
38domo | 0:77e62347e7c9 | 15 | #include "stm32746g_discovery_ts.h" |
38domo | 0:77e62347e7c9 | 16 | #include <string> |
38domo | 0:77e62347e7c9 | 17 | #include "CANMsg.h" |
38domo | 0:77e62347e7c9 | 18 | #include <stdio.h> |
38domo | 0:77e62347e7c9 | 19 | #include <errno.h> |
38domo | 0:77e62347e7c9 | 20 | |
38domo | 0:77e62347e7c9 | 21 | // serial port sur connecteur arduino (D0,D1)-------------------- |
38domo | 0:77e62347e7c9 | 22 | Serial serial2(PC_6, PC_7); // TX, RX for udp bridge |
38domo | 0:77e62347e7c9 | 23 | Serial pc(USBTX, USBRX); // serial on usb connector |
38domo | 0:77e62347e7c9 | 24 | // CAN ------------------------------------------------------------ |
38domo | 0:77e62347e7c9 | 25 | CAN can(PB_8, PB_9); // CAN Rx pin name, CAN Tx pin name |
38domo | 0:77e62347e7c9 | 26 | CANMsg rxMsg; |
38domo | 0:77e62347e7c9 | 27 | CANMsg txMsg; |
38domo | 0:77e62347e7c9 | 28 | |
38domo | 0:77e62347e7c9 | 29 | uint8_t counter = 0; |
38domo | 0:77e62347e7c9 | 30 | float voltage; |
38domo | 0:77e62347e7c9 | 31 | Timer timer; |
38domo | 0:77e62347e7c9 | 32 | volatile bool msgAvailable = false; |
38domo | 0:77e62347e7c9 | 33 | AnalogIn analogIn(A0); |
38domo | 0:77e62347e7c9 | 34 | CircularBuffer<char, 1024> rxbuf; // PC receiving Buffer |
38domo | 0:77e62347e7c9 | 35 | uint8_t text2[30]; |
38domo | 0:77e62347e7c9 | 36 | char s2; |
38domo | 0:77e62347e7c9 | 37 | char buffer[128]; |
38domo | 0:77e62347e7c9 | 38 | #define LED_PIN PC_13 |
38domo | 0:77e62347e7c9 | 39 | DigitalOut led(LED_PIN); |
38domo | 0:77e62347e7c9 | 40 | |
38domo | 0:77e62347e7c9 | 41 | //#define TARGET_STM32F103C8T6 1 // uncomment this line to use STM32F103C8T6 boards |
38domo | 0:77e62347e7c9 | 42 | #define BOARD1 1 // comment out this line when compiling for board #2 |
38domo | 0:77e62347e7c9 | 43 | #if defined(BOARD1) |
38domo | 0:77e62347e7c9 | 44 | const unsigned int RX_ID = 0x100; |
38domo | 0:77e62347e7c9 | 45 | const unsigned int TX_ID = 0x101; |
38domo | 0:77e62347e7c9 | 46 | #else |
38domo | 0:77e62347e7c9 | 47 | const unsigned int RX_ID = 0x101; |
38domo | 0:77e62347e7c9 | 48 | const unsigned int TX_ID = 0x100; |
38domo | 0:77e62347e7c9 | 49 | #endif |
38domo | 0:77e62347e7c9 | 50 | |
38domo | 0:77e62347e7c9 | 51 | /** |
38domo | 0:77e62347e7c9 | 52 | * @brief Prints CAN message to PC's serial terminal |
38domo | 0:77e62347e7c9 | 53 | * @param CANMessage to print |
38domo | 0:77e62347e7c9 | 54 | */ |
38domo | 0:77e62347e7c9 | 55 | void printMsg(CANMessage& msg, int dir) |
38domo | 0:77e62347e7c9 | 56 | { if (dir ==0) |
38domo | 0:77e62347e7c9 | 57 | { BSP_LCD_DisplayStringAt(0, LINE(6), (uint8_t *)"Message sent ", LEFT_MODE); |
38domo | 0:77e62347e7c9 | 58 | } |
38domo | 0:77e62347e7c9 | 59 | else |
38domo | 0:77e62347e7c9 | 60 | { BSP_LCD_DisplayStringAt(0, LINE(6), (uint8_t *)"Message received", LEFT_MODE); |
38domo | 0:77e62347e7c9 | 61 | } |
38domo | 0:77e62347e7c9 | 62 | pc.printf(" ID = 0x%.3x\r\n", msg.id); |
38domo | 0:77e62347e7c9 | 63 | pc.printf(" Type = %d\r\n", msg.type); |
38domo | 0:77e62347e7c9 | 64 | pc.printf(" Format = %d\r\n", msg.format); |
38domo | 0:77e62347e7c9 | 65 | pc.printf(" Length = %d\r\n", msg.len); |
38domo | 0:77e62347e7c9 | 66 | pc.printf(" Data ="); |
38domo | 0:77e62347e7c9 | 67 | for(int i = 0; i < msg.len; i++) |
38domo | 0:77e62347e7c9 | 68 | pc.printf(" 0x%.2X", msg.data[i]); |
38domo | 0:77e62347e7c9 | 69 | pc.printf("\r\n"); |
38domo | 0:77e62347e7c9 | 70 | |
38domo | 0:77e62347e7c9 | 71 | sprintf((char*)text2, "ID: %d", msg.id); |
38domo | 0:77e62347e7c9 | 72 | BSP_LCD_DisplayStringAt(2, LINE(7), (uint8_t *)&text2, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 73 | sprintf((char*)text2, "Type: %d", msg.type); |
38domo | 0:77e62347e7c9 | 74 | BSP_LCD_DisplayStringAt(2, LINE(8), (uint8_t *)&text2, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 75 | sprintf((char*)text2, "Format: %d", msg.format); |
38domo | 0:77e62347e7c9 | 76 | BSP_LCD_DisplayStringAt(2, LINE(9), (uint8_t *)&text2, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 77 | sprintf((char*)text2, "Length: %d", msg.len); |
38domo | 0:77e62347e7c9 | 78 | BSP_LCD_DisplayStringAt(2, LINE(10), (uint8_t *)&text2, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 79 | sprintf((char*)text2, "Data: %d", msg.data[0]); |
38domo | 0:77e62347e7c9 | 80 | BSP_LCD_DisplayStringAt(2, LINE(11), (uint8_t *)&text2, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 81 | } |
38domo | 0:77e62347e7c9 | 82 | |
38domo | 0:77e62347e7c9 | 83 | /** |
38domo | 0:77e62347e7c9 | 84 | * @brief Handles received CAN messages |
38domo | 0:77e62347e7c9 | 85 | * @note Called on 'CAN message received' interrupt. |
38domo | 0:77e62347e7c9 | 86 | */ |
38domo | 0:77e62347e7c9 | 87 | void onCanReceived(void) |
38domo | 0:77e62347e7c9 | 88 | { can.read(rxMsg); |
38domo | 0:77e62347e7c9 | 89 | pc.printf("-------------------------------------\r\n"); |
38domo | 0:77e62347e7c9 | 90 | pc.printf("CAN message received\r\n"); |
38domo | 0:77e62347e7c9 | 91 | serial2.printf("CAN message received\r\n"); |
38domo | 0:77e62347e7c9 | 92 | BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"Can msg rec", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 93 | //BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)"-----------", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 94 | printMsg(rxMsg,1); |
38domo | 0:77e62347e7c9 | 95 | //serial2.printf("%d\n",rxMsg); |
38domo | 0:77e62347e7c9 | 96 | //serial2.printf("ID: "); |
38domo | 0:77e62347e7c9 | 97 | serial2.printf("ID: 0x%.3x ", rxMsg.id); |
38domo | 0:77e62347e7c9 | 98 | serial2.printf("D: "); |
38domo | 0:77e62347e7c9 | 99 | for(int i = 0; i < rxMsg.len; i++) |
38domo | 0:77e62347e7c9 | 100 | serial2.printf(" 0x%.2X", rxMsg.data[i]); |
38domo | 0:77e62347e7c9 | 101 | serial2.printf("\r\n"); |
38domo | 0:77e62347e7c9 | 102 | if (rxMsg.id == RX_ID) { |
38domo | 0:77e62347e7c9 | 103 | // extract data from the received CAN message |
38domo | 0:77e62347e7c9 | 104 | // in the same order as it was added on the transmitter side |
38domo | 0:77e62347e7c9 | 105 | rxMsg >> counter; |
38domo | 0:77e62347e7c9 | 106 | rxMsg >> voltage; |
38domo | 0:77e62347e7c9 | 107 | pc.printf(" counter = %d\r\n", counter); |
38domo | 0:77e62347e7c9 | 108 | pc.printf(" voltage = %e V\r\n", voltage); |
38domo | 0:77e62347e7c9 | 109 | } |
38domo | 0:77e62347e7c9 | 110 | timer.start(); // to transmit next message in main |
38domo | 0:77e62347e7c9 | 111 | } |
38domo | 0:77e62347e7c9 | 112 | |
38domo | 0:77e62347e7c9 | 113 | // ------------------------------------------------------------------------------------------------------ |
38domo | 0:77e62347e7c9 | 114 | int main() |
38domo | 0:77e62347e7c9 | 115 | { TS_StateTypeDef TS_State; |
38domo | 0:77e62347e7c9 | 116 | uint16_t x, y; |
38domo | 0:77e62347e7c9 | 117 | uint8_t text[30]; |
38domo | 0:77e62347e7c9 | 118 | uint8_t status; |
38domo | 0:77e62347e7c9 | 119 | uint8_t idx; |
38domo | 0:77e62347e7c9 | 120 | uint8_t cleared = 0; |
38domo | 0:77e62347e7c9 | 121 | uint8_t menu_level = 0; |
38domo | 0:77e62347e7c9 | 122 | uint8_t prev_nb_touches = 0; |
38domo | 0:77e62347e7c9 | 123 | uint8_t touche_appuyee = 99; |
38domo | 0:77e62347e7c9 | 124 | string touche_appuyee_s = "%"; |
38domo | 0:77e62347e7c9 | 125 | string text_display1 ("Memorisation Touches "); |
38domo | 0:77e62347e7c9 | 126 | char buffer_touche[50]; |
38domo | 0:77e62347e7c9 | 127 | // set serial speed |
38domo | 0:77e62347e7c9 | 128 | pc.baud(57600); |
38domo | 0:77e62347e7c9 | 129 | serial2.baud(57600); |
38domo | 0:77e62347e7c9 | 130 | // config can -------------------------------------- |
38domo | 0:77e62347e7c9 | 131 | //jpa can = new CAN(PB_8, PB_9); // CAN Rx pin name, CAN Tx pin name |
38domo | 0:77e62347e7c9 | 132 | can.frequency(125000); // set CAN bit rate to 125 kbps |
38domo | 0:77e62347e7c9 | 133 | //can.filter(RX_ID, 0xFFF, CANStandard, 0); // set filter #0 to accept only standard messages with ID == RX_ID |
38domo | 0:77e62347e7c9 | 134 | can.attach(onCanReceived); // attach ISR to handle received messages |
38domo | 0:77e62347e7c9 | 135 | //can->attach(&onMsgReceived); //msgAvailable = true; // attach the 'CAN receive-complete' interrupt service routine (ISR) |
38domo | 0:77e62347e7c9 | 136 | #if defined(BOARD1) |
38domo | 0:77e62347e7c9 | 137 | timer.start(); // start timer |
38domo | 0:77e62347e7c9 | 138 | pc.printf("CAN_Hello board #1\r\n"); |
38domo | 0:77e62347e7c9 | 139 | #else |
38domo | 0:77e62347e7c9 | 140 | pc.printf("CAN_Hello board #2\r\n"); |
38domo | 0:77e62347e7c9 | 141 | #endif |
38domo | 0:77e62347e7c9 | 142 | pc.printf("\nStart Prog\n"); |
38domo | 0:77e62347e7c9 | 143 | serial2.printf("\nStart Prog\n"); |
38domo | 0:77e62347e7c9 | 144 | BSP_LCD_Init(); |
38domo | 0:77e62347e7c9 | 145 | BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); |
38domo | 0:77e62347e7c9 | 146 | BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); |
38domo | 0:77e62347e7c9 | 147 | //BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 148 | //HAL_Delay(1000); |
38domo | 0:77e62347e7c9 | 149 | status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); |
38domo | 0:77e62347e7c9 | 150 | if (status != TS_OK) { |
38domo | 0:77e62347e7c9 | 151 | BSP_LCD_Clear(LCD_COLOR_RED); |
38domo | 0:77e62347e7c9 | 152 | BSP_LCD_SetBackColor(LCD_COLOR_RED); |
38domo | 0:77e62347e7c9 | 153 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
38domo | 0:77e62347e7c9 | 154 | BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 155 | } else { |
38domo | 0:77e62347e7c9 | 156 | BSP_LCD_Clear(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 157 | BSP_LCD_SetBackColor(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 158 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
38domo | 0:77e62347e7c9 | 159 | BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 160 | } |
38domo | 0:77e62347e7c9 | 161 | pc.printf("\nInit Display\n"); |
38domo | 0:77e62347e7c9 | 162 | HAL_Delay(1000); |
38domo | 0:77e62347e7c9 | 163 | BSP_LCD_Clear(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 164 | BSP_LCD_SetBackColor(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 165 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
38domo | 0:77e62347e7c9 | 166 | BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)"STM32F746 Disco Appli", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 167 | BSP_LCD_SetTextColor(LCD_COLOR_RED); |
38domo | 0:77e62347e7c9 | 168 | BSP_LCD_DrawRect(10, 100, 200, 50); |
38domo | 0:77e62347e7c9 | 169 | BSP_LCD_DrawRect(10, 180, 200, 50); |
38domo | 0:77e62347e7c9 | 170 | BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); |
38domo | 0:77e62347e7c9 | 171 | BSP_LCD_DisplayStringAt(25, LINE(5), (uint8_t *)"Setup", LEFT_MODE); |
38domo | 0:77e62347e7c9 | 172 | BSP_LCD_DisplayStringAt(25, 200, (uint8_t *)"Run", LEFT_MODE); |
38domo | 0:77e62347e7c9 | 173 | BSP_LCD_SetFont(&Font12); |
38domo | 0:77e62347e7c9 | 174 | |
38domo | 0:77e62347e7c9 | 175 | BSP_LCD_Clear(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 176 | BSP_LCD_SetBackColor(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 177 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
38domo | 0:77e62347e7c9 | 178 | BSP_LCD_SetFont(&Font16); |
38domo | 0:77e62347e7c9 | 179 | BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)"Mode Run", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 180 | |
38domo | 0:77e62347e7c9 | 181 | |
38domo | 0:77e62347e7c9 | 182 | //HAL_Delay(1000); |
38domo | 0:77e62347e7c9 | 183 | BSP_LCD_SetFont(&Font12); |
38domo | 0:77e62347e7c9 | 184 | BSP_LCD_SetBackColor(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 185 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
38domo | 0:77e62347e7c9 | 186 | |
38domo | 0:77e62347e7c9 | 187 | while(1) //menu_level == 1) |
38domo | 0:77e62347e7c9 | 188 | { // timer send can |
38domo | 0:77e62347e7c9 | 189 | if(timer.read_ms() >= 1000) // check for timeout |
38domo | 0:77e62347e7c9 | 190 | { timer.stop(); // stop the timer |
38domo | 0:77e62347e7c9 | 191 | timer.reset(); // reset the timer |
38domo | 0:77e62347e7c9 | 192 | counter++; // increment the counter |
38domo | 0:77e62347e7c9 | 193 | voltage = (analogIn * 3.3f)/4096.0f;// read the small drifting voltage from analog input |
38domo | 0:77e62347e7c9 | 194 | txMsg.clear(); // clear the Tx message storage |
38domo | 0:77e62347e7c9 | 195 | //txMsg.id = TX_ID; // set ID |
38domo | 0:77e62347e7c9 | 196 | txMsg.id = 0x18881001;//TX_ID; // set the message ID |
38domo | 0:77e62347e7c9 | 197 | txMsg.format = CANExtended ; //extended |
38domo | 0:77e62347e7c9 | 198 | // We are about to transmit two data items to the CAN bus. |
38domo | 0:77e62347e7c9 | 199 | // counter: uint_8 (unsigned eight bits int) value (one byte). |
38domo | 0:77e62347e7c9 | 200 | // voltage: floating point value (four bytes). |
38domo | 0:77e62347e7c9 | 201 | // So the total length of payload data is five bytes. |
38domo | 0:77e62347e7c9 | 202 | // We'll use the "<<" (append) operator to add data to the CAN message. |
38domo | 0:77e62347e7c9 | 203 | // The usage is same as of the similar C++ io-stream operators. |
38domo | 0:77e62347e7c9 | 204 | // NOTE: The data length of CAN message is automatically updated when using "<<" operators. |
38domo | 0:77e62347e7c9 | 205 | txMsg << counter << voltage; // append data (total data length must be <= 8 bytes!) |
38domo | 0:77e62347e7c9 | 206 | |
38domo | 0:77e62347e7c9 | 207 | if(can.write(txMsg)) // transmit message |
38domo | 0:77e62347e7c9 | 208 | { //if(can->write(txMsg)) { // transmit the CAN message |
38domo | 0:77e62347e7c9 | 209 | //led = OFF; // turn the LED off |
38domo | 0:77e62347e7c9 | 210 | pc.printf("-------------------------------------\r\n"); |
38domo | 0:77e62347e7c9 | 211 | pc.printf("CAN message sent\r\n"); |
38domo | 0:77e62347e7c9 | 212 | printMsg(txMsg,0); |
38domo | 0:77e62347e7c9 | 213 | pc.printf(" counter = %d\r\n", counter); |
38domo | 0:77e62347e7c9 | 214 | pc.printf(" voltage = %e V\r\n", voltage); |
38domo | 0:77e62347e7c9 | 215 | BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)"TX CAN OK", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 216 | BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)"--------", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 217 | } |
38domo | 0:77e62347e7c9 | 218 | else |
38domo | 0:77e62347e7c9 | 219 | { pc.printf("Transmission error\r\n"); |
38domo | 0:77e62347e7c9 | 220 | BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)"TX CAN Fail", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 221 | BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)"-----------", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 222 | } |
38domo | 0:77e62347e7c9 | 223 | //timer.start(); // insert transmission lag |
38domo | 0:77e62347e7c9 | 224 | } // end if timer |
38domo | 0:77e62347e7c9 | 225 | // read serial port |
38domo | 0:77e62347e7c9 | 226 | // get serial 2 |
38domo | 0:77e62347e7c9 | 227 | //serial2.gets(buffer, 4); |
38domo | 0:77e62347e7c9 | 228 | //pc.printf("I got '%s'\n", buffer); |
38domo | 0:77e62347e7c9 | 229 | char c = pc.getc(); |
38domo | 0:77e62347e7c9 | 230 | |
38domo | 0:77e62347e7c9 | 231 | if((c == 's') ) |
38domo | 0:77e62347e7c9 | 232 | { // send trame CAN |
38domo | 0:77e62347e7c9 | 233 | if(can.write(txMsg)) // transmit message |
38domo | 0:77e62347e7c9 | 234 | { //if(can->write(txMsg)) { // transmit the CAN message |
38domo | 0:77e62347e7c9 | 235 | //led = OFF; // turn the LED off |
38domo | 0:77e62347e7c9 | 236 | pc.printf("-------------------------------------\r\n"); |
38domo | 0:77e62347e7c9 | 237 | pc.printf("CAN message sent\r\n"); |
38domo | 0:77e62347e7c9 | 238 | printMsg(txMsg,0); |
38domo | 0:77e62347e7c9 | 239 | pc.printf(" counter = %d\r\n", counter); |
38domo | 0:77e62347e7c9 | 240 | pc.printf(" voltage = %e V\r\n", voltage); |
38domo | 0:77e62347e7c9 | 241 | BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)"TX CAN OK", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 242 | BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)"--------", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 243 | } |
38domo | 0:77e62347e7c9 | 244 | else |
38domo | 0:77e62347e7c9 | 245 | { pc.printf("Transmission error\r\n"); |
38domo | 0:77e62347e7c9 | 246 | BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)"TX CAN Fail", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 247 | BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)"-----------", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 248 | } |
38domo | 0:77e62347e7c9 | 249 | } |
38domo | 0:77e62347e7c9 | 250 | |
38domo | 0:77e62347e7c9 | 251 | char ser2 = serial2.getc(); |
38domo | 0:77e62347e7c9 | 252 | if( (ser2 = 's') ) |
38domo | 0:77e62347e7c9 | 253 | { // send trame CAN |
38domo | 0:77e62347e7c9 | 254 | if(can.write(txMsg)) // transmit message |
38domo | 0:77e62347e7c9 | 255 | { //if(can->write(txMsg)) { // transmit the CAN message |
38domo | 0:77e62347e7c9 | 256 | //led = OFF; // turn the LED off |
38domo | 0:77e62347e7c9 | 257 | pc.printf("-------------------------------------\r\n"); |
38domo | 0:77e62347e7c9 | 258 | pc.printf("CAN message sent\r\n"); |
38domo | 0:77e62347e7c9 | 259 | printMsg(txMsg,0); |
38domo | 0:77e62347e7c9 | 260 | pc.printf(" counter = %d\r\n", counter); |
38domo | 0:77e62347e7c9 | 261 | pc.printf(" voltage = %e V\r\n", voltage); |
38domo | 0:77e62347e7c9 | 262 | BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)"TX CAN OK", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 263 | BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)"--------", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 264 | } |
38domo | 0:77e62347e7c9 | 265 | else |
38domo | 0:77e62347e7c9 | 266 | { pc.printf("Transmission error\r\n"); |
38domo | 0:77e62347e7c9 | 267 | BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)"TX CAN Fail", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 268 | BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)"-----------", CENTER_MODE); |
38domo | 0:77e62347e7c9 | 269 | } |
38domo | 0:77e62347e7c9 | 270 | } |
38domo | 0:77e62347e7c9 | 271 | |
38domo | 0:77e62347e7c9 | 272 | // gestion touches appuyees |
38domo | 0:77e62347e7c9 | 273 | BSP_TS_GetState(&TS_State); |
38domo | 0:77e62347e7c9 | 274 | if (TS_State.touchDetected) { |
38domo | 0:77e62347e7c9 | 275 | // Clear lines corresponding to old touches coordinates |
38domo | 0:77e62347e7c9 | 276 | if (TS_State.touchDetected < prev_nb_touches) { |
38domo | 0:77e62347e7c9 | 277 | for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { |
38domo | 0:77e62347e7c9 | 278 | BSP_LCD_ClearStringLine(idx); |
38domo | 0:77e62347e7c9 | 279 | } |
38domo | 0:77e62347e7c9 | 280 | } |
38domo | 0:77e62347e7c9 | 281 | prev_nb_touches = TS_State.touchDetected; |
38domo | 0:77e62347e7c9 | 282 | cleared = 0; |
38domo | 0:77e62347e7c9 | 283 | sprintf((char*)text, "Touches: %d", TS_State.touchDetected); |
38domo | 0:77e62347e7c9 | 284 | BSP_LCD_DisplayStringAt(2, LINE(1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 285 | |
38domo | 0:77e62347e7c9 | 286 | for (idx = 0; idx < TS_State.touchDetected; idx++) { |
38domo | 0:77e62347e7c9 | 287 | x = TS_State.touchX[idx]; |
38domo | 0:77e62347e7c9 | 288 | y = TS_State.touchY[idx]; |
38domo | 0:77e62347e7c9 | 289 | sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y); |
38domo | 0:77e62347e7c9 | 290 | BSP_LCD_DisplayStringAt(2, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 291 | } |
38domo | 0:77e62347e7c9 | 292 | BSP_LCD_DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE); |
38domo | 0:77e62347e7c9 | 293 | |
38domo | 0:77e62347e7c9 | 294 | // rajouter test touche appuyée |
38domo | 0:77e62347e7c9 | 295 | if ((y>100)& (y<150)) |
38domo | 0:77e62347e7c9 | 296 | { // touches 0 a 5 appuyées |
38domo | 0:77e62347e7c9 | 297 | if ((x>10)&(x<60)) |
38domo | 0:77e62347e7c9 | 298 | { // touche 0 appuyée) |
38domo | 0:77e62347e7c9 | 299 | sprintf((char*)text, "Touche 0 appuyée"); |
38domo | 0:77e62347e7c9 | 300 | BSP_LCD_DisplayStringAt(2, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 301 | touche_appuyee = 0;touche_appuyee_s = "0"; |
38domo | 0:77e62347e7c9 | 302 | } |
38domo | 0:77e62347e7c9 | 303 | if ((x>90)&(x<130)) |
38domo | 0:77e62347e7c9 | 304 | { // touche 1 appuyée) |
38domo | 0:77e62347e7c9 | 305 | sprintf((char*)text, "Touche 1 appuyée"); |
38domo | 0:77e62347e7c9 | 306 | BSP_LCD_DisplayStringAt(2, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 307 | touche_appuyee = 1;touche_appuyee_s = "1"; |
38domo | 0:77e62347e7c9 | 308 | } |
38domo | 0:77e62347e7c9 | 309 | if ((x>180)&(x<230)) |
38domo | 0:77e62347e7c9 | 310 | { // touche 2 appuyée) |
38domo | 0:77e62347e7c9 | 311 | sprintf((char*)text, "Touche 2 appuyée"); |
38domo | 0:77e62347e7c9 | 312 | BSP_LCD_DisplayStringAt(2, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 313 | touche_appuyee = 2;touche_appuyee_s = "2"; |
38domo | 0:77e62347e7c9 | 314 | } |
38domo | 0:77e62347e7c9 | 315 | if ((x>260)&(x<310)) |
38domo | 0:77e62347e7c9 | 316 | { // touche 3 appuyée) |
38domo | 0:77e62347e7c9 | 317 | sprintf((char*)text, "Touche 3 appuyée"); |
38domo | 0:77e62347e7c9 | 318 | BSP_LCD_DisplayStringAt(2, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 319 | touche_appuyee = 3;touche_appuyee_s = "3"; |
38domo | 0:77e62347e7c9 | 320 | } |
38domo | 0:77e62347e7c9 | 321 | if ((x>340)&(x<390)) |
38domo | 0:77e62347e7c9 | 322 | { // touche 4 appuyée) |
38domo | 0:77e62347e7c9 | 323 | sprintf((char*)text, "Touche 4 appuyée"); |
38domo | 0:77e62347e7c9 | 324 | BSP_LCD_DisplayStringAt(2, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 325 | touche_appuyee = 4;touche_appuyee_s = "4"; |
38domo | 0:77e62347e7c9 | 326 | } |
38domo | 0:77e62347e7c9 | 327 | if ((x>420)&(x<470)) |
38domo | 0:77e62347e7c9 | 328 | { // touche 5 appuyée) |
38domo | 0:77e62347e7c9 | 329 | sprintf((char*)text, "Touche 5 appuyée"); |
38domo | 0:77e62347e7c9 | 330 | BSP_LCD_DisplayStringAt(2, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 331 | touche_appuyee = 5;touche_appuyee_s = "5"; |
38domo | 0:77e62347e7c9 | 332 | } |
38domo | 0:77e62347e7c9 | 333 | text_display1 = text_display1 + touche_appuyee_s; |
38domo | 0:77e62347e7c9 | 334 | sprintf(buffer_touche, "text_display1 %d", touche_appuyee); |
38domo | 0:77e62347e7c9 | 335 | BSP_LCD_DisplayStringAt(2, 3, (uint8_t *)&buffer_touche, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 336 | } |
38domo | 0:77e62347e7c9 | 337 | |
38domo | 0:77e62347e7c9 | 338 | } else { |
38domo | 0:77e62347e7c9 | 339 | if (!cleared) |
38domo | 0:77e62347e7c9 | 340 | { //BSP_LCD_Clear(LCD_COLOR_BLUE); |
38domo | 0:77e62347e7c9 | 341 | // sprintf((char*)text, "Touches: 0"); |
38domo | 0:77e62347e7c9 | 342 | // BSP_LCD_DisplayStringAt(2, LINE(2), (uint8_t *)&text, LEFT_MODE); |
38domo | 0:77e62347e7c9 | 343 | cleared = 1; |
38domo | 0:77e62347e7c9 | 344 | } |
38domo | 0:77e62347e7c9 | 345 | } |
38domo | 0:77e62347e7c9 | 346 | } |
38domo | 0:77e62347e7c9 | 347 | } |
38domo | 0:77e62347e7c9 | 348 | |
38domo | 0:77e62347e7c9 | 349 | //int main() { |
38domo | 0:77e62347e7c9 | 350 | // pc.printf("Hello World!\n\r"); |
38domo | 0:77e62347e7c9 | 351 | // while(1) { |
38domo | 0:77e62347e7c9 | 352 | // pc.putc(pc.getc() + 1); // echo input back to terminal |
38domo | 0:77e62347e7c9 | 353 | // }// |
38domo | 0:77e62347e7c9 | 354 | //} |
38domo | 0:77e62347e7c9 | 355 | /* |
38domo | 0:77e62347e7c9 | 356 | int main() { |
38domo | 0:77e62347e7c9 | 357 | while(1) { |
38domo | 0:77e62347e7c9 | 358 | if(pc.readable()) { |
38domo | 0:77e62347e7c9 | 359 | device.putc(pc.getc()); |
38domo | 0:77e62347e7c9 | 360 | } |
38domo | 0:77e62347e7c9 | 361 | if(device.readable()) { |
38domo | 0:77e62347e7c9 | 362 | pc.putc(device.getc()); |
38domo | 0:77e62347e7c9 | 363 | } |
38domo | 0:77e62347e7c9 | 364 | } |
38domo | 0:77e62347e7c9 | 365 | } |
38domo | 0:77e62347e7c9 | 366 | */ |
38domo | 0:77e62347e7c9 | 367 | /* |
38domo | 0:77e62347e7c9 | 368 | #include "mbed.h" |
38domo | 0:77e62347e7c9 | 369 | |
38domo | 0:77e62347e7c9 | 370 | Serial pc(USBTX, USBRX); // tx, rx |
38domo | 0:77e62347e7c9 | 371 | PwmOut led(LED1); |
38domo | 0:77e62347e7c9 | 372 | |
38domo | 0:77e62347e7c9 | 373 | float brightness = 0.0; |
38domo | 0:77e62347e7c9 | 374 | |
38domo | 0:77e62347e7c9 | 375 | int main() { |
38domo | 0:77e62347e7c9 | 376 | pc.printf("Press 'u' to turn LED1 brightness up, 'd' to turn it down\n"); |
38domo | 0:77e62347e7c9 | 377 | |
38domo | 0:77e62347e7c9 | 378 | while(1) { |
38domo | 0:77e62347e7c9 | 379 | char c = pc.getc(); |
38domo | 0:77e62347e7c9 | 380 | if((c == 'u') && (brightness < 0.5)) { |
38domo | 0:77e62347e7c9 | 381 | brightness += 0.01; |
38domo | 0:77e62347e7c9 | 382 | led = brightness; |
38domo | 0:77e62347e7c9 | 383 | } |
38domo | 0:77e62347e7c9 | 384 | if((c == 'd') && (brightness > 0.0)) { |
38domo | 0:77e62347e7c9 | 385 | brightness -= 0.01; |
38domo | 0:77e62347e7c9 | 386 | led = brightness; |
38domo | 0:77e62347e7c9 | 387 | } |
38domo | 0:77e62347e7c9 | 388 | |
38domo | 0:77e62347e7c9 | 389 | } |
38domo | 0:77e62347e7c9 | 390 | } |
38domo | 0:77e62347e7c9 | 391 | */ |
38domo | 0:77e62347e7c9 | 392 | /* |
38domo | 0:77e62347e7c9 | 393 | #include "mbed.h" |
38domo | 0:77e62347e7c9 | 394 | |
38domo | 0:77e62347e7c9 | 395 | Serial pc(USBTX, USBRX); |
38domo | 0:77e62347e7c9 | 396 | Serial uart(p28, p27); |
38domo | 0:77e62347e7c9 | 397 | |
38domo | 0:77e62347e7c9 | 398 | DigitalOut pc_activity(LED1); |
38domo | 0:77e62347e7c9 | 399 | DigitalOut uart_activity(LED2); |
38domo | 0:77e62347e7c9 | 400 | |
38domo | 0:77e62347e7c9 | 401 | int main() { |
38domo | 0:77e62347e7c9 | 402 | while(1) { |
38domo | 0:77e62347e7c9 | 403 | if(pc.readable()) { |
38domo | 0:77e62347e7c9 | 404 | uart.putc(pc.getc()); |
38domo | 0:77e62347e7c9 | 405 | pc_activity = !pc_activity; |
38domo | 0:77e62347e7c9 | 406 | } |
38domo | 0:77e62347e7c9 | 407 | if(uart.readable()) { |
38domo | 0:77e62347e7c9 | 408 | pc.putc(uart.getc()); |
38domo | 0:77e62347e7c9 | 409 | uart_activity = !uart_activity; |
38domo | 0:77e62347e7c9 | 410 | } |
38domo | 0:77e62347e7c9 | 411 | } |
38domo | 0:77e62347e7c9 | 412 | } |
38domo | 0:77e62347e7c9 | 413 | */ |
38domo | 0:77e62347e7c9 | 414 | /* |
38domo | 0:77e62347e7c9 | 415 | #include "mbed.h" |
38domo | 0:77e62347e7c9 | 416 | |
38domo | 0:77e62347e7c9 | 417 | DigitalOut myled(LED1); |
38domo | 0:77e62347e7c9 | 418 | Serial pc(USBTX, USBRX); |
38domo | 0:77e62347e7c9 | 419 | |
38domo | 0:77e62347e7c9 | 420 | int main() { |
38domo | 0:77e62347e7c9 | 421 | char c; |
38domo | 0:77e62347e7c9 | 422 | char buffer[128]; |
38domo | 0:77e62347e7c9 | 423 | |
38domo | 0:77e62347e7c9 | 424 | pc.gets(buffer, 4); |
38domo | 0:77e62347e7c9 | 425 | |
38domo | 0:77e62347e7c9 | 426 | pc.printf("I got '%s'\n", buffer); |
38domo | 0:77e62347e7c9 | 427 | } |
38domo | 0:77e62347e7c9 | 428 | */ |
38domo | 0:77e62347e7c9 | 429 | /* |
38domo | 0:77e62347e7c9 | 430 | sd card filesystem |
38domo | 0:77e62347e7c9 | 431 | /* Example file of using SD/MMC Block device Library for MBED-OS |
38domo | 0:77e62347e7c9 | 432 | * Copyright 2017 Roy Krikke |
38domo | 0:77e62347e7c9 | 433 | * Licensed under the Apache License, Version 2.0 (the "License"); |
38domo | 0:77e62347e7c9 | 434 | * you may not use this file except in compliance with the License. |
38domo | 0:77e62347e7c9 | 435 | * You may obtain a copy of the License at |
38domo | 0:77e62347e7c9 | 436 | * http://www.apache.org/licenses/LICENSE-2.0 |
38domo | 0:77e62347e7c9 | 437 | * Unless required by applicable law or agreed to in writing, software |
38domo | 0:77e62347e7c9 | 438 | * distributed under the License is distributed on an "AS IS" BASIS, |
38domo | 0:77e62347e7c9 | 439 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
38domo | 0:77e62347e7c9 | 440 | * See the License for the specific language governing permissions and |
38domo | 0:77e62347e7c9 | 441 | * limitations under the License. |
38domo | 0:77e62347e7c9 | 442 | |
38domo | 0:77e62347e7c9 | 443 | #include "mbed.h" |
38domo | 0:77e62347e7c9 | 444 | #include "FATFileSystem.h" |
38domo | 0:77e62347e7c9 | 445 | #include "SDBlockDeviceDISCOF746NG.h" |
38domo | 0:77e62347e7c9 | 446 | #include <stdio.h> |
38domo | 0:77e62347e7c9 | 447 | #include <errno.h> |
38domo | 0:77e62347e7c9 | 448 | |
38domo | 0:77e62347e7c9 | 449 | DigitalOut led (LED1); |
38domo | 0:77e62347e7c9 | 450 | |
38domo | 0:77e62347e7c9 | 451 | // Instantiate the Block Device for sd card on DISCO-F746NG |
38domo | 0:77e62347e7c9 | 452 | SDBlockDeviceDISCOF746NG bd; |
38domo | 0:77e62347e7c9 | 453 | FATFileSystem fs ("fs"); |
38domo | 0:77e62347e7c9 | 454 | |
38domo | 0:77e62347e7c9 | 455 | void |
38domo | 0:77e62347e7c9 | 456 | return_error (int ret_val) |
38domo | 0:77e62347e7c9 | 457 | { if(ret_val) |
38domo | 0:77e62347e7c9 | 458 | printf ("Failure. %d\r\n", ret_val); |
38domo | 0:77e62347e7c9 | 459 | else |
38domo | 0:77e62347e7c9 | 460 | printf ("done.\r\n"); |
38domo | 0:77e62347e7c9 | 461 | } |
38domo | 0:77e62347e7c9 | 462 | |
38domo | 0:77e62347e7c9 | 463 | void |
38domo | 0:77e62347e7c9 | 464 | errno_error (void* ret_val) |
38domo | 0:77e62347e7c9 | 465 | { if(ret_val == NULL) |
38domo | 0:77e62347e7c9 | 466 | printf (" Failure. %d \r\n", errno); |
38domo | 0:77e62347e7c9 | 467 | else |
38domo | 0:77e62347e7c9 | 468 | printf (" done.\r\n"); |
38domo | 0:77e62347e7c9 | 469 | } |
38domo | 0:77e62347e7c9 | 470 | |
38domo | 0:77e62347e7c9 | 471 | int |
38domo | 0:77e62347e7c9 | 472 | main () |
38domo | 0:77e62347e7c9 | 473 | { |
38domo | 0:77e62347e7c9 | 474 | Serial pc (SERIAL_TX, SERIAL_RX); |
38domo | 0:77e62347e7c9 | 475 | pc.baud(115200); |
38domo | 0:77e62347e7c9 | 476 | printf("Start\n"); |
38domo | 0:77e62347e7c9 | 477 | |
38domo | 0:77e62347e7c9 | 478 | int error = 0; |
38domo | 0:77e62347e7c9 | 479 | printf("Welcome to the filesystem example.\r\n" |
38domo | 0:77e62347e7c9 | 480 | "Formatting a FAT, RAM-backed filesystem. "); |
38domo | 0:77e62347e7c9 | 481 | error = FATFileSystem::format(&bd); |
38domo | 0:77e62347e7c9 | 482 | return_error(error); |
38domo | 0:77e62347e7c9 | 483 | |
38domo | 0:77e62347e7c9 | 484 | printf("Mounting the filesystem on \"/fs\". "); |
38domo | 0:77e62347e7c9 | 485 | error = fs.mount(&bd); |
38domo | 0:77e62347e7c9 | 486 | return_error(error); |
38domo | 0:77e62347e7c9 | 487 | |
38domo | 0:77e62347e7c9 | 488 | printf("Opening a new file, numbers.txt."); |
38domo | 0:77e62347e7c9 | 489 | FILE* fd = fopen("/fs/numbers.txt", "w"); |
38domo | 0:77e62347e7c9 | 490 | errno_error(fd); |
38domo | 0:77e62347e7c9 | 491 | |
38domo | 0:77e62347e7c9 | 492 | for (int i = 0; i < 20; i++) { |
38domo | 0:77e62347e7c9 | 493 | printf("Writing decimal numbers to a file (%d/20)\r", i); |
38domo | 0:77e62347e7c9 | 494 | fprintf(fd, "%d\r\n", i); |
38domo | 0:77e62347e7c9 | 495 | } |
38domo | 0:77e62347e7c9 | 496 | printf("Writing decimal numbers to a file (20/20) done.\r\n"); |
38domo | 0:77e62347e7c9 | 497 | |
38domo | 0:77e62347e7c9 | 498 | printf("Closing file."); |
38domo | 0:77e62347e7c9 | 499 | fclose(fd); |
38domo | 0:77e62347e7c9 | 500 | printf(" done.\r\n"); |
38domo | 0:77e62347e7c9 | 501 | |
38domo | 0:77e62347e7c9 | 502 | printf("Re-opening file read-only."); |
38domo | 0:77e62347e7c9 | 503 | fd = fopen("/fs/numbers.txt", "r"); |
38domo | 0:77e62347e7c9 | 504 | errno_error(fd); |
38domo | 0:77e62347e7c9 | 505 | |
38domo | 0:77e62347e7c9 | 506 | printf("Dumping file to screen.\r\n"); |
38domo | 0:77e62347e7c9 | 507 | char buff[16] = { 0 }; |
38domo | 0:77e62347e7c9 | 508 | while(!feof (fd)) { |
38domo | 0:77e62347e7c9 | 509 | int size = fread(&buff[0], 1, 15, fd); |
38domo | 0:77e62347e7c9 | 510 | fwrite(&buff[0], 1, size, stdout); |
38domo | 0:77e62347e7c9 | 511 | } |
38domo | 0:77e62347e7c9 | 512 | printf("EOF.\r\n"); |
38domo | 0:77e62347e7c9 | 513 | |
38domo | 0:77e62347e7c9 | 514 | printf("Closing file."); |
38domo | 0:77e62347e7c9 | 515 | fclose(fd); |
38domo | 0:77e62347e7c9 | 516 | printf(" done.\r\n"); |
38domo | 0:77e62347e7c9 | 517 | |
38domo | 0:77e62347e7c9 | 518 | printf("Opening root directory."); |
38domo | 0:77e62347e7c9 | 519 | DIR* dir = opendir("/fs/"); |
38domo | 0:77e62347e7c9 | 520 | errno_error(fd); |
38domo | 0:77e62347e7c9 | 521 | |
38domo | 0:77e62347e7c9 | 522 | struct dirent* de; |
38domo | 0:77e62347e7c9 | 523 | printf("Printing all filenames:\r\n"); |
38domo | 0:77e62347e7c9 | 524 | while((de = readdir (dir)) != NULL) { |
38domo | 0:77e62347e7c9 | 525 | printf(" %s\r\n", &(de->d_name)[0]); |
38domo | 0:77e62347e7c9 | 526 | } |
38domo | 0:77e62347e7c9 | 527 | |
38domo | 0:77e62347e7c9 | 528 | printf("Closeing root directory. "); |
38domo | 0:77e62347e7c9 | 529 | error = closedir(dir); |
38domo | 0:77e62347e7c9 | 530 | return_error(error); |
38domo | 0:77e62347e7c9 | 531 | printf("Filesystem Demo complete.\r\n"); |
38domo | 0:77e62347e7c9 | 532 | |
38domo | 0:77e62347e7c9 | 533 | // Blink led with 2 Hz |
38domo | 0:77e62347e7c9 | 534 | while(true) { |
38domo | 0:77e62347e7c9 | 535 | led = !led; |
38domo | 0:77e62347e7c9 | 536 | wait (0.5); |
38domo | 0:77e62347e7c9 | 537 | } |
38domo | 0:77e62347e7c9 | 538 | } |
38domo | 0:77e62347e7c9 | 539 | */ |