Same sketch doesnt work on 2 different arduino nanos

First timer here and I dont know if people actually get answers on these, but im starting to be down astronomically with this one. Trying to build a plotclock (look up on google if you care to). i guess its my first harder arduino project. I have got all the electronics sorted out, but here is where its got me banging my head against the wall wondering why im doing this instead of underage drinking like everyone else. For the final project youre supposed to use an arduino pro mini (its smaller than nano and space is tight). I built the "prototype" on a nano before moving all parts into the enclosure. Prototype i got to work just fine.
Then I moved it all onto the pro mini, connected the wires and uploaded the same code only for it to only work partially.

After few weeks of not figuring it out I said screw the pro mini and was just going to use the working nano instead. Had to make a bigger enclosure but whatever. All was going well until I fried the nano today by being an idiot with a voltimeter. But no biggie since ive got another nano right? No, when I connected the new nano it seemed to have the exact same issue as the pro mini only functioning partially. The fried and the new nano are identical so i dont get it.

Now here is the thing with the partially working sketch. Reading and interacting with serial monitor, reading the time all of that seems to work fine. The servos however do not want to move. They get power and if you move them by hand they return to their original position every minute.( thats when the plotclock should write the time)

Whenever they should be moving they just stay still.
They do however stay "stiff" during that time and you cant move them by hand. Im no code expert, but this seems to correspond to Servo.attach/detach command. That does work but whatever Servo.write should be moving them is not.

To add one more twist of [profanity removed] i can get some older plotclock versions to work. V1_03 works, but v1_1c is the latest one and the one i need to get working. The website does not let me upload the files here, but they are both from thingiverse and will link them if anyone is down to try and help.

tldr:
So two identical microcontrollers, same sketch, same computer. One works flawlessly other one does not.

ANY help or ideas greatly appreciated.

POST YOUR CODE !

See How to get the best out of this forum

Maybe not as identical as you think. Are they genuine Arduino or cheap clones? I would not trust the clones. Can you run simple code on it, such as blink?

it says new users are not allowed to upload files, but i guess i can paste the entire thing here. This is the file i want to get working

#include <EEPROMex.h>
#include <EEPROMVar.h>

/* Plot Thermometer & Clock
// This sketch is based on Johannes Heberlein's Plotclock v 1.02 (2014)
// and fully backward compatible
// added features:
// - inline calibration & setup (use x when conected to a 9600 serial terminal)
// - EEPROM storage of the calibration values
// - temperature measurement capability based on a DS18B20
// - Display flip capability
// - switch for multiple function
// enhancements by St. Ries (6/2014)
//
// units: mm; microseconds; radians
// origin: bottom left of drawing surface
// all libraries see http://playground.arduino.cc
// V1.1 added support for Motion (PIR) sensor or tactile switch to avoid ploting if not required
// Bug Fix in calibration

Truglodite's Tweaks [V1_1c]:
  Added macro to use fahrenheit temperature.
  Added macro to use 12hr time format.
  Added macro for PIR/button, so we can use NO buttons (to Vcc).
  Changed parking heights to lift(0) for a better seal between pen and cap.
  Tweaked "1" & "4" to look less like "7" & "9"
  Tweaked "." so it is closer to the bottom
  Doubled the size of ":" and "."
  Moved ":" '1 unit' to the right
  Moved minutes '2 units' to the right
  Fixed second erasing of board when waking up from standby (already erased before going in to standby)
  Changed to TimeLib.h define to fix compiler errors that occur with certain environments

  Description         Pin   Note
  ================================
  Servo1-Lift         2
  Servo2-Left         3     Viewed with servos on the bottom
  Servo3-Right        4     Viewed with servos on the bottom  
  DS18B20 signal      5     some ds1307rtc boards have a spot to install this sensor (and with a built in pullup too)
  Switch              6     **High=temp mode, low time mode (uses INPUT_PULLUP)
  PIR/Button          7     **High=activate plot, low standby (uses INPUT_PULLDOWN for button... so use a momentary NO to Vcc)
  DS1307RTC SDA       A4
  DS1307RTC SCL       A5

  **Note, use calibration "z" code for a temp/time switch if using pin7 with
    PIR/button and pin6 switch. Otherwise PIR/button is ignored and the switch
    just toggles plot enable/disable.

*/
#include <EEPROMEx.h>
#include <Streaming.h>
#include <Time.h>
#include <TimeLib.h>  //Trug
#include <Servo.h>
#include <OneWire.h> // for temp measurement
// These 2 libraries will also be required if REALTIMECLOCK is enabled!
//    Wire.h
//    DS1307RTC.h

bool CALIBRATION;   // enable calibration mode
int address_CALIBRATION;

#define REALTIMECLOCK    // disable if not using a DS1307RTC module
//#define twelveHourFormat // disable to show 24hr time format
//#define fahrenheitFormat // disable to show celsius
#define PIR              // disable if using a regular button on pin 7

#define SERVOPINLIFT    2
#define SERVOPINLEFT    3  // as viewed with servos on the bottom
#define SERVOPINRIGHT   4
#define Temperaturepin  5  // ds18b20+ data pin (if mounting to ds1307rtc, no other pullups are needed)
#define switchPin       6  // select time/temp (time when low, uses INPUT_PULLUP)
#define auxPin          7  // activate/deactivate drawing (draws every minute when high, uses INPUT_PULLUP)
#define ledPin          13

OneWire  ds(Temperaturepin);
bool showTemp;
int address_showTemp;

bool auxActive = false;
bool auxHaveBeenActive = true; //trug, change to true in case we power up with a non-blank board

bool switchFunctionPlotOn;
int address_switchFunctionPlotOn;
bool lastSwitchStatus;
bool flipPlot;
int address_flipPlot;

// When in calibration mode, adjust the following factor until the servos move exactly 90 degrees
int SERVOFAKTORLEFT = 650;
int SERVOFAKTORRIGHT = 650;

int address_SERVOFAKTORLEFT;
int address_SERVOFAKTORRIGHT;

// Zero-position of left and right servo
// When in calibration mode, adjust the NULL-values so that the servo arms are at all times parallel
// either to the X or Y axis
int SERVOLEFTNULL = 2250;
int SERVORIGHTNULL = 920;

int address_SERVOLEFTNULL;
int address_SERVORIGHTNULL;

