void setup() {
Serial.begin(9600);
unsigned int diff = 0; //unsigned don't take the sign in accout.
unsigned int milli = 0;
unsigned int sum = 0;
unsigned int stored = 0;
milli = 1020;
if ((diff = milli - sum) >= 1000) {
stored = diff;
sum += milli ; //1020
Serial.println("A");
Serial.println(stored); //1200
Serial.println(sum);
}
milli = 2050;
if ((diff = milli - sum) >= 1000) {
stored = diff;
sum += milli;//3070
Serial.println("B");
Serial.println(stored); //1030
Serial.println(sum);
}
milli = 4100;
if ((diff = milli - sum) >= 1000) {
stored = diff;
sum += milli ; //7170
Serial.println("C");
Serial.println(stored); //1030
Serial.println(sum);
}
milli = 44 ; //flipped
if ((diff = milli - sum) >= 1000) {//44 - 7170 = -7126
stored = diff;
sum += milli; //7214
Serial.println("D");
Serial.println(stored); //44 - (-7126) stored = 7214
Serial.println(sum);
}
milli = 1144;
if ((diff = milli - sum) >= 1000) {//
stored = diff;
sum += milli; //8358.
Serial.println("E");
Serial.println(stored); // 1144 - (7214).
Serial.println(sum);
}
milli = 0;
if ((diff = milli - sum) >= 1000) {// 6070
stored = diff;
sum += milli;
Serial.println("F");
Serial.println(stored);
Serial.println(sum);
}
milli = 2000;
if ((diff = milli - sum) >= 1000) {
stored = diff;
sum += milli;
Serial.println("G");
Serial.println(stored);
Serial.println(sum);
}
}
void loop() {
}
I don't know why I have these answers in D, E, F , G
So when it (the unsigned) meets a higher number it rolls up to is higher value.
58410+7170 - 44 =65536
(diff = milli - sum)
Would that work better if it was before the if:
diff = milli - sum;
if (diff >= 1000) { //44 - 7170 = -7126
I've not seen math done like that with in if.
CrossRoads:
I've not seen math done like that with in if.
It's perfectly legal. The "value" of an assignment statement is the value assigned. Been that way since K met R.
CrossRoads:
(diff = milli - sum)
Would that work better if it was before the if:
diff = milli - sum;
if (diff >= 1000) { //44 - 7170 = -7126
I've not seen math done like that with in if.
I was surprised it worked! Ha ha.
It started with this nice tutor: Secrets of Arduino millis: How it works and how to use it.
Regards
jpd
void setup() {
Serial.begin(9600);
char diff = 0, stored = 0;
unsigned char milli = 0, mantiss = 0, indice = 0 ;
unsigned int sum = 0; //unsigned don't take the sign in accout
milli = 80;
diff = milli - sum;
if (diff >= 50) {
stored = diff;
sum += diff;
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255 ;
}
Serial.println("A");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored);
Serial.println(sum);
}
milli = 140;
diff = milli - sum;
if (diff >= 50) {
stored = diff; sum += diff; //
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255 ;
}//3070
Serial.println("B");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored); //1030
Serial.println(sum);
}
milli = 200;
diff = milli - sum;
if (diff >= 50) {
stored = diff; sum += diff;
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255 ;
}
Serial.println("C");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored); //1030
Serial.println(sum);
}
milli = 255 ; // >=255
diff = milli - sum;
if (diff >= 50) {
stored = diff; sum += diff;
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255;
}
Serial.println("D");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored); //44 - (-7126) stored = 7214
Serial.println(sum);
}
milli = 315; // >=255 + 0 + 60
diff = milli - sum;
if (diff >= 50) {
stored = diff; sum += diff;
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255 ;
}
Serial.println("E");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored); //
Serial.println(sum);
}
milli = 390;
diff = milli - sum;
if (diff >= 50) {
stored = diff; sum += diff;
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255 ;
}
Serial.println("F");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored);
Serial.println(sum);
}
milli = 450;
diff = milli - sum;
if (diff >= 50) {
stored = diff; sum += diff;
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255 ;
}
Serial.println("G");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored);
Serial.println(sum);
}
milli = 520;
diff = milli - sum;
if (diff >= 50) {
stored = diff; sum += diff;
sum += diff;
if (sum >= 255) {
mantiss = sum % 255;
indice = sum / 255 ;
}
Serial.println("H");
Serial.print(" mantiss = "); Serial.println((int)mantiss);
Serial.print(" indice = "); Serial.println((int)indice);
Serial.print("diff >= 50 = "); Serial.println((int)stored);
Serial.println(sum);
}
}
void loop() {
}
New sketch