[Gelöst]Bestimmte Stelle einer Variablen(int/double) auslesen.

@rz259

Ja bei dem zweiten if sollte "1" stehen und net "" :slight_smile:

Damit wollte ich genau das if(char1 == '1') umsetzen.

Mir war aber nicht bewusst, dass zwischen " und ' ein Unterschied ist :slight_smile:

Aber es funktioniert jetzt, freut mich total. Hab ewig gebraucht das Segment ausm alten Reciever zu baun und mich mit Shift-register und Multiplexing auseinanderzusetzen.

Thermometer funzt jetzt aber super :slight_smile:

Falls jemand genaueres wissen will hier mal der "Wilde" Code:

#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <SoftwareSerial.h>

SoftwareSerial bluetooth(2, 3); // RX, TX
Adafruit_BMP085 bmp;

/*
billiges China Tempsensor mti Adadfruit libary an A4/A5
Shift Register HC595 wie angegeben
Bluetooth immer als Softserial an 2,3 :)

*/

//Pin connected to ST_CP of 74HC595
int latchPin = 4;
//Pin connected to SH_CP of 74HC595
int clockPin = 6;
////Pin connected to DS of 74HC595
int dataPin = 5;
int wechsel = 500;
int stelle3 = 9;
int stelle2 = 8;
int stelle1 = 7;
char value1 = 0;
char value2 = 0;
int tmp = 0;
String temp = "";
int char1 = 0;
int char2 = 0;

int frame = 5;

void setup() {
  bluetooth.begin(9600);
  Serial.begin(9600);
  if (!bmp.begin()) {
	Serial.println("Could not find a valid BMP085 sensor, check wiring!");
	while (1) {}
  }
  
  //Shift-Register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(stelle1, OUTPUT);
  pinMode(stelle2, OUTPUT);
  pinMode(stelle3, OUTPUT);
 
}

void loop() {
  
  //Zahlenwert der Anzeige für Shift-Output umsetzen
if (value1 == '0') char1 = 20;
if (value2 == '0') char2 = 20;
if (value1 == '1') char1 = 215;
if (value2 == '1') char2 = 215;
if (value1 == '2') char1 = 76;
if (value2 == '2') char2 = 76;
if (value1 == '3') char1 = 69;
if (value2 == '3') char2 = 69;
if (value1 == '4') char1 = 135;
if (value2 == '4') char2 = 135;
if (value1 == '5') char1 = 37;
if (value2 == '5') char2 = 37;
if (value1 == '6') char1 = 36;
if (value2 == '6') char2 = 36;
if (value1 == '7') char1 = 23;
if (value2 == '7') char2 = 23;
if (value1 == '8') char1 = 4;
if (value2 == '8') char2 = 4;
if (value1 == '9') char1 = 5;
if (value2 == '9') char2 = 5;

/*if(char2 <11) char2 ++;
if(char2 == 10){
  char2 = 0;
  char1 = char1++;
 
 } */
  
  
  //Temp einlesen und Speichern in zwei Chars je nach Stelle
  tmp = bmp.readTemperature(); //als Int einlesen
 //Serial.print(tmp);
 //Serial.print(" ");
 
 temp = String(tmp); //als String speichern
 Serial.print(temp);
 Serial.print(" ");
 
 value1= temp.charAt(0); //1stelle speichern
 value2= temp.charAt(1); //2stelle speichern
 Serial.print(value1);
 Serial.print(value2);
  
  //Shift-Register beschreiben
   digitalWrite(stelle1, HIGH);
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, MSBFIRST, char1);
   digitalWrite(latchPin, HIGH);
   delay(frame);
   digitalWrite(stelle1,LOW);
   
   digitalWrite(stelle2, HIGH);
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, MSBFIRST, char2);
   digitalWrite(latchPin, HIGH);
   delay(frame);
   digitalWrite(stelle2,LOW);
   
   digitalWrite(stelle3, HIGH);
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, MSBFIRST, 60);
   digitalWrite(latchPin, HIGH);
   delay(frame);
   digitalWrite(stelle3,LOW);

}

@uwefed

Ja stimmt, bekomme ihn als solchen, speicher ihn aber immer als int. Habs an der Stelle vergessen.

Vielen Dank für deine Anregung. Das hatte ich die ganze Zeit gesucht, weil ichs vorher schonmal so gesehen hatte, aber nicht mehr gefunden.

Werds bei Gelegenheit auch nochmal ausprobieren :slight_smile: