#include "mbed.h"

DigitalOut digit[] = {PTE30, PTB20, PTE23, PTE22}; // 0 = zap
DigitalOut seg[] = {PTE20, PTE6, PTE16, PTE17, PTE18, PTE19, PTE31, PTE21}; // 1 = zap

DigitalOut trig(PTC1);
DigitalIn echo(PTC2);

Ticker sensor;

int score = 1234;
int ascore[4] = {0,0,0,0};

void segupdate() {
    int number = score;
    for(int i = 3; i>=0; i--) {
        ascore[i] = number % 10;
        number /= 10;
    }
    //seg display
    for(int i=0; i<4; i++) {
        wait_ms(1);
        for(int j=0; j<4; j++) {
            digit[j] = 1;
        }
        digit[i] = 0;
        if(ascore[i] == 0) {
                seg[0] = 1;
                seg[1] = 1;
                seg[2] = 1;
                seg[3] = 1;
                seg[4] = 1;
                seg[5] = 1;
                seg[6] = 0;
                seg[7] = 0;
            }
            if(ascore[i] == 1) {
                seg[0] = 0;
                seg[1] = 1;
                seg[2] = 1;
                seg[3] = 0;
                seg[4] = 0;
                seg[5] = 0;
                seg[6] = 0;
                seg[7] = 0;
            }
            if(ascore[i] == 2) {
                seg[0] = 1;
                seg[1] = 1;
                seg[2] = 0;
                seg[3] = 1;
                seg[4] = 1;
                seg[5] = 0;
                seg[6] = 1;
                seg[7] = 0;
            }
            if(ascore[i] == 3) {
                seg[0] = 1;
                seg[1] = 1;
                seg[2] = 1;
                seg[3] = 1;
                seg[4] = 0;
                seg[5] = 0;
                seg[6] = 1;
                seg[7] = 0;
            }
            if(ascore[i] == 4) {
                seg[0] = 0;
                seg[1] = 1;
                seg[2] = 1;
                seg[3] = 0;
                seg[4] = 0;
                seg[5] = 1;
                seg[6] = 1;
                seg[7] = 0;
            }
            if(ascore[i] == 5) {
                seg[0] = 1;
                seg[1] = 0;
                seg[2] = 1;
                seg[3] = 1;
                seg[4] = 0;
                seg[5] = 1;
                seg[6] = 1;
                seg[7] = 0;
            }
            if(ascore[i] == 6) {
                seg[0] = 1;
                seg[1] = 0;
                seg[2] = 1;
                seg[3] = 1;
                seg[4] = 1;
                seg[5] = 1;
                seg[6] = 1;
                seg[7] = 0;
            }
            if(ascore[i] == 7) {
                seg[0] = 1;
                seg[1] = 1;
                seg[2] = 1;
                seg[3] = 0;
                seg[4] = 0;
                seg[5] = 0;
                seg[6] = 0;
                seg[7] = 0;
            }
            if(ascore[i] == 8) {
                seg[0] = 1;
                seg[1] = 1;
                seg[2] = 1;
                seg[3] = 1;
                seg[4] = 1;
                seg[5] = 1;
                seg[6] = 1;
                seg[7] = 0;
            }
            if(ascore[i] == 9) {
                seg[0] = 1;
                seg[1] = 1;
                seg[2] = 1;
                seg[3] = 1;
                seg[4] = 0;
                seg[5] = 1;
                seg[6] = 1;
                seg[7] = 0;
            }
            if(i==2) seg[7] = 1;
        }   
}

void ultrasonic() {
    trig = 1;
    wait_us(10);
    trig = 0;
    for(int i=0; i<27000; i++) {
        if(echo) break;
        else wait_us(1);
    }
    double time = 0;
    while(echo) {
        time += 0.000001;
        if(time >= 0.01) break;
        wait_us(1);
    }
    if(time >= 0.01) score = 9999;
    else score = int(time*170*4800);
}

int main() {
    trig = 0;
    sensor.attach(&ultrasonic, 0.2);
    while (true) {
        segupdate();
    }
}