// lift positions of lifting servo
int LIFT0  = 1800; //1080 // on drawing surface
int LIFT1 = 1645; // 925  // between numbers
int LIFT2 = 1445; //725  // going towards sweeper

int address_LIFT0;
int address_LIFT1;
int address_LIFT2;

// speed of liftimg arm, higher is slower
#define LIFTSPEED 1500

// length of arms
#define L1 35
#define L2 55.1
#define L3 13.2

// origin points of left and right servo
#define O1X 22
#define O1Y -25
#define O2X 47
#define O2Y -25


#ifdef REALTIMECLOCK
  // for instructions on how to hook up a real time clock,
  // see here -> http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
  // DS1307RTC works with the DS1307, DS1337 and DS3231 real time clock chips.
  // Please run the SetTime example to initialize the time on new RTC chips and begin running.

  #include <Wire.h>
  #include <DS1307RTC.h> // see http://playground.arduino.cc/Code/time
#endif

int servoLift = 1500;

Servo servo1;  //
Servo servo2;  //
Servo servo3;  //

volatile double lastX = 75;
volatile double lastY = 47.5;

int last_min = 0;

// Setup procedure
int a;
int cal_step = 10;
// calibration modes
int cal_mode = 99;
#define right_servo_factor 1
#define left_servo_factor 2
#define right_servo_0_position 3
#define left_servo_0_position 4
#define lift0_position 5
#define lift1_position 6
#define lift2_position 7

