Buffered Test

Dependencies:   ExioBufferdController MCP23S17 mbed-rtos mbed

Committer:
ryood
Date:
Sat Nov 05 00:04:17 2016 +0000
Revision:
11:325c5e9d28e2
Parent:
10:5d1a09afe152
Child:
13:219ff2cfa3c3
Add: RotaryEncoder in All Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:7578a6b316b7 1 /*
ryood 0:7578a6b316b7 2 * ExioBufferdController Test
ryood 0:7578a6b316b7 3 *
ryood 0:7578a6b316b7 4 * mbed: revison 121
ryood 0:7578a6b316b7 5 * mbed-rtos: revision 117
ryood 0:7578a6b316b7 6 *
ryood 0:7578a6b316b7 7 * Created: 2016.11.05
ryood 0:7578a6b316b7 8 *
ryood 0:7578a6b316b7 9 */
ryood 0:7578a6b316b7 10
ryood 0:7578a6b316b7 11 #include "mbed.h"
ryood 0:7578a6b316b7 12 #include "rtos.h"
ryood 0:7578a6b316b7 13
ryood 0:7578a6b316b7 14 #include "ExioMcp23s17.h"
ryood 0:7578a6b316b7 15 #include "ExioInBuffer.h"
ryood 3:ee7fd89f2539 16 #include "ExioBufferedIn.h"
ryood 6:9acaeb5465d2 17 #include "ExioBufferedDebounceIn.h"
ryood 8:d511db400a09 18 #include "ExioBufferedPinDetect.h"
ryood 5:526691f54026 19 #include "ExioBufferedRotaryEncoder.h"
ryood 0:7578a6b316b7 20
ryood 0:7578a6b316b7 21 SPI Spi(PC_12, PC_11, PC_10); // SPI3: mosi, miso, sclk
ryood 0:7578a6b316b7 22 //SPI Spi(PA_7, PA_6, PA_5); // SPI1: mosi, miso, sclk
ryood 0:7578a6b316b7 23
ryood 0:7578a6b316b7 24 // MExioMcp23s17(int hardwareaddress, SPI& spi, PinName nCs, PinName nReset);
ryood 0:7578a6b316b7 25 ExioMcp23s17 Exio(0x00, Spi, PD_2, PA_13);
ryood 0:7578a6b316b7 26
ryood 10:5d1a09afe152 27 bool state = false;
ryood 10:5d1a09afe152 28 uint8_t count = 0;
ryood 10:5d1a09afe152 29
ryood 10:5d1a09afe152 30 //------------------------------------------------------------------------------
ryood 10:5d1a09afe152 31 // Callback functions
ryood 10:5d1a09afe152 32 //
ryood 10:5d1a09afe152 33 void pa6Falled() {
ryood 10:5d1a09afe152 34 state = !state;
ryood 10:5d1a09afe152 35 }
ryood 10:5d1a09afe152 36
ryood 10:5d1a09afe152 37 void pa7Falled() {
ryood 10:5d1a09afe152 38 count++;
ryood 10:5d1a09afe152 39 }
ryood 10:5d1a09afe152 40
ryood 10:5d1a09afe152 41
ryood 10:5d1a09afe152 42 //------------------------------------------------------------------------------
ryood 10:5d1a09afe152 43 // Test functions
ryood 10:5d1a09afe152 44 //
ryood 0:7578a6b316b7 45 void testExioInBuffer()
ryood 0:7578a6b316b7 46 {
ryood 0:7578a6b316b7 47 printf("*** Test ExioInBuffer ***\r\n");
ryood 0:7578a6b316b7 48
ryood 2:0a339555ddf6 49 // Reset MCP23S17 (初期化時にreset()が必要)
ryood 0:7578a6b316b7 50 Exio.reset();
ryood 0:7578a6b316b7 51
ryood 3:ee7fd89f2539 52 ExioInBuffer exioInBufferA(&Exio, ExioPortA);
ryood 3:ee7fd89f2539 53 ExioInBuffer exioInBufferB(&Exio, ExioPortB);
ryood 0:7578a6b316b7 54
ryood 3:ee7fd89f2539 55 exioInBufferA.run(1);
ryood 3:ee7fd89f2539 56 exioInBufferB.run(1);
ryood 0:7578a6b316b7 57
ryood 0:7578a6b316b7 58 while (true) {
ryood 2:0a339555ddf6 59 uint8_t va = exioInBufferA.readPort();
ryood 2:0a339555ddf6 60 uint8_t vb = exioInBufferB.readPort();
ryood 2:0a339555ddf6 61
ryood 2:0a339555ddf6 62 printf("%d %d\r\n", va, vb);
ryood 0:7578a6b316b7 63 //Thread::wait(10);
ryood 0:7578a6b316b7 64 }
ryood 0:7578a6b316b7 65 }
ryood 4:20ee7612edb9 66
ryood 3:ee7fd89f2539 67 void testExioBufferedIn()
ryood 3:ee7fd89f2539 68 {
ryood 3:ee7fd89f2539 69 printf("*** Test ExioBuffedIn ***\r\n");
ryood 3:ee7fd89f2539 70
ryood 3:ee7fd89f2539 71 // Reset MCP23S17 (初期化時にreset()が必要)
ryood 3:ee7fd89f2539 72 Exio.reset();
ryood 3:ee7fd89f2539 73
ryood 4:20ee7612edb9 74 ExioInBuffer inBufferA(&Exio, ExioPortA);
ryood 4:20ee7612edb9 75 ExioBufferedIn inA[] = {
ryood 4:20ee7612edb9 76 ExioBufferedIn(&inBufferA, 0),
ryood 4:20ee7612edb9 77 ExioBufferedIn(&inBufferA, 1),
ryood 4:20ee7612edb9 78 ExioBufferedIn(&inBufferA, 2),
ryood 4:20ee7612edb9 79 ExioBufferedIn(&inBufferA, 3),
ryood 4:20ee7612edb9 80 ExioBufferedIn(&inBufferA, 4),
ryood 4:20ee7612edb9 81 ExioBufferedIn(&inBufferA, 5),
ryood 4:20ee7612edb9 82 ExioBufferedIn(&inBufferA, 6),
ryood 4:20ee7612edb9 83 ExioBufferedIn(&inBufferA, 7)
ryood 4:20ee7612edb9 84 };
ryood 4:20ee7612edb9 85
ryood 4:20ee7612edb9 86 ExioInBuffer inBufferB(&Exio, ExioPortB);
ryood 3:ee7fd89f2539 87 ExioBufferedIn inB[] = {
ryood 3:ee7fd89f2539 88 ExioBufferedIn(&inBufferB, 0),
ryood 3:ee7fd89f2539 89 ExioBufferedIn(&inBufferB, 1),
ryood 3:ee7fd89f2539 90 ExioBufferedIn(&inBufferB, 2),
ryood 3:ee7fd89f2539 91 ExioBufferedIn(&inBufferB, 3),
ryood 3:ee7fd89f2539 92 ExioBufferedIn(&inBufferB, 4),
ryood 3:ee7fd89f2539 93 ExioBufferedIn(&inBufferB, 5),
ryood 3:ee7fd89f2539 94 ExioBufferedIn(&inBufferB, 6),
ryood 3:ee7fd89f2539 95 ExioBufferedIn(&inBufferB, 7)
ryood 3:ee7fd89f2539 96 };
ryood 3:ee7fd89f2539 97
ryood 4:20ee7612edb9 98 inBufferA.run(10);
ryood 4:20ee7612edb9 99 inBufferB.run(10);
ryood 3:ee7fd89f2539 100
ryood 3:ee7fd89f2539 101 while (true) {
ryood 3:ee7fd89f2539 102 for (int i = 0; i < 8; i++) {
ryood 4:20ee7612edb9 103 int va = inA[i].read();
ryood 4:20ee7612edb9 104 printf("%d ", va);
ryood 4:20ee7612edb9 105 }
ryood 4:20ee7612edb9 106 putchar(' ');
ryood 4:20ee7612edb9 107 for (int i = 0; i < 8; i++) {
ryood 4:20ee7612edb9 108 int vb = inB[i].read();
ryood 4:20ee7612edb9 109 printf("%d ", vb);
ryood 3:ee7fd89f2539 110 }
ryood 3:ee7fd89f2539 111 printf("\r\n");
ryood 3:ee7fd89f2539 112 //Thread::wait(10);
ryood 3:ee7fd89f2539 113 }
ryood 3:ee7fd89f2539 114 }
ryood 4:20ee7612edb9 115
ryood 6:9acaeb5465d2 116 void testExioBufferedDebounceIn()
ryood 6:9acaeb5465d2 117 {
ryood 6:9acaeb5465d2 118 printf("*** Test ExioBuffeDebounceIn ***\r\n");
ryood 6:9acaeb5465d2 119
ryood 6:9acaeb5465d2 120 // Reset MCP23S17 (初期化時にreset()が必要)
ryood 6:9acaeb5465d2 121 Exio.reset();
ryood 6:9acaeb5465d2 122
ryood 6:9acaeb5465d2 123 ExioInBuffer inBufferA(&Exio, ExioPortA);
ryood 6:9acaeb5465d2 124 ExioBufferedDebounceIn inA[] = {
ryood 6:9acaeb5465d2 125 ExioBufferedDebounceIn(&inBufferA, 0),
ryood 6:9acaeb5465d2 126 ExioBufferedDebounceIn(&inBufferA, 1),
ryood 6:9acaeb5465d2 127 ExioBufferedDebounceIn(&inBufferA, 2),
ryood 6:9acaeb5465d2 128 ExioBufferedDebounceIn(&inBufferA, 3),
ryood 6:9acaeb5465d2 129 ExioBufferedDebounceIn(&inBufferA, 4),
ryood 6:9acaeb5465d2 130 ExioBufferedDebounceIn(&inBufferA, 5),
ryood 6:9acaeb5465d2 131 ExioBufferedDebounceIn(&inBufferA, 6),
ryood 6:9acaeb5465d2 132 ExioBufferedDebounceIn(&inBufferA, 7)
ryood 6:9acaeb5465d2 133 };
ryood 6:9acaeb5465d2 134
ryood 6:9acaeb5465d2 135 ExioInBuffer inBufferB(&Exio, ExioPortB);
ryood 6:9acaeb5465d2 136 ExioBufferedIn inB[] = {
ryood 6:9acaeb5465d2 137 ExioBufferedDebounceIn(&inBufferB, 0),
ryood 6:9acaeb5465d2 138 ExioBufferedDebounceIn(&inBufferB, 1),
ryood 6:9acaeb5465d2 139 ExioBufferedDebounceIn(&inBufferB, 2),
ryood 6:9acaeb5465d2 140 ExioBufferedDebounceIn(&inBufferB, 3),
ryood 6:9acaeb5465d2 141 ExioBufferedDebounceIn(&inBufferB, 4),
ryood 6:9acaeb5465d2 142 ExioBufferedDebounceIn(&inBufferB, 5),
ryood 6:9acaeb5465d2 143 ExioBufferedDebounceIn(&inBufferB, 6),
ryood 6:9acaeb5465d2 144 ExioBufferedDebounceIn(&inBufferB, 7)
ryood 6:9acaeb5465d2 145 };
ryood 6:9acaeb5465d2 146
ryood 6:9acaeb5465d2 147 // Start Timers
ryood 6:9acaeb5465d2 148 inBufferA.run(10);
ryood 6:9acaeb5465d2 149 inBufferB.run(10);
ryood 6:9acaeb5465d2 150 for (int i = 0; i < 8; i++) {
ryood 6:9acaeb5465d2 151 inA[i].set_debounce_us(10000);
ryood 6:9acaeb5465d2 152 inA[i].set_debounce_us(10000);
ryood 6:9acaeb5465d2 153 }
ryood 6:9acaeb5465d2 154
ryood 6:9acaeb5465d2 155 while (true) {
ryood 6:9acaeb5465d2 156 for (int i = 0; i < 8; i++) {
ryood 6:9acaeb5465d2 157 int va = inA[i].read();
ryood 6:9acaeb5465d2 158 printf("%d ", va);
ryood 6:9acaeb5465d2 159 }
ryood 6:9acaeb5465d2 160 putchar(' ');
ryood 6:9acaeb5465d2 161 for (int i = 0; i < 8; i++) {
ryood 6:9acaeb5465d2 162 int vb = inB[i].read();
ryood 6:9acaeb5465d2 163 printf("%d ", vb);
ryood 6:9acaeb5465d2 164 }
ryood 6:9acaeb5465d2 165 printf("\r\n");
ryood 6:9acaeb5465d2 166 //Thread::wait(10);
ryood 6:9acaeb5465d2 167 }
ryood 6:9acaeb5465d2 168 }
ryood 6:9acaeb5465d2 169
ryood 8:d511db400a09 170 void testExioBufferedPinDetect()
ryood 8:d511db400a09 171 {
ryood 8:d511db400a09 172 printf("*** Test ExioBufferedPinDetect ***\r\n");
ryood 8:d511db400a09 173
ryood 8:d511db400a09 174 // Reset MCP23S17 (初期化時にreset()が必要)
ryood 8:d511db400a09 175 Exio.reset();
ryood 8:d511db400a09 176
ryood 8:d511db400a09 177 ExioInBuffer inBufferA(&Exio, ExioPortA);
ryood 9:76d17c5cac87 178 ExioBufferedPinDetect pinA6(&inBufferA, 6);
ryood 8:d511db400a09 179 ExioBufferedPinDetect pinA7(&inBufferA, 7);
ryood 8:d511db400a09 180
ryood 8:d511db400a09 181 // assign callback functions
ryood 9:76d17c5cac87 182 pinA6.attach_asserted(&pa6Falled);
ryood 9:76d17c5cac87 183 pinA6.setAssertValue(0);
ryood 8:d511db400a09 184 pinA7.attach_asserted(&pa7Falled);
ryood 8:d511db400a09 185 pinA7.setAssertValue(0);
ryood 8:d511db400a09 186
ryood 8:d511db400a09 187 // Start Timers
ryood 8:d511db400a09 188 inBufferA.run(5);
ryood 9:76d17c5cac87 189 pinA6.setSampleFrequency(10000);
ryood 8:d511db400a09 190 pinA7.setSampleFrequency(10000);
ryood 8:d511db400a09 191
ryood 8:d511db400a09 192 while (true) {
ryood 9:76d17c5cac87 193 printf("%d %d\r\n", state, count);
ryood 8:d511db400a09 194 }
ryood 8:d511db400a09 195 }
ryood 8:d511db400a09 196
ryood 5:526691f54026 197 void testExioBufferedRotaryEncoder()
ryood 5:526691f54026 198 {
ryood 5:526691f54026 199 printf("*** Test ExioBufferedRotaryEncoder ***\r\n");
ryood 5:526691f54026 200
ryood 5:526691f54026 201 // Reset MCP23S17 (初期化時にreset()が必要)
ryood 5:526691f54026 202 Exio.reset();
ryood 5:526691f54026 203
ryood 5:526691f54026 204 ExioInBuffer inBufferA(&Exio, ExioPortA);
ryood 5:526691f54026 205 ExioBufferedRotaryEncoder re1(&inBufferA, 0, 1);
ryood 5:526691f54026 206
ryood 5:526691f54026 207 // Start Timers
ryood 5:526691f54026 208 inBufferA.run(5);
ryood 5:526691f54026 209 re1.setInterval(1000);
ryood 5:526691f54026 210
ryood 5:526691f54026 211 while (true) {
ryood 5:526691f54026 212 int v = re1.getVal();
ryood 5:526691f54026 213 printf("%d\r\n", v);
ryood 5:526691f54026 214 }
ryood 5:526691f54026 215 }
ryood 5:526691f54026 216
ryood 0:7578a6b316b7 217 int main()
ryood 0:7578a6b316b7 218 {
ryood 4:20ee7612edb9 219 //testExioInBuffer();
ryood 5:526691f54026 220 //testExioBufferedIn();
ryood 7:7a17d81db52f 221 //testExioBufferedDebounceIn();
ryood 6:9acaeb5465d2 222 //testExioBufferedRotaryEncoder();
ryood 10:5d1a09afe152 223 //testExioBufferedPinDetect();
ryood 7:7a17d81db52f 224
ryood 7:7a17d81db52f 225 printf("*** Test ExioBufferedContoroller ***\r\n");
ryood 7:7a17d81db52f 226
ryood 7:7a17d81db52f 227 // Reset MCP23S17 (初期化時にreset()が必要)
ryood 7:7a17d81db52f 228 Exio.reset();
ryood 11:325c5e9d28e2 229
ryood 11:325c5e9d28e2 230 // ExioInBuffer
ryood 11:325c5e9d28e2 231 ExioInBuffer inBufferA(&Exio, ExioPortA);
ryood 11:325c5e9d28e2 232 ExioInBuffer inBufferB(&Exio, ExioPortB);
ryood 11:325c5e9d28e2 233
ryood 10:5d1a09afe152 234 // PinDetect
ryood 10:5d1a09afe152 235 ExioBufferedPinDetect pinA6(&inBufferA, 6);
ryood 10:5d1a09afe152 236 ExioBufferedPinDetect pinA7(&inBufferA, 7);
ryood 7:7a17d81db52f 237
ryood 10:5d1a09afe152 238 // assign callback functions
ryood 10:5d1a09afe152 239 pinA6.attach_asserted(&pa6Falled);
ryood 10:5d1a09afe152 240 pinA6.setAssertValue(0);
ryood 10:5d1a09afe152 241 pinA7.attach_asserted(&pa7Falled);
ryood 10:5d1a09afe152 242 pinA7.setAssertValue(0);
ryood 7:7a17d81db52f 243
ryood 10:5d1a09afe152 244 // DebounceIn
ryood 11:325c5e9d28e2 245 ExioBufferedDebounceIn pinA4(&inBufferA, 4);
ryood 11:325c5e9d28e2 246 ExioBufferedDebounceIn pinA5(&inBufferA, 5);
ryood 11:325c5e9d28e2 247
ryood 10:5d1a09afe152 248 ExioBufferedDebounceIn inB[] = {
ryood 10:5d1a09afe152 249 ExioBufferedDebounceIn(&inBufferB, 0),
ryood 10:5d1a09afe152 250 ExioBufferedDebounceIn(&inBufferB, 1),
ryood 10:5d1a09afe152 251 ExioBufferedDebounceIn(&inBufferB, 2),
ryood 10:5d1a09afe152 252 ExioBufferedDebounceIn(&inBufferB, 3),
ryood 10:5d1a09afe152 253 ExioBufferedDebounceIn(&inBufferB, 4),
ryood 10:5d1a09afe152 254 ExioBufferedDebounceIn(&inBufferB, 5),
ryood 10:5d1a09afe152 255 ExioBufferedDebounceIn(&inBufferB, 6),
ryood 10:5d1a09afe152 256 ExioBufferedDebounceIn(&inBufferB, 7)
ryood 10:5d1a09afe152 257 };
ryood 10:5d1a09afe152 258
ryood 11:325c5e9d28e2 259 // Rotary Encoder
ryood 11:325c5e9d28e2 260 ExioBufferedRotaryEncoder re1(&inBufferA, 0, 1);
ryood 11:325c5e9d28e2 261 ExioBufferedRotaryEncoder re2(&inBufferA, 2, 3);
ryood 11:325c5e9d28e2 262
ryood 10:5d1a09afe152 263 // Start Timers for polling MCP23S17
ryood 7:7a17d81db52f 264 inBufferA.run(5);
ryood 10:5d1a09afe152 265 inBufferB.run(10);
ryood 10:5d1a09afe152 266
ryood 10:5d1a09afe152 267 // Start Timers for PinDetect
ryood 10:5d1a09afe152 268 pinA6.setSampleFrequency(10000);
ryood 10:5d1a09afe152 269 pinA7.setSampleFrequency(10000);
ryood 10:5d1a09afe152 270
ryood 10:5d1a09afe152 271 // Start Timers for DebounceIn
ryood 11:325c5e9d28e2 272 pinA4.set_debounce_us(10000);
ryood 11:325c5e9d28e2 273 pinA5.set_debounce_us(10000);
ryood 10:5d1a09afe152 274 for (int i = 0; i < 8; i++) {
ryood 10:5d1a09afe152 275 inB[i].set_debounce_us(10000);
ryood 10:5d1a09afe152 276 }
ryood 11:325c5e9d28e2 277
ryood 11:325c5e9d28e2 278 // Start Timers for RotaryEncoder
ryood 11:325c5e9d28e2 279 re1.setInterval(1000);
ryood 11:325c5e9d28e2 280 re2.setInterval(1000);
ryood 7:7a17d81db52f 281
ryood 7:7a17d81db52f 282 while(true) {
ryood 11:325c5e9d28e2 283 int va4 = pinA4.read();
ryood 11:325c5e9d28e2 284 int va5 = pinA5.read();
ryood 11:325c5e9d28e2 285 int vre1 = re1.getVal();
ryood 11:325c5e9d28e2 286 int vre2 = re2.getVal();
ryood 11:325c5e9d28e2 287 printf(" A4:%d A5:%d state:%d count:%d RE1:%d RE2:%d ", va4, va5, state, count, vre1, vre2);
ryood 10:5d1a09afe152 288 for (int i = 0; i < 8; i++) {
ryood 11:325c5e9d28e2 289 int vb = inB[i].read();
ryood 11:325c5e9d28e2 290 printf("%d ", vb);
ryood 7:7a17d81db52f 291 }
ryood 11:325c5e9d28e2 292 printf("\r\n");
ryood 7:7a17d81db52f 293 }
ryood 11:325c5e9d28e2 294 }