#include int divisor = 0, mode = 2, buf = 0, buff = 0, D1_D8, D1, D9_D16, D1_D4, D13_D16, D9_D12, D5_D8, divisor_1; void calcolo(int, int); void setup() { Serial.begin(9600); DDRA = 0B11111111; DDRC = 0B11111111; pinMode(4, INPUT_PULLUP); PORTA = EEPROM.read(0); PORTC = EEPROM.read(1); D1_D8 = EEPROM.read(0); D1 = bitRead(D1_D8,0); D9_D16 = EEPROM.read(1); D1_D4 = D1_D8 >> 1; D1_D4 = D1_D4 & 0B00000111; D13_D16 = D9_D16 & 0B11110000; D13_D16 = D13_D16 >> 4; D9_D12 = D9_D16 & 0B00001111; D5_D8 = D1_D8 & 0B11110000; D5_D8 = D5_D8 >> 4; divisor_1 = mode * (D1_D4 * 1000 + D13_D16 * 100 + D9_D12 * 10 + D5_D8) + D1; Serial.print("Divisore N attuale: "); Serial.println(divisor_1, DEC); Serial.print("Preset valore: "); Serial.print(D9_D16,BIN); Serial.print(' '); Serial.println(D1_D8,BIN); } void loop() { if(Serial.available() > 0) { buf = Serial.read(); if(buf == '\r') { calcolo(divisor, mode); divisor = 0; } else { divisor *= 10; buf -= 48; divisor += buf; } } if(digitalRead(4) == 0) { ++divisor_1; calcolo(divisor_1, mode); while(digitalRead(4) == 0); delay(600); } } void calcolo(int divisor, int mode) { int buff = 0; int preset = 0; int resto = 0; int unita = 0; int decine = 0; int centinaia = 0; int migliaia = 0; preset = divisor / mode; resto = divisor % mode; unita = preset % 10; preset /= 10; decine = preset % 10; preset /= 10; centinaia = preset % 10; migliaia = preset / 10; migliaia = migliaia << 1; centinaia = centinaia << 4; buff = centinaia | decine; PORTC = buff; EEPROM.write(1, buff); unita = unita << 4; buff = resto | migliaia | unita; PORTA = buff; EEPROM.write(0, buff); Serial.println("Programmato!"); Serial.print("Nuovo divisore N: "); Serial.println(divisor, DEC); divisor_1 = divisor; return 0; }