void setup()
{
  EEPROM.setMemPool(100, EEPROMSizeUno);

  address_SERVOFAKTORLEFT = EEPROM.getAddress(sizeof(int));
  address_SERVOFAKTORRIGHT = EEPROM.getAddress(sizeof(int));
  address_SERVOLEFTNULL = EEPROM.getAddress(sizeof(int));
  address_SERVORIGHTNULL = EEPROM.getAddress(sizeof(int));
  address_LIFT0 = EEPROM.getAddress(sizeof(int));
  address_LIFT1 = EEPROM.getAddress(sizeof(int));
  address_LIFT2 = EEPROM.getAddress(sizeof(int));
  address_CALIBRATION = EEPROM.getAddress(sizeof(byte));
  address_showTemp = EEPROM.getAddress(sizeof(byte));
  address_switchFunctionPlotOn = EEPROM.getAddress(sizeof(byte));
  address_flipPlot = EEPROM.getAddress(sizeof(byte));

  SERVOFAKTORLEFT = EEPROM.readInt(address_SERVOFAKTORLEFT);
  SERVOFAKTORRIGHT = EEPROM.readInt(address_SERVOFAKTORRIGHT);
  SERVOLEFTNULL = EEPROM.readInt(address_SERVOLEFTNULL);
  SERVORIGHTNULL = EEPROM.readInt(address_SERVORIGHTNULL);
  LIFT0  = EEPROM.readInt(address_LIFT0);
  LIFT1 = EEPROM.readInt(address_LIFT1);
  LIFT2 = EEPROM.readInt(address_LIFT2);
  CALIBRATION = EEPROM.read(address_CALIBRATION);
  showTemp = EEPROM.read(address_showTemp);
  switchFunctionPlotOn = EEPROM.read(address_switchFunctionPlotOn);
  flipPlot = EEPROM.read(address_flipPlot);

  pinMode(switchPin,INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  #ifdef PIR
    pinMode(auxPin,INPUT_PULLUP);  //for most PIR breakout boards
  #else
    pinMode(auxPin,INPUT_PULLDOWN);  //for momentary NO buttons (to Vcc)
  #endif
  Serial.begin(9600);

  printStatus();

  #ifdef REALTIMECLOCK
    //  Serial.begin(9600);
    //while (!Serial) { ; } // wait for serial port to connect. Needed for Leonardo only

    // Set current time only the first to values, hh,mm are needed
    tmElements_t tm;
    if (RTC.read(tm))
    {
      setTime(tm.Hour,tm.Minute,tm.Second,tm.Day,tm.Month,tm.Year);
      Serial.println("DS1307 time is set OK.");
    }
    else
    {
      if (RTC.chipPresent())
      {
        Serial.println("DS1307 is stopped.  Please run the SetTime example to initialize the time and begin running.");
      }
      else
      {
        Serial.println("DS1307 read error!  Please check the circuitry.");
      }
      // Set current time only the first to values, hh,mm are needed
      setTime(19,38,0,0,0,0);
    }
  #else
    // Set current time only the first to values, hh,mm are needed
    setTime(19,38,0,0,0,0);
  #endif

  drawTo(75.2, 47);
  lift(0);
  servo1.attach(SERVOPINLIFT);  //  lifting servo
  servo2.attach(SERVOPINLEFT);  //  left servo
  servo3.attach(SERVOPINRIGHT);  //  right servo
  delay(1000);

  lastSwitchStatus = digitalRead(switchPin);
  if (!switchFunctionPlotOn) showTemp = lastSwitchStatus;

  servo1.detach();
  servo2.detach();
  servo3.detach();

}

void loop() {

  if (lastSwitchStatus != digitalRead(switchPin)) {
    lastSwitchStatus = !lastSwitchStatus;
    if (!switchFunctionPlotOn) showTemp = lastSwitchStatus;
    printStatus();
  }
  if (digitalRead(auxPin)) auxActive = true;
  if (Serial.available())
    a = Serial.read();
  else
    a = 0;
  if (char(a) == 'x') {
    CALIBRATION = !CALIBRATION;
    EEPROM.write(address_CALIBRATION,CALIBRATION);
    printStatus();
    if (!CALIBRATION) {
      servo1.detach();
      servo2.detach();
      servo3.detach();
    }
    cal_mode = 99;
  }
  if (CALIBRATION) {
    if (cal_mode == 99) {
      calibration_instructions();
      cal_mode = 0;
    }
    setup_procedure(a, cal_step, cal_mode);
  }
  else {
      if (!(switchFunctionPlotOn && !digitalRead(switchPin))) {
        if (last_min != minute()) {
          if (auxActive)  {
            if (!showTemp) {
              //(#1 X position, #2 X position, ..., Y offset, Scale )
              //where X/Y=0 is origin, and scale 1 ~ 20mm high font)
            //defaults                (5,19,28,34,48,25,0.9);
              if (!flipPlot) writeTime(5,19,29,36,50,25,0.9);//Trug
            //defaults      (62,48,38,33,19,43,-0.9);
              else writeTime(62,48,37,31,17,43,-0.9);//Trug
            }
            else {
            //defaults                       (5,19,28,34,   25,0.9);
              if (!flipPlot) writeTemperature(5,16,26,36,50,25,0.9); //trug
            //defaults             (62,48,38,33,   43,-0.9);
              else writeTemperature(62,48,38,28,19,43,-0.9); //trug
            }
            auxActive = false;
            auxHaveBeenActive = true;
          } // auxActive
          else {
            if (auxHaveBeenActive && !auxActive)  {
              if (!servo1.attached()) servo1.attach(SERVOPINLIFT);
              if (!servo2.attached()) servo2.attach(SERVOPINLEFT);
              if (!servo3.attached()) servo3.attach(SERVOPINRIGHT);
              number(3, 3, 111, 1);  //erase board
              lift(0);  //trug lower for a better seal between pen & cap
              servo1.detach();
              servo2.detach();
              servo3.detach();
              auxHaveBeenActive = false;
            } //auxHaveBeenActive && !auxActive
          } // else auxActive
        }// if new minute
      }
  } //else
} // main

void writeTemperature(int apo, int bpo, int cpo, int dpo, int epo, int offspo, float scale)  {  //trug
  if (!servo1.attached()) servo1.attach(SERVOPINLIFT);
  if (!servo2.attached()) servo2.attach(SERVOPINLEFT);
  if (!servo3.attached()) servo3.attach(SERVOPINRIGHT);

  float tempFloat = temperature();
  tempFloat = tempFloat * 10;
  int temp = tempFloat;
  int temp3 = temp / 1000;  //trug allow 100's
  int temp2 = temp / 100;
  int temp1 = (temp - temp2 * 100) / 10;
  int temp0 = temp - temp2 * 100 - temp1 * 10;

  //trug, don't erase again if we were in standby (already erased)
  if(auxHaveBeenActive) {
    lift(0);
    number(3, 3, 111, 1);  //erase board
  }
  else lift(2);  //don't erase since it's already erased

  if(temp3)  number(apo,offspo,temp3,scale); //omit uneeded "0"
  if(temp2)  number(bpo,offspo,temp2,scale); //omit uneeded "0"
  number(cpo,offspo,temp1,scale);
  number(dpo,offspo,12,scale);
  number(epo,offspo,temp0,scale);

  lift(2);
  drawTo(74.2, 47.5);  //go home
  lift(0);  //trug lower for a better seal between pen & cap
  servo1.detach();
  servo2.detach();
  servo3.detach();

  last_min = minute();

} //writeTemperature

void writeTime(int apo, int bpo, int cpo, int dpo, int epo, int offspo, float scale) {
  int i = 0;

  if (!servo1.attached()) servo1.attach(SERVOPINLIFT);
  if (!servo2.attached()) servo2.attach(SERVOPINLEFT);
  if (!servo3.attached()) servo3.attach(SERVOPINRIGHT);

  //trug, don't erase again if we were in standby (already erased)
  if(auxHaveBeenActive) {
    lift(0);
    number(3, 3, 111, 1);  //erase board
  }
  else lift(2);

  #ifdef twelveHourFormat  //trug
    hourFormat12();
    while ((i+1)*10 <= hourFormat12())
    {
      i++;
    }
    if(i)    number(apo,offspo,i,scale); //omit "0" if not needed
    number(bpo,offspo,(hourFormat12()-i*10),scale);

    number(cpo,offspo, 11,scale);
  #else   //trug
    hour();
    while ((i+1)*10 <= hour())
    {
      i++;
    }
    number(apo,offspo,i,scale);
    number(bpo,offspo,(hour()-i*10),scale);
    number(cpo,offspo, 11,scale);
  #endif

  i=0;
  while ((i+1)*10 <= minute())
  {
    i++;
  }
  number(dpo,offspo,i,scale);
  number(epo,offspo, (minute()-i*10),scale);

  lift(2);
  drawTo(74.2, 47.5);
  lift(0);  //trug lower for a better seal between pen & cap
  last_min = minute();

  servo1.detach();
  servo2.detach();
  servo3.detach();
}  // writeTime

// Writing numeral with bx by being the bottom left originpoint. Scale 1 equals a 20 mm high font.
// The structure follows this principle: move to first startpoint of the numeral, lift down, draw numeral, lift up
//'Character boxes' should stay within range: X[2,12] and Y[0,20]
void number(float bx, float by, int num, float scale) {

  switch (num) {

  case 0:
    drawTo(bx + 12 * scale, by + 6 * scale);
    lift(0);
    bogenGZS(bx + 7 * scale, by + 10 * scale, 10 * scale, -0.8, 6.7, 0.5);
    lift(1);
    break;
  case 1:  //trug change "1" so it doesn't look like a "7"
    //drawTo(bx + 3 * scale, by + 15 * scale);
    drawTo(bx + 8 * scale, by + 17 * scale);
    lift(0);
    drawTo(bx + 10 * scale, by + 20 * scale);
    drawTo(bx + 10 * scale, by + 0 * scale);
    lift(1);
    break;
  case 2:
    drawTo(bx + 2 * scale, by + 12 * scale);
    lift(0);
    bogenUZS(bx + 8 * scale, by + 14 * scale, 6 * scale, 3, -0.8, 1);
    drawTo(bx + 1 * scale, by + 0 * scale);
    drawTo(bx + 12 * scale, by + 0 * scale);
    lift(1);
    break;
  case 3:
    //Trug adjust the left side of "3" a tad to the right so it doesn't obscure semicolon's
    //drawTo(bx + 2 * scale, by + 17 * scale);
    //lift(0);
    //bogenUZS(bx + 5 * scale, by + 15 * scale, 5 * scale, 3, -2, 1);
    //bogenUZS(bx + 5 * scale, by + 5 * scale, 5 * scale, 1.57, -3, 1);
    drawTo(bx + 3 * scale, by + 17 * scale);
    lift(0);
    bogenUZS(bx + 5 * scale, by + 15 * scale, 5 * scale, 2.8, -2, 1);
    bogenUZS(bx + 5 * scale, by + 5 * scale, 5 * scale, 1.57, -2.8, 1);
    lift(1);
    break;
  case 4: //trug change "4" so it doesn't look like a "9"
    //drawTo(bx + 10 * scale, by + 0 * scale);
    drawTo(bx + 8 * scale, by + 0 * scale);
    lift(0);
    //drawTo(bx + 10 * scale, by + 20 * scale);
    drawTo(bx + 8 * scale, by + 20 * scale);
    drawTo(bx + 2 * scale, by + 6 * scale);
    drawTo(bx + 12 * scale, by + 6 * scale);
    lift(1);
    break;
  case 5:
    drawTo(bx + 2 * scale, by + 5 * scale);
    lift(0);
    bogenGZS(bx + 5 * scale, by + 6 * scale, 6 * scale, -2.5, 2, 1);
    drawTo(bx + 5 * scale, by + 20 * scale);
    drawTo(bx + 12 * scale, by + 20 * scale);
    lift(1);
    break;
  case 6:
    drawTo(bx + 2 * scale, by + 10 * scale);
    lift(0);
    bogenUZS(bx + 7 * scale, by + 6 * scale, 6 * scale, 2, -4.4, 1);
    drawTo(bx + 11 * scale, by + 20 * scale);
    lift(1);
    break;
  case 7:
    drawTo(bx + 2 * scale, by + 20 * scale);
    lift(0);
    drawTo(bx + 12 * scale, by + 20 * scale);
    drawTo(bx + 2 * scale, by + 0);
    lift(1);
    break;
  case 8:
    drawTo(bx + 5 * scale, by + 10 * scale);
    lift(0);
    bogenUZS(bx + 5 * scale, by + 15 * scale, 5 * scale, 4.7, -1.6, 1);
    bogenGZS(bx + 5 * scale, by + 5 * scale, 5 * scale, -4.7, 2, 1);
    lift(1);
    break;

  case 9:
    drawTo(bx + 9 * scale, by + 11 * scale);
    lift(0);
    bogenUZS(bx + 7 * scale, by + 15 * scale, 5 * scale, 4, -0.5, 1);
    drawTo(bx + 5 * scale, by + 0);
    lift(1);
    break;

  case 111: //erase all

    lift(0);
    drawTo(70, 46);
    drawTo(65, 43);

    drawTo(65, 49);
    drawTo(5, 49);
    drawTo(5, 45);
    drawTo(65, 45);
    drawTo(65, 40);

    drawTo(5, 40);
    drawTo(5, 35);
    drawTo(65, 35);
    drawTo(65, 30);

    drawTo(5, 30);
    drawTo(5, 25);
    drawTo(65, 25);
    drawTo(65, 20);

    drawTo(5, 20);
    drawTo(60, 44);

    drawTo(75.2, 47);
    lift(2);

    break;

  case 11:  //semicolon
    drawTo(bx + 5 * scale, by + 15 * scale);
    lift(0);
    //bogenGZS(bx + 5 * scale, by + 15 * scale, 0.1 * scale, 1, -1, 1);  //trug
    bogenGZS(bx + 5 * scale, by + 15 * scale, 0.2 * scale, 1, -1, 1);  //trug
    lift(1);
    drawTo(bx + 5 * scale, by + 5 * scale);
    lift(0);
    //bogenGZS(bx + 5 * scale, by + 5 * scale, 0.1 * scale, 1, -1, 1);  //trug
    bogenGZS(bx + 5 * scale, by + 5 * scale, 0.2 * scale, 1, -1, 1);  //trug
    lift(1);
    break;

  case 12:  //trug, change period to be lower
    //drawTo(bx + 5 * scale, by + 5 * scale);
    drawTo(bx + 5 * scale, by + 1 * scale);
    lift(0);
    //bogenGZS(bx + 5 * scale, by + 5 * scale, 0.1 * scale, 1, -1, 1);
    bogenGZS(bx + 5 * scale, by + 1 * scale, 0.2 * scale, 1, -1, 1);
    lift(1);
    break;

  }
}



void lift(char lift) {
  switch (lift) {
    // room to optimize  !

  case 0: //850

      if (servoLift >= LIFT0) {
      while (servoLift >= LIFT0)
      {
        servoLift--;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);
      }
    }
    else {
      while (servoLift <= LIFT0) {
        servoLift++;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);

      }

    }

    break;

  case 1: //150

    if (servoLift >= LIFT1) {
      while (servoLift >= LIFT1) {
        servoLift--;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);

      }
    }
    else {
      while (servoLift <= LIFT1) {
        servoLift++;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);
      }

    }

    break;

  case 2:

    if (servoLift >= LIFT2) {
      while (servoLift >= LIFT2) {
        servoLift--;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);
      }
    }
    else {
      while (servoLift <= LIFT2) {
        servoLift++;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);
      }
    }
    break;
  }
}


