Test CAN bus on Stm32F746nG

Dependencies:   F746_GUI mbed CANMsg

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?

UserRevisionLine numberNew 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 */