Hey guys,
I had some help here with my code, and just when i thought it worked, another problem arises...
Short explenation is that i make a display work a specific way with a external value.
Since the display didnt show the digits i expected, i made a "fixed" value in my program, instead of a external being read in.
For example, when my "fixed" value is 3546, everything works.
But when my value is 0546, the value in my program is adjusted. (the external value can send value up to 1023, so below 1000 the first digit is always 0)
The printed value is then 358, and the display shows 358 instead of (0)546.
Here is the code:
#include <stdlib.h>
int counter = 0;
bool clockpulse;
int analogValue = 1546;
uint8_t num1 = 0;
uint8_t num2 = 0;
uint8_t num3 = 0;
uint8_t num4 = 0;
void setup() {
// put your setup code here, to run once:
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (clockpulse, HIGH) { //clockpuls counter
counter ++ ;
}
digitalWrite(clockpulse, LOW); // 1ms clock LOW
digitalWrite(11, LOW);
if (counter == 36) { //reset counter
digitalWrite(13, HIGH);
delayMicroseconds(100);
digitalWrite(13, LOW);
counter = 0;
}
Serial.print("counter: ");
Serial.println(counter, DEC);
if (counter == 25) {
//analogValue = analogRead(1); //read analog value and split up the digits
Serial.println(analogValue);
num1 = (analogValue / 1000) % 10; // <== THIS IS WHERE I EXPECT THE FAULT TO BE
num2 = (analogValue / 100) % 10;
num3 = (analogValue / 10) % 10;
num4 = (analogValue) % 10;
int bcdNum = (num1 << 12) | (num2 << 8) | (num3 << 4) | num4; // convert numbers to BCD
Serial.println(bcdNum, BIN);
}
for (uint8_t i = 0; i < 4; i++) {
uint8_t bit = (num1 >> i) & 1; //read BITS and send output if required
//Some code here to use the bit
if ((i == 0) && (bit == 1) && (counter == 6)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i0 = 1");
}
if ((i == 1) && (bit == 1) && (counter == 7)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i1 = 1") ;
}
if ((i == 2) && (bit == 1) && (counter == 8)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i2 = 1");
}
if ((i == 3) && (bit == 1) && (counter == 9)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i3 = 1");
}
Serial.print(bit);
if (i < 3) Serial.print(",");
}
Serial.println();
for (uint8_t i = 0; i < 4; i++) { //num2
uint8_t bit = (num2 >> i) & 1;
//Some code here to use the bit
if ((i == 0) && (bit == 1) && (counter == 2)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i0 num2 = 1");
}
if ((i == 1) && (bit == 1) && (counter == 3)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i1 num2 = 1");
}
if ((i == 2) && (bit == 1) && (counter == 4)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i2 num2 = 1");
}
if ((i == 3) && (bit == 1) && (counter == 5)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i3 num2 = 1");
}
Serial.print(bit);
if (i < 3) Serial.print(",");
}
Serial.println();
for (uint8_t i = 0; i < 4; i++) { //num3
uint8_t bit = (num3 >> i) & 1;
//Some code here to use the bit
if ((i == 0) && (bit == 1) && (counter == 34)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i0 num3 = 1");
}
if ((i == 1) && (bit == 1) && (counter == 35)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i1 num3 = 1");
}
if ((i == 2) && (bit == 1) && (counter == 0)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i2 num3 = 1");
}
if ((i == 3) && (bit == 1) && (counter == 1)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i3 num3 = 1");
}
Serial.print(bit);
if (i < 3) Serial.print(",");
}
Serial.println();
for (uint8_t i = 0; i < 4; i++) { //num4
uint8_t bit = (num4 >> i) & 1;
//Some code here to use the bit
if ((i == 0) && (bit == 1) && (counter == 30)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i0 num4 = 1");
}
if ((i == 1) && (bit == 1) && (counter == 31)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i1 num4 = 1");
}
if ((i == 2) && (bit == 1) && (counter == 32)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i2 num4 = 1");
}
if ((i == 3) && (bit == 1) && (counter == 33)) {
digitalWrite(12, HIGH);
delayMicroseconds(50);
Serial.println("i3 num4 = 1");
}
Serial.print(bit);
if (i < 3) Serial.print(",");
}
Serial.println();
digitalWrite(clockpulse, HIGH); //1ms clock HIGH
digitalWrite(11, HIGH);
delayMicroseconds(100);
digitalWrite(12, LOW);
}