void bogenUZS(float bx, float by, float radius, int start, int ende, float sqee) {
  float inkr = -0.05;
  float count = 0;

  do {
    drawTo(sqee * radius * cos(start + count) + bx,
    radius * sin(start + count) + by);
    count += inkr;
  }
  while ((start + count) > ende);

}

void bogenGZS(float bx, float by, float radius, int start, int ende, float sqee) {
  float inkr = 0.05;
  float count = 0;

  do {
    drawTo(sqee * radius * cos(start + count) + bx,
    radius * sin(start + count) + by);
    count += inkr;
  }
  while ((start + count) <= ende);
}


void drawTo(double pX, double pY) {
  double dx, dy, c;
  int i;

  // dx dy of new point
  dx = pX - lastX;
  dy = pY - lastY;
  //path lenght in mm, times 4 equals 4 steps per mm
  c = floor(4 * sqrt(dx * dx + dy * dy));

  if (c < 1) c = 1;

  for (i = 0; i <= c; i++) {
    // draw line point by point
    set_XY(lastX + (i * dx / c), lastY + (i * dy / c));

  }

  lastX = pX;
  lastY = pY;
}

double return_angle(double a, double b, double c) {
  // cosine rule for angle between c and a
  return acos((a * a + c * c - b * b) / (2 * a * c));
}

