Simple implementation of goal counter for table football using laser diode and phototransistor.

Dependencies:   GoalCounter WS2812 PixelArray

Committer:
nxf46245
Date:
Thu Jan 10 15:48:39 2019 +0000
Revision:
1:ffac56d434b3
Parent:
0:24f846b68c77
Child:
2:f04959a6fd61
Code refactoring

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxf46245 0:24f846b68c77 1 #include "mbed.h"
nxf46245 0:24f846b68c77 2 #include "WS2812.h"
nxf46245 0:24f846b68c77 3 #include "PixelArray.h"
nxf46245 0:24f846b68c77 4 #include "GoalCounter.h"
nxf46245 0:24f846b68c77 5
nxf46245 0:24f846b68c77 6 #define WS2812_BUF 10
nxf46245 0:24f846b68c77 7 #define NUM_COLORS 1
nxf46245 0:24f846b68c77 8 #define NUM_LEDS_PER_COLOR 2
nxf46245 0:24f846b68c77 9 #define COLOR 0x2f2020
nxf46245 0:24f846b68c77 10
nxf46245 1:ffac56d434b3 11 // Initialize instace of a pixel array for LED strip 1 ar 2
nxf46245 1:ffac56d434b3 12 PixelArray px1(WS2812_BUF);
nxf46245 1:ffac56d434b3 13 PixelArray px2(WS2812_BUF);
nxf46245 0:24f846b68c77 14
nxf46245 1:ffac56d434b3 15 // The given numbers are calculated for the K64F MCU
nxf46245 1:ffac56d434b3 16 WS2812 ws1(D4, WS2812_BUF, 0, 5, 5, 0);
nxf46245 1:ffac56d434b3 17 WS2812 ws2(D4, WS2812_BUF, 0, 5, 5, 0);
nxf46245 0:24f846b68c77 18
nxf46245 1:ffac56d434b3 19 // Initialize instances of GoalCounter classes for counting goals
nxf46245 1:ffac56d434b3 20 GoalCounter gc1(D2);
nxf46245 1:ffac56d434b3 21 GoalCounter gc2(D3);
nxf46245 1:ffac56d434b3 22
nxf46245 1:ffac56d434b3 23 // Initialize instances of Ticker classes for handling goal counters
nxf46245 1:ffac56d434b3 24 Ticker bank1;
nxf46245 1:ffac56d434b3 25 Ticker bank2;
nxf46245 1:ffac56d434b3 26
nxf46245 1:ffac56d434b3 27 // For debug use
nxf46245 0:24f846b68c77 28 Serial pc(USBTX, USBRX);
nxf46245 1:ffac56d434b3 29
nxf46245 0:24f846b68c77 30 float balltime = 0;
nxf46245 0:24f846b68c77 31 float speed = 0;
nxf46245 1:ffac56d434b3 32
nxf46245 0:24f846b68c77 33 uint8_t score_1 = 0;
nxf46245 1:ffac56d434b3 34 uint8_t score_2 = 0;
nxf46245 1:ffac56d434b3 35
nxf46245 1:ffac56d434b3 36 void set_score(uint8_t score, PixelArray px, WS2812 ws) {
nxf46245 1:ffac56d434b3 37 for (int i=0; i < score; i++) {
nxf46245 1:ffac56d434b3 38 px.Set(i, COLOR);
nxf46245 1:ffac56d434b3 39 }
nxf46245 1:ffac56d434b3 40 for (int i = score; i <= 10; i++) {
nxf46245 1:ffac56d434b3 41 px.Set(i, 0);
nxf46245 1:ffac56d434b3 42 }
nxf46245 1:ffac56d434b3 43
nxf46245 1:ffac56d434b3 44 px.SetAllI(0x0f);
nxf46245 1:ffac56d434b3 45 ws.write(px.getBuf());
nxf46245 0:24f846b68c77 46 }
nxf46245 1:ffac56d434b3 47
nxf46245 1:ffac56d434b3 48 void print_info() {
nxf46245 1:ffac56d434b3 49 if (gc1.goal) {
nxf46245 1:ffac56d434b3 50 score_1 = gc1.get_score();
nxf46245 1:ffac56d434b3 51 balltime = gc1.get_balltime();
nxf46245 1:ffac56d434b3 52 speed = gc1.get_ballspeed();
nxf46245 1:ffac56d434b3 53 pc.printf("Score : %d \n\r", score_1);
nxf46245 1:ffac56d434b3 54 pc.printf("Time of ball pass : %f seconds\n\r", balltime);
nxf46245 1:ffac56d434b3 55 pc.printf("Speed of ball (34 mm diameter) : %f kph\n\r", speed);
nxf46245 1:ffac56d434b3 56 gc1.goal = 0;
nxf46245 1:ffac56d434b3 57 }
nxf46245 1:ffac56d434b3 58 }
nxf46245 0:24f846b68c77 59
nxf46245 0:24f846b68c77 60 int main()
nxf46245 0:24f846b68c77 61 {
nxf46245 1:ffac56d434b3 62
nxf46245 1:ffac56d434b3 63 ws1.useII(WS2812::GLOBAL); // use global intensity scaling
nxf46245 1:ffac56d434b3 64 ws2.useII(WS2812::GLOBAL); // use global intensity scaling
nxf46245 0:24f846b68c77 65
nxf46245 1:ffac56d434b3 66 // Attach Ticker to functions
nxf46245 1:ffac56d434b3 67
nxf46245 1:ffac56d434b3 68 // bank1.attach(&print_info, 0.5);
nxf46245 1:ffac56d434b3 69 // bank2.attach(&print_info, 0.5);
nxf46245 0:24f846b68c77 70
nxf46245 0:24f846b68c77 71 while(1) {
nxf46245 1:ffac56d434b3 72 print_info();
nxf46245 1:ffac56d434b3 73 wait(0.5);
nxf46245 0:24f846b68c77 74 }
nxf46245 0:24f846b68c77 75 }