Simple implementation of goal counter for table football using laser diode and phototransistor.
Dependencies: GoalCounter WS2812 PixelArray
Diff: main.cpp
- Revision:
- 4:5a11a84fac69
- Parent:
- 3:d74c47d2e933
- Child:
- 5:95cb2348af01
--- a/main.cpp Sat Jan 12 18:50:49 2019 +0000 +++ b/main.cpp Sun Jan 13 14:23:30 2019 +0000 @@ -6,39 +6,30 @@ #define WS2812_BUF 10 #define NUM_COLORS 1 #define NUM_LEDS_PER_COLOR 2 -#define COLOR 0x2f2020 +//#define COLOR 0x2f2020 #define DEBUG 1 -#define MBED_CONF_PLATFORM_FORCE_NON_COPYABLE_ERROR 0 - //Initialize instances of Timers -//Timer t1; +Timer timer1; //Timer t2; // Initialize instace of a pixel array for LED strip 1 ar 2 PixelArray px1(WS2812_BUF); -PixelArray px2(WS2812_BUF); +//PixelArray px2(WS2812_BUF); // The given numbers are calculated for the K64F MCU WS2812 ws1(D4, WS2812_BUF, 0, 5, 5, 0); -WS2812 ws2(D5, WS2812_BUF, 0, 5, 5, 0); +//WS2812 ws2(D5, WS2812_BUF, 0, 5, 5, 0); -// Initialize interrupt classes -//InterruptIn i1(D2); -//InterruptIn i2(D3); -// Initialize instances of GoalCounter classes for counting goals -//GoalCounter gc1(D2, i1); -//GoalCounter gc2(D3, i2); +// For debug use +Serial pc(USBTX, USBRX); -GoalCounter gc(D2, D3); +GoalCounter gc(D2, &timer1); // Initialize instances of Ticker classes for handling goal counters //Ticker bank1; //Ticker bank2; -// For debug use -Serial pc(USBTX, USBRX); - float balltime1 = 0; float speed1 = 0; @@ -48,16 +39,15 @@ uint8_t score1 = 0; uint8_t score2 = 0; -void set_score(uint8_t score, PixelArray px, WS2812 ws) { +void set_score(uint8_t score, PixelArray * px, WS2812 * ws) { + px->SetAll(0); + for (int i=0; i < score; i++) { - px.Set(i, COLOR); - } - for (int i = score; i <= 10; i++) { - px.Set(i, 0); + px->Set(i, 0x2f2020); } - px.SetAllI(0x0f); - ws.write(px.getBuf()); + px->SetAllI(0x0f); + ws->write(px->getBuf()); } void print_score(uint8_t score, float balltime, float speed) { @@ -66,36 +56,43 @@ pc.printf("Speed of ball (34 mm diameter) : %f kph\n\r", speed); } -void get_info(uint8_t * score, float * balltime, float * speed, GoalCounter gc) { - *score = gc.get_score(); - *balltime = gc.get_balltime(); - *speed = gc.get_ballspeed(); - gc.is_goal1 = 0; +void get_info(uint8_t * score, float * balltime, float * speed, GoalCounter * gc) { + *score = gc->get_score(); + *balltime = gc->get_balltime(); + *speed = gc->get_ballspeed(); } + int main() { ws1.useII(WS2812::GLOBAL); // use global intensity scaling - ws2.useII(WS2812::GLOBAL); // use global intensity scaling - - // Attach Ticker to functions - -// bank1.attach(&print_info, 0.5); -// bank2.attach(&print_info, 0.5); - +// ws2.useII(WS2812::GLOBAL); // use global intensity scaling + + pc.printf("Initialization... \n\r"); while(1) { - if (gc.is_goal1) { - get_info(&score1, &balltime1, &speed1, gc); - set_score(score1, px1, ws1); - if (DEBUG) - print_score(score1, balltime1, speed1); + if (gc.is_goal == 1) { + get_info(&score1, &balltime1, &speed1, &gc); + set_score(score1, &px1, &ws1); +// score1 = gc.get_score(); +// balltime1 = gc.get_balltime(); +// speed1 = gc.get_ballspeed(); +// pc.printf("Score : %d \n\r", score1); +// pc.printf("Time of ball pass : %f seconds\n\r", balltime1); +// pc.printf("Speed of ball (34 mm diameter) : %f kph\n\r", speed1); + print_score(score1, balltime1, speed1); + gc.is_goal = 0; } -// else if (gc2.is_goal) { -// get_info(&score2, &balltime2, &speed2, gc2); -// set_score(score2, px2, ws2); -// if (DEBUG) -// print_score(score2, balltime2, speed2); -// } + if (score1 >= 10) { + pc.printf("Game over \n\r"); + for (int i=1; i<= 10; i++) { + pc.printf("Game score: \n\r"); + balltime1 = gc.get_balltime(i); + speed1 = gc.get_ballspeed(i); + print_score(i, balltime1, speed1); + } + return 0; + } + } }