void set_XY(double Tx, double Ty)
{
  delay(1);
  double dx, dy, c, a1, a2, Hx, Hy;

  // calculate triangle between pen, servoLeft and arm joint
  // cartesian dx/dy
  dx = Tx - O1X;
  dy = Ty - O1Y;

  // polar lemgth (c) and angle (a1)
  c = sqrt(dx * dx + dy * dy); //
  a1 = atan2(dy, dx); //
  a2 = return_angle(L1, L2, c);

  servo2.writeMicroseconds(floor(((a2 + a1 - M_PI) * SERVOFAKTORLEFT) + SERVOLEFTNULL));

  // calculate joinr arm point for triangle of the right servo arm
  a2 = return_angle(L2, L1, c);
  Hx = Tx + L3 * cos((a1 - a2 + 0.621) + M_PI); //36,5°
  Hy = Ty + L3 * sin((a1 - a2 + 0.621) + M_PI);

  // calculate triangle between pen joint, servoRight and arm joint
  dx = Hx - O2X;
  dy = Hy - O2Y;

  c = sqrt(dx * dx + dy * dy);
  a1 = atan2(dy, dx);
  a2 = return_angle(L1, (L2 - L3), c);

  servo3.writeMicroseconds(floor(((a1 - a2) * SERVOFAKTORRIGHT) + SERVORIGHTNULL));

}

float temperature() {
  //byte present = 0;  //trug
  byte data[12];
  byte addr[8];

  ds.reset_search();
  ds.search(addr);
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);
  delay(1000);
  //present = ds.reset();  //trug
  ds.reset();  //trug
  ds.select(addr);
  ds.write(0xBE);
  for (byte i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  unsigned int raw = (data[1] << 8) | data[0];
  byte cfg = (data[4] & 0x60);
  if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
  else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
  else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
  #ifdef fahrenheitFormat //trug
    float fahrenheit;
    int int_fahrenheit;
    fahrenheit = (float)raw / 16.0;  // celsius
    fahrenheit = 10*(fahrenheit * 1.8 + 32); //fahrenheit*10
    int_fahrenheit = fahrenheit;  // round up fahrenheit*10
    fahrenheit = int_fahrenheit;  // store as float
    fahrenheit = fahrenheit/10;  // rounded fahrenheit float
    return fahrenheit;
  #else   //trug
    float celsius;
    int int_cel;  //trug
    celsius = (float)raw / 1.60;
    int_cel = celsius;
    celsius = int_cel;
    celsius = celsius/10;
    return celsius;
  #endif
}

void setup_procedure(int a,  int &cal_step, int &cal_mode)  {

  if (a==0) return;

  if (!servo1.attached()) servo1.attach(SERVOPINLIFT);
  if (!servo2.attached()) servo2.attach(SERVOPINLEFT);
  if (!servo3.attached()) servo3.attach(SERVOPINRIGHT);

  // Setup mode and adjust
  switch (char(a))  {
  case '0':
    calibration_instructions();
    break;
  case '+':
    value_adjust(cal_mode, cal_step);
    break;
  case '-':
    value_adjust(cal_mode, -1 * cal_step);
    break;
  case '1':
    cal_mode = left_servo_0_position;
    servo2.writeMicroseconds(SERVOLEFTNULL);
    break;
  case '2':
    cal_mode = right_servo_0_position;
    servo3.writeMicroseconds(SERVORIGHTNULL);
    break;
  case '3':
    cal_mode = right_servo_factor;
    drawTo(-3, 29.2);
    break;
  case '4':
    cal_mode = left_servo_factor;
    drawTo(74.1, 28);
    break;
  case 'D':
    if (cal_step == 10) cal_step = 1;
    else cal_step = 10;
    Serial.print("Calibrationstep = ");
    Serial.println(cal_step);
    break;
  case '8':
    lift(2);
    drawTo(75.2, 47);
    break;
  case '9':
    drawTo(30, 30);
    break;
  case '5':
    cal_mode = lift0_position;
    lift(0);
    break;
  case '6':
    cal_mode = lift1_position;
    lift(1);
    break;
  case '7':
    cal_mode = lift2_position;
    lift(2);
    break;
  case 'A':
    SERVOFAKTORLEFT = 650;
    SERVOFAKTORRIGHT = 650;
    SERVOLEFTNULL = 2250;
    SERVORIGHTNULL = 920;
    LIFT0  = 1800;
    LIFT1 = 1645;
    LIFT2 = 1445;
    break;
  case 'B':
    EEPROM.writeInt(address_SERVOFAKTORLEFT, SERVOFAKTORLEFT);
    EEPROM.writeInt(address_SERVOFAKTORRIGHT, SERVOFAKTORRIGHT);
    EEPROM.writeInt(address_SERVOLEFTNULL, SERVOLEFTNULL);
    EEPROM.writeInt(address_SERVORIGHTNULL, SERVORIGHTNULL);
    EEPROM.writeInt(address_LIFT0, LIFT0);
    EEPROM.writeInt(address_LIFT1, LIFT1);
    EEPROM.writeInt(address_LIFT2, LIFT2);
    break;
  case 'C':
    SERVOFAKTORLEFT = EEPROM.readInt(address_SERVOFAKTORLEFT);
    SERVOFAKTORRIGHT = EEPROM.readInt(address_SERVOFAKTORRIGHT);
    SERVOLEFTNULL = EEPROM.readInt(address_SERVOLEFTNULL);
    SERVORIGHTNULL = EEPROM.readInt(address_SERVORIGHTNULL);
    LIFT0  = EEPROM.readInt(address_LIFT0);
    LIFT1 = EEPROM.readInt(address_LIFT1);
    LIFT2 = EEPROM.readInt(address_LIFT2);
    break;
  case 'w':
    flipPlot = !flipPlot;
    EEPROM.write(address_flipPlot,flipPlot);
    break;
  case 'y':
    showTemp = !showTemp;
    EEPROM.write(address_showTemp,showTemp);
    printStatus();
    calibration_instructions();
    break;
  case 'z':
    switchFunctionPlotOn = !switchFunctionPlotOn;
    EEPROM.write(address_switchFunctionPlotOn,switchFunctionPlotOn);
    printStatus();
    calibration_instructions();
    break;
  }
}

