Kombi zweier Sketches schlägt fehl

Hallo, ich möchte drei verschiedene Sensoren (Abstands-, Lagesensor, PT1000) miteinander kombinieren. Die einzelnen Sketches funktionieren und auch die Kombi aus Abstandssensor und Lagesensor klappt. Aber wenn ich nun noch den Sketch vom PT1000 einbringe, werden falsche Werte ausgegeben.

Weiß jemand weiter?

Das ist der Code alleinig für den PT1000:

int analogPin = 0;
int value = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  value = analogRead(analogPin);
  Serial.print("PT1000 = ");
  Serial.println(value);
  delay(500);
}

Das ist mein gescheiterter Versuch:

#include <MMA7660.h> //Lagesensor
#include <Wire.h>  //Lagesensor
MMA7660 acc;  //Lagesensor


#include <LiquidCrystal.h>
#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

const int rs = A0, en = A1, d4 = A5, d5 = A4, d6 = A3, d7 = A2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long int zeit=0;
long int altercount=0;
long int distance=0;
long int inc;

int analogPin = 0; //Referenzsensor PT1000
int value = 0;  //Referenzsensor PT1000

void setup() {

  acc.init(); //Lagesensor
  pinMode(13, OUTPUT);  //Lagesensor

   
  Serial.begin(115200);

  // wait until serial port opens for native USB devices
  
  while (! Serial) {
    delay(1);
  }
  Serial.println("hallo");
  Serial.println("Adafruit VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // power 
  Serial.println(F("VL53L0X API Simple Ranging example\n\n")); 

    //Display setup
   
     lcd.begin(16,2);
     lcd.noAutoscroll();
  //Display Test
  //  lcd.clear();
    lcd.setCursor(0,0);



   
   
 // Timer 1 zur Zeitstempelerstellung für die Messung im normalen Overflowmode aber ohne Interrup
      noInterrupts();          // Alle Interrupts temporär abschalten !!Achtung deaktiviert Serielle Schnittstelle
      TCCR1A = 0; //Konfigurationsregister löschen
      TCCR1B = 0;
      TIMSK1 =0;
      TCNT1 = 0;          //am Start mit 0 belegen  
      TCCR1B = 0; 
      TCCR1B |= (1 << CS10); 
      TCCR1B |= (1 << CS12);   // 1024 als Prescale-Wert spezifizieren 
       /*
       Kein Prescaler: TCCR1B = 0; TCCR1B |= (1 << CS10);
    Prescale = 8: TCCR1B = 0; TCCR1B |= (1 << CS11);
    Prescale = 64: TCCR1B = 0; TCCR1B |= (1 << CS10); TCCR1B |= (1 << CS11);
    Prescale = 256: TCCR1B = 0; TCCR1B |= (1 << CS12);
    Prescale = 1024: TCCR1B = 0; TCCR1B |= (1 << CS10); TCCR1B |= (1 << CS12); 
   */                   
  /* 
   Clock 16MHz / 1024 = 15,625kHz dt zwischen den counts= 64µs
     */
   

//  Timer 3 für die Aktualisierungsfrequenz des Displays aktivieren

      TCCR3A = 0; //Konfigurationsregister löschen
      TCCR3B = 0;
      TIMSK3 =0;
      TCNT3 = 49911;          //64µs 1s/64µs=15625    65536-15625=49911 ergibt eine Sekunde

      TCCR3B = 0; 
      TCCR3B |= (1 << CS10); 
      TCCR3B |= (1 << CS12);   // 1024 als Prescale-Wert spezifizieren   Clock 16MHz / 1024 = 15,625kHz dt zwischen den counts= 64µs
   
      TIMSK3 |= (1 << TOIE3);   // Timer Overflow Interrupt aktivieren
  interrupts();             // alle Interrupts scharf schalten

 
}


void loop() {
  VL53L0X_RangingMeasurementData_t measure;
    
 // Serial.print("... ");
  lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!

  if (measure.RangeStatus != 4) {  // phase failures have incorrect data
    Serial.print("mm:"); 
    distance=measure.RangeMilliMeter;
    Serial.println(distance);
  } else {
    Serial.println("na");
  }
   Serial.print("dt:");
   Serial.println(CalcDeltaT(TCNT1));
   Serial.print("n:");
   Serial.println(inc);
   inc++;

  value = analogRead(analogPin);  //Referenz PT1000
  Serial.print("PT1000 = ");  //Referenz PT1000
  Serial.println(value);  //Referenz PT1000

  
  static long cnt = 0; //Lagesensor
  static long cntout = 0; //Lagesensor
  float ax,ay,az;  //Lagesensor
  int8_t x, y, z;  //Lagesensor
 
  acc.getXYZ(&x,&y,&z);  //Lagesensor
 
  Serial.print("x = ");
  Serial.println(x);
  Serial.print("y = ");
  Serial.println(y);
  Serial.print("z = ");
  Serial.println(z);
 
 
  if(acc.getAcceleration(&ax,&ay,&az))
  {
  Serial.print("get data ok: ");
  }
  else
  {
  Serial.print("tiem out: ");
  }
 
  Serial.println("accleration of X/Y/Z: ");
  Serial.print(ax);
  Serial.println(" g");
  Serial.print(ay);
  Serial.println(" g");
  Serial.print(az);
  Serial.println(" g");
  Serial.println();
  delay(700);  //Lagesensor ende
   
 
 // delay(100);//ms
}



long int CalcDeltaT (long int counts)
{
   if(counts>altercount)
  {zeit=(counts-altercount)*64;
  }
  else
  {
  zeit=((65536-altercount)+counts)*64;  //ein Count entspricht nach obiger Teilung 64µs, dh. zeit in µs
  }
  
  
  altercount=counts;
  return zeit;
  }

  
 // für den Timer 3 Overflow
ISR(TIMER3_OVF_vect)        
{ noInterrupts();
  TCNT3 = 49911;
  if (distance<1300)
  {
  lcd.setCursor(0,0);
  lcd.println(distance);
  lcd.setCursor(4,0);
  lcd.print("mm");
  } 
  else
{
  lcd.setCursor(0,0);
  lcd.println("oR");
}
 interrupts(); 
}

Vielen Dank für die Hilfe!

Ich habe mir deinen Sketch nicht weiter angesehen, da dieser Grundsätzlich schon einen einen Fehler zeigt.
Du verwendest die I2C-Leitungen für dein LCD-Anschluss, welches parallel betrieben wird.
Das ist schon mal falsch, da du I2C auch noch benötigst.
Warum verwendest du keinen I2C-Adapter für dein Display ?

Das solltest du erst mal in Ordnung bringen.

Und zusätzlich willst du noch einen analogen Sensor am digitalen Pin D0 anbauen, das geht auch nicht.
Der wird vom USB-Wandler genutzt.

Hallo,

der Sketch ist ja wirklich grauenvoll. Auf der einen Seite wird die loop mit delay blockiert und um das zu umgehen baut man mit einem Timer die sekündliche Displayausgabe. long int wurde auch wild woher kopiert.

Tipp. Vergiss das alles und fang komplett von vorn an. Davor beschäftige dich mit millis().

Theseus erklärt millis()

GuntherB - BlinkwithoutDelay - Die Nachtwächtererklärung

Und zusätzlich willst du noch einen analogen Sensor am digitalen Pin D0 anbauen, das geht auch nicht.
Der wird vom USB-Wandler genutzt.

Das sehe ich nicht!
analogRead(0) liest von A0

Ist nicht schön, aber dennoch ok.

combie:
Das sehe ich nicht!
analogRead(0) liest von A0

Ist nicht schön, aber dennoch ok.

Ah..ok, hatte ich übersehen.
Dennoch nicht ok, da A0 schon für das Display definiert wurde.

Dennoch nicht ok, da A0 schon für das Display definiert wurde.

Da hast du allerdings voll Wahr!
(ist mir doch glatt durch die Lappen gegangen)

Vielen Dank für eure Bemühungen und Vorschläge! Dass Die Codes ziemlich chaotisch und ineffektiv sind, weiß ich. Das hat verschiedene Gründe. Dennoch at bisher alles soweit funktioniert. Ich werde mich mal weiter daran probieren und versuchen, es zu verbessern.

bJohanna732:
.....Dennoch at bisher alles soweit funktioniert......

Das glaube ich dir wiederum nicht.

Wenn du mehrere Pins doppelt für unterschiedliche Funktionen nutzt, kann es nicht funktionieren.

Da musst du zwingend dran arbeiten und aufräumen.