Buffered Test

Dependencies:   ExioBufferdController MCP23S17 mbed-rtos mbed

Committer:
ryood
Date:
Fri Jan 06 04:34:43 2017 +0000
Revision:
13:219ff2cfa3c3
Parent:
11:325c5e9d28e2
for BaseMachine ExioBoard;

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