void value_adjust(int cal_mode, int cal_step) {

  switch (cal_mode)  {
  case right_servo_0_position:
    SERVORIGHTNULL = SERVORIGHTNULL + cal_step;
    servo3.writeMicroseconds(SERVORIGHTNULL);
    break;
  case left_servo_0_position:
    SERVOLEFTNULL = SERVOLEFTNULL + cal_step;
    servo2.writeMicroseconds(SERVOLEFTNULL);
    break;
  case right_servo_factor:
    SERVOFAKTORRIGHT = SERVOFAKTORRIGHT + cal_step;
    drawTo(-3, 29.2);
    break;
  case left_servo_factor:
    SERVOFAKTORLEFT = SERVOFAKTORLEFT + cal_step;
    drawTo(74.1, 28);
    break;
  case lift0_position:
    LIFT0 = LIFT0 + cal_step;
    lift(0);
    break;
  case lift1_position:
    LIFT1 = LIFT1 + cal_step;
    lift(1);
    break;
  case lift2_position:
    LIFT2 = LIFT2 + cal_step;
    lift(2);
    break;
  }
}

void printStatus()  {
  Serial << endl;
  Serial << "x - Change Setup mode  --- Setup mode = ";
  if (CALIBRATION) Serial << "On";
  else Serial << "Off";
  Serial << endl;
  if (switchFunctionPlotOn) {
    Serial << "Switch enable/disable plot function" << endl;
    Serial << "Plot function " << digitalRead(switchPin) << endl;
    if (showTemp) Serial << "Shows Temperature" << endl;
    else Serial << "Shows Time" << endl;
  }
  else {
    Serial << "Switch toggle Temperature/Time" << endl;
    if (digitalRead(switchPin)) Serial << "Shows Temperature" << endl;
    else Serial << "Shows Time" << endl;
  }
  Serial << "Flip plot " << flipPlot << endl;
}

void calibration_instructions(){
  Serial << endl;
  Serial << F("0 - Menue") << endl;
  Serial << F("+ - increase") << endl;
  Serial << F("- - decrease") << endl;
  Serial << F("1 - SERVOLEFTNULL position; adjust First Pos 3!") << endl;
  Serial << F("2 - SERVORIGHTNULL position; adjust First pos 4!") << endl;
  Serial << F("3 - left position; adjust SERVOFAKTORRIGHT") << endl;
  Serial << F("4 - right position; adjust SERVOFAKTORLEFT") << endl;
  Serial << F("5 - Lift 0; adjust Lift 0") << endl;
  ;
  Serial << F("6 - Lift 1; adjust Lift 1") << endl;
  ;
  Serial << F("7 - Lift 2; adjust Lift 2") << endl;
  ;
  Serial << F("8 - Upper origin") << endl;
  Serial << F("9 - Mid position") << endl;
  Serial << F("A - Load default calibration values") << endl;
  Serial << F("B - Store curent values") << endl;
  Serial << F("C - Load stored values") << endl;
  Serial << F("D - Toggle 10 / 1 step") << endl;
  Serial << F("w - flip plot") << endl;
  if (!switchFunctionPlotOn)   {
    Serial << F("z - Switch enable/disable plot function") << endl;
  }
  else {
    Serial << F("z - Switch toggle between Time and Temperature") << endl;
    if (showTemp) Serial << F("y - Plot time") << endl;
    else Serial << F("y - Plot temperature") << endl;
  }
  Serial << F("x - leave/enter Setup mode") << endl;
}

this is the older less suffisticated one that seems to still work

 //#include <Time.h>

// Plotclock
// cc - by Johannes Heberlein 2014
// v 1.02
// thingiverse.com/joo   wiki.fablab-nuernberg.de
// units: mm; microseconds; radians
// origin: bottom left of drawing surface
// time library see http://playground.arduino.cc/Code/time 
// RTC  library see http://playground.arduino.cc/Code/time 
//               or http://www.pjrc.com/teensy/td_libs_DS1307RTC.html  
// Change log:
// 1.01  Release by joo at https://github.com/9a/plotclock
// 1.02  Additional features implemented by Dave (https://github.com/Dave1001/):
//       - added ability to calibrate servofaktor seperately for left and right servos
//       - added code to support DS1307, DS1337 and DS3231 real time clock chips
//       - see http://www.pjrc.com/teensy/td_libs_DS1307RTC.html for how to hook up the real time clock 
// 1.03  Fixed the length bug at the servo2 angle calculation, other fixups


#include <TimeLib.h> // see http://playground.arduino.cc/Code/time 
#include <Servo.h>

// delete or mark the next line as comment if you don't need these
//#define CALIBRATION      // enable calibration mode
#define REALTIMECLOCK    // enable real time clock

#define WISHY 3 // Offset of the Y coordinats of the plate-wisher

// When in calibration mode, adjust the following factors until the servos move exactly 90 degrees
#define SERVOFAKTORLEFT 600
#define SERVOFAKTORRIGHT 570

// Zero-position of left and right servo
// When in calibration mode, adjust the NULL-values so that the servo arms are at all times parallel
// either to the X or Y axis
#define SERVOLEFTNULL 1850
#define SERVORIGHTNULL 650

#define SERVOPINLIFT  2
#define SERVOPINLEFT  3
#define SERVOPINRIGHT 4

#define ZOFF 90
// lift positions of lifting servo
#define LIFT0 1110+ZOFF // on drawing surface
#define LIFT1 995+ZOFF  // between numbers
#define LIFT2 735+ZOFF  // going towards sweeper

// speed of liftimg arm, higher is slower
#define LIFTSPEED 2000

// length of arms
#define L1 35
#define L2 55.1
#define L3 13.2
#define L4 45

// origin points of left and right servo 
#define O1X 22 //24
#define O1Y -25
#define O2X 47//49
#define O2Y -25


#ifdef REALTIMECLOCK
// for instructions on how to hook up a real time clock,
// see here -> http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
// DS1307RTC works with the DS1307, DS1337 and DS3231 real time clock chips.
// Please run the SetTime example to initialize the time on new RTC chips and begin running.

#include <Wire.h>
#include <DS1307RTC.h> // see http://playground.arduino.cc/Code/time    
#endif

int servoLift = 1500;

Servo servo1;  // 
Servo servo2;  // 
Servo servo3;  // 

volatile double lastX = 75;
volatile double lastY = 47.5;

int last_min = 0;

