Simple implementation of goal counter for table football using laser diode and phototransistor.
Dependencies: GoalCounter WS2812 PixelArray
Diff: main.cpp
- Revision:
- 1:ffac56d434b3
- Parent:
- 0:24f846b68c77
- Child:
- 2:f04959a6fd61
--- a/main.cpp Thu Jan 10 14:48:03 2019 +0000 +++ b/main.cpp Thu Jan 10 15:48:39 2019 +0000 @@ -8,90 +8,68 @@ #define NUM_LEDS_PER_COLOR 2 #define COLOR 0x2f2020 -// Initialize instace of a pixel array for LED strip -PixelArray px(WS2812_BUF); +// Initialize instace of a pixel array for LED strip 1 ar 2 +PixelArray px1(WS2812_BUF); +PixelArray px2(WS2812_BUF); -// The given numbers are for the K64F MCU -WS2812 ws(D4, WS2812_BUF, 0, 5, 5, 0); -GoalCounter gc(D2); +// The given numbers are calculated for the K64F MCU +WS2812 ws1(D4, WS2812_BUF, 0, 5, 5, 0); +WS2812 ws2(D4, WS2812_BUF, 0, 5, 5, 0); -//// Detector for the -//InterruptIn detector1(D3); -//InterruptIn detector2(D2); -// -//DigitalOut led1(LED1); -//DigitalOut led2(LED2); -// -//Timer t; +// Initialize instances of GoalCounter classes for counting goals +GoalCounter gc1(D2); +GoalCounter gc2(D3); + +// Initialize instances of Ticker classes for handling goal counters +Ticker bank1; +Ticker bank2; + +// For debug use Serial pc(USBTX, USBRX); -// + float balltime = 0; float speed = 0; + uint8_t score_1 = 0; -// -void print_time() { - pc.printf("The time taken was %f microseconds\n", balltime); +uint8_t score_2 = 0; + +void set_score(uint8_t score, PixelArray px, WS2812 ws) { + for (int i=0; i < score; i++) { + px.Set(i, COLOR); + } + for (int i = score; i <= 10; i++) { + px.Set(i, 0); + } + + px.SetAllI(0x0f); + ws.write(px.getBuf()); } -// -//void tstart() { -// t.start(); -//} -// -//void tstop() { -// t.stop(); -// balltime = t.read(); -// t.reset(); -//} -// -//void set_score(uint8_t score) { -// for (int i=0; i < score; i++) { -// px.Set(i, COLOR); -// } -// for (int i = score; i <= 10; i++) { -// px.Set(i, 0); -// } -// -// px.SetAllI(0x0f); -//// ws.write_offsets(px.getBuf(),0,0,0); -// ws.write(px.getBuf()); -//} + +void print_info() { + if (gc1.goal) { + score_1 = gc1.get_score(); + balltime = gc1.get_balltime(); + speed = gc1.get_ballspeed(); + pc.printf("Score : %d \n\r", score_1); + pc.printf("Time of ball pass : %f seconds\n\r", balltime); + pc.printf("Speed of ball (34 mm diameter) : %f kph\n\r", speed); + gc1.goal = 0; + } + } int main() { - // Optional: set mode as PullUp/PullDown/PullNone/OpenDrain - //mypin.mode(PullNone); -// -// detector1.fall(&tstart); -// detector2.rise(&tstop); + + ws1.useII(WS2812::GLOBAL); // use global intensity scaling + ws2.useII(WS2812::GLOBAL); // use global intensity scaling - ws.useII(WS2812::GLOBAL); // use global intensity scaling + // Attach Ticker to functions + +// bank1.attach(&print_info, 0.5); +// bank2.attach(&print_info, 0.5); while(1) { - - // if (balltime != 0) { -// pc.printf("Time of ball pass : %f seconds\n\r", balltime); -// float speed = 0.035/balltime*3.6; -// pc.printf("Speed of ball (3.5 cm diameter) : %f kph\n\r", speed); -// -// score_1++; -// -// if (score_1 > 10) -// score_1 = 0; -// -// set_score(score_1); -// balltime = 0; -// } -// -// led1 = detector1; // toggle led based on value of the pin - - if (gc.goal) { - score_1 = gc.get_score(); - balltime = gc.get_balltime(); - speed = gc.get_ballspeed(); - pc.printf("Score : %d \n\r", score_1); - pc.printf("Time of ball pass : %f seconds\n\r", balltime); - pc.printf("Speed of ball (34 mm diameter) : %f kph\n\r", speed); - gc.goal = 0; - } + print_info(); + wait(0.5); } }