diff --git a/.vscode/.cortex-debug.registers.state.json b/.vscode/.cortex-debug.registers.state.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/.vscode/.cortex-debug.registers.state.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/simSpeedoArduino.ino b/simSpeedoArduino.ino index f52ebfd..56713cc 100644 --- a/simSpeedoArduino.ino +++ b/simSpeedoArduino.ino @@ -1,17 +1,52 @@ +#include //for screen +#include //for screen +#include "Adafruit_LEDBackpack.h" //for screen +#include + #define outArrSize 100 +#define DISPLAY_ADDRESS 0x70 //I2C address of screen +#define SCREEN_BRIGHTNESS 15 + +//vars for serial communication String incomingData; char outData[outArrSize]; +//vars for screen +Adafruit_AlphaNum4 disp = Adafruit_AlphaNum4(); + + void setup() { + //serial setup Serial.begin(115200); Serial.println("ready for Data:\n"); + //setup screen + Wire.setSCL(17); + Wire.setSDA(16); + disp.begin(DISPLAY_ADDRESS); + disp.setBrightness(SCREEN_BRIGHTNESS); } void loop() { if (Serial.available() > 0) { + disp.clear(); incomingData = Serial.readStringUntil(':'); - incomingData.toCharArray(outData, outArrSize); - Serial.write(outData); + float speed = incomingData.toFloat(); + int temp = speed * 10; + //int temp = rand(); + if (temp < 10) { temp = 0; } // show 0 when stopped and not noise. + int digit0 = temp / 1000; + int digit1 = (temp / 100) - (digit0 * 10); + int digit2 = (temp / 10) - (digit0 * 100) - (digit1 * 10); + int digit3 = temp - (digit0 * 1000) - (digit1 * 100) - (digit2 * 10); + if (speed > 100) { //dont show leading 0 if going under 100km/h + disp.writeDigitAscii(0, 48 + digit0); + } + if (speed > 10) { //dont show 10s digit if less then 10km/h + disp.writeDigitAscii(1, 48 + digit1); + } + disp.writeDigitAscii(2, 48 + digit2, true); + disp.writeDigitAscii(3, 48 + digit3); + disp.writeDisplay(); } }