INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 1 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
21.07.2015, 08:27 (Dieser Beitrag wurde zuletzt bearbeitet: 21.07.2015 08:54 von ottii50.)
Beitrag #17
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Ich hab jetzt mal die Werte im Sender und Empfänger auf den seriellen Monitor anzeigen lassen
Sender:
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
" Serial.print(msg); " der Wert 25.50
delay(200);

Empfänger:
char temp=0;
for (int i = 0; i < buflen; i++)
{
temp=(char)buf[i];
" Serial.print(temp); " der Wert 25.50

Ich hoffe, dass es so richtig ist Exclamation

Die Anzeige will aber immer noch nichtHuhHuhHuh

Hallo Thorsten, ich glaube es liegt wieder an der Übertragung der Bytes.
Ich hab den Sketch mal versucht umzuschreiben, bekomme aber nur Fehler angezeigt.
PHP-Code:
#include <VirtualWire.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature Sensor(&oneWire);

char msg[6];

const 
int LED 13;
const 
int TX 3;

void setup() {
// Comunicacao com o Serial Monitor
Serial.begin(9600); // baud-rate
Serial.println("Transmissor");
Sensor.begin();
// Inicializando E/S do transmissor
vw_set_tx_pin(TX);
vw_set_ptt_inverted(true); // Requerido para DR3100
vw_setup(5000); // Bits por segundos
}

void loop() {
Sensor.requestTemperatures();

float temperature Sensor.getTempCByIndex(0);

dtostrf(temperature62msg);

Serial.print(msg);
Serial.println(" *C");
delay(1000);

// Funcoes para transmissao

//Lendo e armazenando o valor da temperatura
// Convertndo int para char
char SensorCharMsg[10];
itoa(msgSensorCharMsg,10);

digitalWrite(LEDHIGH); // Pisca LED no pino 13 enquanto esta transmitindo
uint8_t tempAsByte msg;
vw_send(&tempAsByte1);
vw_wait_tx(); // Espera o envio da informacao
digitalWrite(LEDLOW);
delay(1000);

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.07.2015, 09:44
Beitrag #18
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Hi,
nein, so geht das nicht. Du wandelst die Temperatur in eine Zeichenkette und versuchst das dann als ein Byte zu übermitteln. Das ist natürlich Quatsch.
Da sinnvolle Temperaturen wahrscheinlich locker in 8 Bit passen könntest Du es so machen:
Code:
float temperature = Sensor.getTempCByIndex(0);

int8_t tempAsByte = temperature;
Serial.print(tempAsByte);
Serial.println(" *C");
delay(1000);

digitalWrite(LED, HIGH); // Pisca LED no pino 13 enquanto esta transmitindo
vw_send((unit8_t*)(&tempAsByte), 1);
vw_wait_tx(); // Espera o envio da informacao
digitalWrite(LED, LOW);
delay(1000);
}

Im Empfänger-Sketch musst Du dann auch int8_t als Datentyp verwenden.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.07.2015, 10:44
Beitrag #19
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Prima Thorsten, dass geht, DANKEExclamation
Hier war ein kleiner Schreibfehler:vw_send((unit8_t*)(&
habs aber gefunden.
Jetzt wird nichts im Seriellen Monitor ausgegeben. ist aber nicht so wichtig.
Mich interessiert jetzt noch wie ich das mit den 3 Stellen mache, so das auch zwei stellige Minustemperaturen angezeigt werden..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.07.2015, 17:04
Beitrag #20
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Hi,
ich hab jetzt mal mein Steckboard um eine Stelle erweitert.
Hab auch versucht den Sketch umzuschreiben, damit er die Stelle auch anzeigt.
Geht aber nichtAngry
Code:
void displayNumber(int n)
{
int left, mitte, right=0; // hier hab ich mitte eingefügt

if (n < 0)
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, digits[n * -1]);
shiftOut(DATA, CLOCK, LSBFIRST, 2);  // 2 muesste das Minuszeichen sein
digitalWrite(LATCH, HIGH);
} else if (n < 10)
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, digits[n]);
shiftOut(DATA, CLOCK, LSBFIRST, 0);
digitalWrite(LATCH, HIGH);
}
else if (n >= 10)
{
right = n % 10;  // und die drei Zeilen hab ich auch geändert
mitte = n % 10; //
left = n / 100;  //
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.07.2015, 17:17
Beitrag #21
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Code:
void displayNumber(int8_t n)
{
byte left = 0;
byte mitte = 0;
byte right = 0;
int8_t absN = n;
if(absN < 0) {
  left = 2;
  absN *= -1;
};
if(absN >= 10) {
  mitte = digits[absN / 10];
}else{
  mitte = left;
  left = 0;
};
right = digits[absN % 10];

digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, right);
shiftOut(DATA, CLOCK, LSBFIRST, mitte);
shiftOut(DATA, CLOCK, LSBFIRST, left);  
digitalWrite(LATCH, HIGH);
}

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.07.2015, 07:29
Beitrag #22
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Thorsten, ich bin begeistert. DankeExclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.07.2015, 19:07
Beitrag #23
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Hi, soweit alles prima.
ich hab jetzt gedacht noch zwei 7Seg. hinzuzufügen um die Innentemperatur mit anzuzeigen. Also hab ich noch einen DS18B20 an Pin 7 gelegt und die zwei Anzeigen mit den 595 versehen.
Aber beim versuch den Sketch so zu schreiben das er auch das macht was er soll gerate ich ins schwitzen und bekomme nur Fehler.
Gruß
ottii....

