Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- true
- Date:
- 2015-09-25
- Revision:
- 2:f12658f35bbd
- Parent:
- 1:58e2c02413aa
- Child:
- 3:d072d2d7f043
File content as of revision 2:f12658f35bbd:
#include "mbed.h" //------------------------------------ // 9600 baud, 8-bit data, no parity //------------------------------------ #define BYTEBINPATTERN "%d%d%d%d%d%d%d%d" #define BYTETOBIN(byte) \ (byte & 0x80 ? 1 : 0), \ (byte & 0x40 ? 1 : 0), \ (byte & 0x20 ? 1 : 0), \ (byte & 0x10 ? 1 : 0), \ (byte & 0x08 ? 1 : 0), \ (byte & 0x04 ? 1 : 0), \ (byte & 0x02 ? 1 : 0), \ (byte & 0x01 ? 1 : 0) Serial ser(SERIAL_TX, SERIAL_RX); DigitalIn in[16] = { PB_12, PA_11, PA_12, PC_5, PC_6, PC_8, PC_9, PB_8, PB_9, PA_6, PA_7, PB_6, PC_7, PA_9, PA_8, PB_10 }; DigitalInOut out[16] = { PD_2, PC_11, PC_10, PC_12, PH_0, PH_1, PC_2, PC_3, PC_0, PC_1, PB_0, PA_4, PA_1, PA_0, PB_3, PB_5 }; DigitalOut userled(LED1); //------------------------------------ void input_state_print() { ser.printf("i"); for (int i = 0; i < 16; i++) { ser.printf("%c", in[i] ? 0x31 : 0x30); } ser.printf("\r\n"); } void setup(void) { RCC_OscInitTypeDef RCC_OscInitStruct; HAL_RCC_DeInit(); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; HAL_RCC_OscConfig(&RCC_OscInitStruct); // HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); SystemCoreClockUpdate(); }; int main() { setup(); // reinitialize the serial port since the clock changed Serial ser(SERIAL_TX, SERIAL_RX); ser.baud(9600); // initialize the input ticker Ticker input_autoprint; ser.printf("\r\ntrue Nucleo IOReg for dwangoAC v0.1\r\n"); ser.printf("Running at %d Hz\r\n", SystemCoreClock); ser.printf("Use command \"i\" to print input pin state\r\n"); ser.printf("Use command \"oXX\" to set outputs where XX is raw 16bit value\r\n"); ser.printf(" 1 = short pin to GND, 0 = HiZ pin\r\n"); while (1) { if (ser.readable()) { switch (ser.getc()) { case 'i': { input_state_print(); break; } case 'I': { // automatically send input from 0.1 to 9.9 seconds uint8_t rate0 = ser.getc(); uint8_t rate1 = ser.getc(); if (rate0 >= 0x30 && rate0 <= 0x39) { rate0 -= 0x30; if (rate1 >= 0x30 && rate1 <= 0x39) { rate1 -= 0x30; uint8_t rate = (rate0 * 10) + rate1; if (rate == 0) { input_autoprint.detach(); } else { input_autoprint.attach(&input_state_print, 0.1 * rate); } } } break; } case 'o': { uint8_t bh = ser.getc(); uint8_t bl = ser.getc(); // set light confirming command receipt userled = 1; // we can give feedback to our program what is being set printf("o"BYTEBINPATTERN BYTEBINPATTERN"\r\n", BYTETOBIN(bh), BYTETOBIN(bl)); // actually set pins = 1 sets active low, 0 sets hiz uint16_t bits = bh << 8 | bl; for (int i = 0; i < 16; i++) { if (bits & (1 << i)) { // active low output out[i] = 0; out[i].output(); } else { // hi-z input out[i].input(); } } // wait a moment, unset light wait(0.2); userled = 0; break; } } } } }