void setup() 
{ 
  
  pinMode(7, INPUT_PULLUP);
#ifdef REALTIMECLOCK
  Serial.begin(9600);
  //while (!Serial) { ; } // wait for serial port to connect. Needed for Leonardo only

  // Set current time only the first to values, hh,mm are needed  
  tmElements_t tm;
  if (RTC.read(tm)) 
  {
    setTime(tm.Hour,tm.Minute,tm.Second,tm.Day,tm.Month,tm.Year);
    Serial.println("DS1307 time is set OK.");
  } 
  else 
  {
    if (RTC.chipPresent())
    {
      Serial.println("DS1307 is stopped.  Please run the SetTime example to initialize the time and begin running.");
    } 
    else 
    {
      Serial.println("DS1307 read error!  Please check the circuitry.");
    } 
    // Set current time only the first to values, hh,mm are needed



    setTime(13,25,0,0,0,0);
  }
#else  
  // Set current time only the first to values, hh,mm are needed
  
  setTime(20,52,0,0,0,0);
#endif




  drawTo(75.2, 47);
  lift(0);
  //servo1.attach(SERVOPINLIFT);  //  lifting servo
  //servo2.attach(SERVOPINLEFT);  //  left servo
  //servo3.attach(SERVOPINRIGHT);  //  right servo
  delay(1000);

} 

void loop() 
{ 

#ifdef CALIBRATION

   if (!servo1.attached()) servo1.attach(SERVOPINLIFT);
    if (!servo2.attached()) servo2.attach(SERVOPINLEFT);
    if (!servo3.attached()) servo3.attach(SERVOPINRIGHT);

  // Servohorns will have 90° between movements, parallel to x and y axis
  drawTo(-3, 29.2);
  delay(500);
  drawTo(74.1, 28);
  delay(500);

#else 


  int i = 0;
  if (last_min != minute()) {

    if (!servo1.attached()) servo1.attach(SERVOPINLIFT);
    if (!servo2.attached()) servo2.attach(SERVOPINLEFT);
    if (!servo3.attached()) servo3.attach(SERVOPINRIGHT);

    lift(0);

    hour();
    while ((i+1)*10 <= hour())
    {
      i++;
    }

    number(3, 3, 111, 1);
    number(5, 25, i, 0.9);
    number(19, 25, (hour()-i*10), 0.9);
    number(28, 25, 11, 0.9);

    i=0;
    while ((i+1)*10 <= minute())
    {
      i++;
    }
    number(34, 25, i, 0.9);
    number(48, 25, (minute()-i*10), 0.9);
    lift(2);
    drawTo(71.0, 47.2);
    lift(1);
    last_min = minute();
    delay(580);
    servo1.detach();
    servo2.detach();
    servo3.detach();
  }

#endif

} 



// Writing numeral with bx by being the bottom left originpoint. Scale 1 equals a 20 mm high font.
// The structure follows this principle: move to first startpoint of the numeral, lift down, draw numeral, lift up
void number(float bx, float by, int num, float scale) {

  switch (num) {

  case 0:
    drawTo(bx + 12 * scale, by + 6 * scale);
    lift(0);
    bogenGZS(bx + 7 * scale, by + 10 * scale, 10 * scale, -0.8, 6.7, 0.5);
    lift(1);
    break;
  case 1:

    drawTo(bx + 3 * scale, by + 15 * scale);
    lift(0);
    drawTo(bx + 10 * scale, by + 20 * scale);
    drawTo(bx + 10 * scale, by + 0 * scale);
    lift(1);
    break;
  case 2:
    drawTo(bx + 2 * scale, by + 12 * scale);
    lift(0);
    bogenUZS(bx + 8 * scale, by + 14 * scale, 6 * scale, 3, -0.8, 1);
    drawTo(bx + 1 * scale, by + 0 * scale);
    drawTo(bx + 12 * scale, by + 0 * scale);
    lift(1);
    break;
  case 3:
    drawTo(bx + 2 * scale, by + 17 * scale);
    lift(0);
    bogenUZS(bx + 5 * scale, by + 15 * scale, 5 * scale, 3, -2, 1);
    bogenUZS(bx + 5 * scale, by + 5 * scale, 5 * scale, 1.57, -3, 1);
    lift(1);
    break;
  case 4:
    drawTo(bx + 10 * scale, by + 0 * scale);
    lift(0);
    drawTo(bx + 10 * scale, by + 20 * scale);
    drawTo(bx + 2 * scale, by + 6 * scale);
    drawTo(bx + 12 * scale, by + 6 * scale);
    lift(1);
    break;
  case 5:
    drawTo(bx + 2 * scale, by + 5 * scale);
    lift(0);
    bogenGZS(bx + 5 * scale, by + 6 * scale, 6 * scale, -2.5, 2, 1);
    drawTo(bx + 5 * scale, by + 20 * scale);
    drawTo(bx + 12 * scale, by + 20 * scale);
    lift(1);
    break;
  case 6:
    drawTo(bx + 2 * scale, by + 10 * scale);
    lift(0);
    bogenUZS(bx + 7 * scale, by + 6 * scale, 6 * scale, 2, -4.4, 1);
    drawTo(bx + 11 * scale, by + 20 * scale);
    lift(1);
    break;
  case 7:
    drawTo(bx + 2 * scale, by + 20 * scale);
    lift(0);
    drawTo(bx + 12 * scale, by + 20 * scale);
    drawTo(bx + 2 * scale, by + 0);
    lift(1);
    break;
  case 8:
    drawTo(bx + 5 * scale, by + 10 * scale);
    lift(0);
    bogenUZS(bx + 5 * scale, by + 15 * scale, 5 * scale, 4.7, -1.6, 1);
    bogenGZS(bx + 5 * scale, by + 5 * scale, 5 * scale, -4.7, 2, 1);
    lift(1);
    break;

  case 9:
    drawTo(bx + 9 * scale, by + 11 * scale);
    lift(0);
    bogenUZS(bx + 7 * scale, by + 15 * scale, 5 * scale, 4, -0.5, 1);
    drawTo(bx + 5 * scale, by + 0);
    lift(1);
    break;

  case 111:

    lift(0);
    drawTo(70, 45);
    drawTo(65-WISHY, 43);

    drawTo(65-WISHY, 46);
    drawTo(5, 49);
    drawTo(5, 46);
    drawTo(63-WISHY, 46);
    drawTo(63-WISHY, 42);

    drawTo(5, 42);
    drawTo(5, 38);
    drawTo(63-WISHY, 38);
    drawTo(63-WISHY, 34);

    drawTo(5, 34);
    drawTo(5, 29);
    drawTo(6, 29);
    drawTo(65-WISHY, 26);

    drawTo(5, 26);
    drawTo(60-WISHY, 40);

    drawTo(73.2, 44.0);
    lift(2);

    break;

  case 11:
    drawTo(bx + 5 * scale, by + 15 * scale);
    lift(0);
    bogenGZS(bx + 5 * scale, by + 15 * scale, 0.1 * scale, 1, -1, 1);
    delay(10);
    lift(1);
    drawTo(bx + 5 * scale, by + 5 * scale);
    lift(0);
    bogenGZS(bx + 5 * scale, by + 5 * scale, 0.1 * scale, 1, -1, 1);
    delay(10);
    lift(1);
    break;

  }
}