Code:
#define DATA 6
#define LATCH 8
#define CLOCK 10
#include <VirtualWire.h>
#include <OneWire.h>
int DS18B20_Pin = 7;
OneWire ds(DS18B20_Pin);

int digits[] = {252, 96, 218,242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142};
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_set_rx_pin(2); //Orginal pin 15
vw_setup(5000); // Bits per sec
vw_rx_start();
}
void displayNumber(int8_t n)
{
byte left = 0;
byte mitte = 0;
byte right = 0;
int8_t absN = n;
if(absN < 0) {
left = 2;
absN *= -1;
};
if(absN >= 10) {
mitte = digits[absN / 10];
}else{
mitte = left;
left = 0;
};
right = digits[absN % 10];
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, right);
shiftOut(DATA, CLOCK, LSBFIRST, mitte);
shiftOut(DATA, CLOCK, LSBFIRST, left);
digitalWrite(LATCH, HIGH);
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{
char temp=0;//mod:tim:added a temporary character
for (int i = 0; i < buflen; i++)
{
temp=(char)buf[i];//mod:tim:convert uint to char
Serial.print(temp); //mod:tim:changed buff[i] to temp here
}
Serial.println("");
if(buf[0]=='1'){
}
if(buf[0]=='0'){
}
float temperature = getTemp();
Serial.println(temperature);
}
float getTemp();
{
//returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
}
displayNumber(temperature);
displayNumber(temp);
delay(1000);
}}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.07.2015, 19:09
Beitrag #24
RE: Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe
Schreib doch mal, welche Fehler Du bekommst.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Mega2560 bitte um Hilfe dickys68 2 65 Heute 00:15
Letzter Beitrag: georg01
Sad Hilfe bei 2.4 TFT Display Harry Hirsch 54 2.278 21.05.2018 21:15
Letzter Beitrag: Tommy56
  hilfe bei callback ausgabe per knopfdruck merz 5 234 15.04.2018 14:16
Letzter Beitrag: Tommy56
  Hilfe bei Fehlermeldung TroyPan 3 344 23.03.2018 23:38
Letzter Beitrag: Tommy56
  Hilfe beim skript Devtris 24 1.353 12.03.2018 18:19
Letzter Beitrag: Tommy56
  Hilfe bei einen kleinen Programm FPV 9 932 11.03.2018 20:42
Letzter Beitrag: Tommy56
  Hilfe beim Programmieren Klawino 28 1.622 10.03.2018 13:36
Letzter Beitrag: hotsystems
  Hilfe bei der Programmierung Digitaluhr ,mit Anzeige 32x8 Lora 1 316 10.03.2018 11:44
Letzter Beitrag: hotsystems
  Hold Button - Doppel Klick Hilfe GSA1150 8 659 08.03.2018 16:24
Letzter Beitrag: Tommy56
  Brauch hilfe bei einnem Sketch MrMagoo 10 623 11.02.2018 13:49
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste