From 487b947f1e2ebc4d3bcd691c631076fe6d2e5b3b Mon Sep 17 00:00:00 2001 From: workinghard Date: Thu, 10 Nov 2016 21:28:02 -0800 Subject: [PATCH] init --- libraries/LTC4622G/LTC4622G.cpp | 208 ++++++++++++++++++ libraries/LTC4622G/LTC4622G.h | 62 ++++++ libraries/LTC4622G/examples/simple/simple.ino | 31 +++ libraries/LTC4622G/keywords.txt | 24 ++ 4 files changed, 325 insertions(+) create mode 100644 libraries/LTC4622G/LTC4622G.cpp create mode 100644 libraries/LTC4622G/LTC4622G.h create mode 100644 libraries/LTC4622G/examples/simple/simple.ino create mode 100644 libraries/LTC4622G/keywords.txt diff --git a/libraries/LTC4622G/LTC4622G.cpp b/libraries/LTC4622G/LTC4622G.cpp new file mode 100644 index 0000000..b231f2a --- /dev/null +++ b/libraries/LTC4622G/LTC4622G.cpp @@ -0,0 +1,208 @@ +/* + * LTC4622G Library for Arduino + * + * Created by Nikolai Rinas on 11/10/2016. + * Copyright (c) 2016 Nikolai Rinas. All rights reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#include "LTC4622G.h" + +// 89672345 +// Digit2 => A: 10000111 +// B: 10000100 +// C: 10000010 +// D: 01001000 +// E: 01000100 +// F: 01000010 +// G: 01000001 +// DP: 10000001 + +// Digit3 => A: 00101000 +// B: 00100100 +// C: 00100010 +// D: 00011000 +// E: 00010100 +// F: 00010010 +// G: 00010001 +// DP: 00100001 + +// 0 => ABCDEF- +// 1 => -BC---- +// 2 => AB-DE-G +// 3 => ABCD--G +// 4 => -BC--FG +// 5 => A-CD-FG +// 6 => A-CDEFG +// 7 => ABC---- +// 8 => ABCDEFG +// 9 => ABCD-FG + +const boolean segment1[8][8] = { {1,0,0,0,0,1,1,1}, + {1,0,0,0,1,0,1,1}, + {1,0,0,0,1,1,0,1}, + {0,1,0,0,0,1,1,1}, + {0,1,0,0,1,0,1,1}, + {0,1,0,0,1,1,0,1}, + {0,1,0,0,1,1,1,0}, + {1,0,0,0,1,1,1,0} +}; + +const boolean segment2[8][8] = { {0,0,1,0,0,1,1,1}, + {0,0,1,0,1,0,1,1}, + {0,0,1,0,1,1,0,1}, + {0,0,0,1,0,1,1,1}, + {0,0,0,1,1,0,1,1}, + {0,0,0,1,1,1,0,1}, + {0,0,0,1,1,1,1,0}, + {0,0,1,0,1,1,1,0} +}; + +// Segments that make each number +const boolean numbers[10][7] = { {1,1,1,1,1,1,0}, + {0,1,1,0,0,0,0}, + {1,1,0,1,1,0,1}, + {1,1,1,1,0,0,1}, + {0,1,1,0,0,1,1}, + {1,0,1,1,0,1,1}, + {1,0,1,1,1,1,1}, + {1,1,1,0,0,0,0}, + {1,1,1,1,1,1,1}, + {1,1,1,1,0,1,1} +}; + +LTC4622G::LTC4622G(){ + P1=2;P2=3;P3=4;P4=5;P5=6;P6=7;P7=8;P8=12;P9=13; + pinMode(P1, OUTPUT); + pinMode(P2, OUTPUT); + pinMode(P3, OUTPUT); + pinMode(P4, OUTPUT); + pinMode(P5, OUTPUT); + pinMode(P6, OUTPUT); + pinMode(P7, OUTPUT); + pinMode(P8, OUTPUT); + pinMode(P9, OUTPUT); +} +LTC4622G::LTC4622G(uint8_t p1, uint8_t p2, uint8_t p3, uint8_t p4, uint8_t p5, uint8_t p6, uint8_t p7, uint8_t p8, uint8_t p9){ + P1=p1;P2=p2;P3=p3;P4=p4;P5=p5;P6=p6;P7=p7;P8=p8;P9=p9; + pinMode(P1, OUTPUT); + pinMode(P2, OUTPUT); + pinMode(P3, OUTPUT); + pinMode(P4, OUTPUT); + pinMode(P5, OUTPUT); + pinMode(P6, OUTPUT); + pinMode(P7, OUTPUT); + pinMode(P8, OUTPUT); + pinMode(P9, OUTPUT); +} + +void LTC4622G::update() { + displayNumber(gf_value); +} + +void LTC4622G::displayNumber(float number) { + // Display: 0,1 ... 19,9 + // 20 ... 199 + if ( number < 1 ) { // 0 ... 0,9 + int decimal = number * 10; + lightDigit1(0,true); + lightDigit2(decimal, false); + }else{ + if ( number < 20 ) { // 1 ... 19,9 + if ( number >= 10 ) { + lightDigit0(); + } + int decimal1 = (int)number % 10; + int decimal2 = int(number * 10 ) % 10; + lightDigit1(decimal1, true); + lightDigit2(decimal2, false); + }else{ + if ( number < 200 ) { // 20 ... 199 + if ( number >= 100 ) { + lightDigit0(); + } + int decimal1 = (int)(number / 10) % 10; + int decimal2 = (int)number % 10; + lightDigit1(decimal1, false); + lightDigit2(decimal2, false); + } + } + } +} + +void LTC4622G::lightDigit1(byte number, boolean dp) { + for (int i = 0; i < 7; i++) { + if ( numbers[number][i] == 1 ) { + lightSegment1(i); + } + } + if ( true == dp ) { + lightSegment1(7); + } +} +void LTC4622G::lightDigit2(byte number, boolean dp) { + for (int i = 0; i < 7; i++) { + if ( numbers[number][i] == 1 ) { + lightSegment2(i); + } + } + if ( true == dp ) { + lightSegment2(7); + } +} + +void LTC4622G::lightSegment1(byte segment) { +// i == rails to activate +// order == 89672345 + digitalWrite(P8, segment1[segment][0]); + digitalWrite(P9, segment1[segment][1]); + digitalWrite(P6, segment1[segment][2]); + digitalWrite(P7, segment1[segment][3]); + digitalWrite(P2, segment1[segment][4]); + digitalWrite(P3, segment1[segment][5]); + digitalWrite(P4, segment1[segment][6]); + digitalWrite(P5, segment1[segment][7]); + digitalWrite(P1, HIGH); + delay(1); + //Serial.println(segment); +} +void LTC4622G::lightSegment2(byte segment) { +// i == rails to activate +// order == 89672345 + digitalWrite(P8, segment2[segment][0]); + digitalWrite(P9, segment2[segment][1]); + digitalWrite(P6, segment2[segment][2]); + digitalWrite(P7, segment2[segment][3]); + digitalWrite(P2, segment2[segment][4]); + digitalWrite(P3, segment2[segment][5]); + digitalWrite(P4, segment2[segment][6]); + digitalWrite(P5, segment2[segment][7]); + digitalWrite(P1, HIGH); + delay(1); +} +void LTC4622G::lightDigit0() { + // We can disply only 1 + // order == 89672345 + digitalWrite(P8, HIGH); + digitalWrite(P9, LOW); + digitalWrite(P6, LOW); + digitalWrite(P7, LOW); + digitalWrite(P1, LOW); + digitalWrite(P2, HIGH); + digitalWrite(P3, HIGH); + digitalWrite(P4, HIGH); + digitalWrite(P5, HIGH); + delay(3); +} \ No newline at end of file diff --git a/libraries/LTC4622G/LTC4622G.h b/libraries/LTC4622G/LTC4622G.h new file mode 100644 index 0000000..50c5206 --- /dev/null +++ b/libraries/LTC4622G/LTC4622G.h @@ -0,0 +1,62 @@ +/* + * LTC4622G Library for Arduino + * + * Created by Nikolai Rinas on 11/10/2016. + * Copyright (c) 2016 Nikolai Rinas. All rights reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#ifndef LTC4622G_h +#define LTC4622G_h +#include + +// +// ----A---- +// | | +// F B +// |---G---| +// E C +// | | +// ----D---- +// | DP + +class LTC4622G { +public: + LTC4622G(); + LTC4622G(uint8_t p1, uint8_t p2, uint8_t p3, uint8_t p4, uint8_t p5, uint8_t p6, uint8_t p7, uint8_t p8, uint8_t p9); + void update(); + void setValue(float number){gf_value=number;}; + +private: + uint8_t P1; + uint8_t P2; + uint8_t P3; + uint8_t P4; + uint8_t P5; + uint8_t P6; + uint8_t P7; + uint8_t P8; + uint8_t P9; + float gf_value = 0.0; + + void displayNumber(float number); + void lightDigit1(byte number, boolean dp); + void lightDigit2(byte number, boolean dp); + void lightSegment1(byte segment); + void lightSegment2(byte segment); + void lightDigit0(); +}; + +#endif \ No newline at end of file diff --git a/libraries/LTC4622G/examples/simple/simple.ino b/libraries/LTC4622G/examples/simple/simple.ino new file mode 100644 index 0000000..70ebfb8 --- /dev/null +++ b/libraries/LTC4622G/examples/simple/simple.ino @@ -0,0 +1,31 @@ +#include "Arduino.h" +#include + +LTC4622G myDisplay = LTC4622G(); + +void setup() { + // put your setup code here, to run once: +} + +unsigned long lastChanged=0; +int value=0; +float vout=0.0; + +void loop() { + unsigned long now = millis(); + + // Keep the display uptodate + myDisplay.update(); + + // read ADC + value = analogRead(A0); + // Calculate + vout = (value * 5.0) / 1024.0; // see text + + // Change not too fast + if ( now - lastChanged > 200 ) { + myDisplay.setValue(vout); + lastChanged = now; + } + +} diff --git a/libraries/LTC4622G/keywords.txt b/libraries/LTC4622G/keywords.txt new file mode 100644 index 0000000..de21af4 --- /dev/null +++ b/libraries/LTC4622G/keywords.txt @@ -0,0 +1,24 @@ +####################################### +# Syntax Coloring Map For Debounce +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +LTC4622G KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +update KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + +####################################### +# Constants (LITERAL1) +####################################### +