void lift(char lift) {
  switch (lift) {
    // room to optimize  !

  case 0: //850

      if (servoLift >= LIFT0) {
      while (servoLift >= LIFT0) 
      {
        servoLift--;
        servo1.writeMicroseconds(servoLift);				
        delayMicroseconds(LIFTSPEED);
      }
    } 
    else {
      while (servoLift <= LIFT0) {
        servoLift++;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);

      }

    }

    break;

  case 1: //150

    if (servoLift >= LIFT1) {
      while (servoLift >= LIFT1) {
        servoLift--;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);

      }
    } 
    else {
      while (servoLift <= LIFT1) {
        servoLift++;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);
      }

    }

    break;

  case 2:

    if (servoLift >= LIFT2) {
      while (servoLift >= LIFT2) {
        servoLift--;
        servo1.writeMicroseconds(servoLift);
        delayMicroseconds(LIFTSPEED);
      }
    } 
    else {
      while (servoLift <= LIFT2) {
        servoLift++;
        servo1.writeMicroseconds(servoLift);				
        delayMicroseconds(LIFTSPEED);
      }
    }
    break;
  }
}


void bogenUZS(float bx, float by, float radius, int start, int ende, float sqee) {
  float inkr = -0.05;
  float count = 0;

  do {
    drawTo(sqee * radius * cos(start + count) + bx,
    radius * sin(start + count) + by);
    count += inkr;
  } 
  while ((start + count) > ende);

}

void bogenGZS(float bx, float by, float radius, int start, int ende, float sqee) {
  float inkr = 0.05;
  float count = 0;

  do {
    drawTo(sqee * radius * cos(start + count) + bx,
    radius * sin(start + count) + by);
    count += inkr;
  } 
  while ((start + count) <= ende);
}


void drawTo(double pX, double pY) {
  double dx, dy, c;
  int i;

  // dx dy of new point
  dx = pX - lastX;
  dy = pY - lastY;
  //path lenght in mm, times 4 equals 4 steps per mm
  c = floor(7 * sqrt(dx * dx + dy * dy));

  if (c < 1) c = 1;

  for (i = 0; i <= c; i++) {
    // draw line point by point
    set_XY(lastX + (i * dx / c), lastY + (i * dy / c));

  }

  lastX = pX;
  lastY = pY;
}

double return_angle(double a, double b, double c) {
  // cosine rule for angle between c and a
  return acos((a * a + c * c - b * b) / (2 * a * c));
}

void set_XY(double Tx, double Ty) 
{
  delay(1);
  double dx, dy, c, a1, a2, Hx, Hy;

  // calculate triangle between pen, servoLeft and arm joint
  // cartesian dx/dy
  dx = Tx - O1X;
  dy = Ty - O1Y;

  // polar lemgth (c) and angle (a1)
  c = sqrt(dx * dx + dy * dy); // 
  a1 = atan2(dy, dx); //
  a2 = return_angle(L1, L2, c);

  servo2.writeMicroseconds(floor(((a2 + a1 - M_PI) * SERVOFAKTORLEFT) + SERVOLEFTNULL));

  // calculate joinr arm point for triangle of the right servo arm
  a2 = return_angle(L2, L1, c);
  Hx = Tx + L3 * cos((a1 - a2 + 0.621) + M_PI); //36,5°
  Hy = Ty + L3 * sin((a1 - a2 + 0.621) + M_PI);

  // calculate triangle between pen joint, servoRight and arm joint
  dx = Hx - O2X;
  dy = Hy - O2Y;

  c = sqrt(dx * dx + dy * dy);
  a1 = atan2(dy, dx);
  a2 = return_angle(L1, L4, c);

  servo3.writeMicroseconds(floor(((a1 - a2) * SERVOFAKTORRIGHT) + SERVORIGHTNULL));

}

@ardui_not_working, your topic was moved to a more suitable location on the forum.

@ardui_not_working I have removed the profanity from you post. Profanities are not allowed on the forum. Please don't do it again or you risk a ban.

yes i can

Then you need to back up and start with the sample code for the servos and get them working, then rebuild your code in small steps.

I know this is frustrating but you will get to the bottom of the problem and learn a lot.

It is probably not the cause of the problem, but why all the funky stuff with the EEPROMex and EEPROMVar libraries when the standard EEPROM library is known to work well

I guess if nothing else seems to solve it. I was just wondering if people had experiences of similar situations or if more experienced users would have suggestions for what to try. For a newbie like me would probably take decades to decode all of it.

Can you get it to compile without eepromex. I didnt write the code and am just trying to get it to work.

I possibly could get it working but you have answered my question as to why you are using those libraries

Where did you get the code from ?

I certainly have experience of code that must, obviously work. Except it doesn't. And I can't see the reason. The solution is always to spend a lot of time checking every little bit until you find the problem. For what it's worth there was a bug in some of the demonstration code I put in my Nextion display tutorial that took me about 4 months to find.

Can You tell what the mishap with the multimeter actually did? What conductors did it short?
Your story makes me think that something more then the controller got damaged.

1 Like

From this gentleman.

Connected the ampere mode to ground and 5v like you would connect when measuring for voltage. I believe this connected the ground and 5v frying the arduino as it wouldnt turn on anymore after this

Thanks. Was it the Arduino 5 volt pin? Know that the probe contact surely bounced, like buttons, On, Off, On, Off....
This does not sound like other things got in danger.
Bring up simple test code fot the different devices and verify their condition, one by one.

On a 328p?

One guy swapped + and - when testing a circuit board made for space. The repair cost more then plenty, and his boss had to pay the space company... Accidents do happen. Fine You know what is was!

@ Whandall
An invention maybe?