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
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 119 14.10.2016 21:40
Letzter Beitrag: hotsystems
Sad Ich brauche Hilfe Prosac 4 232 09.10.2016 18:39
Letzter Beitrag: Prosac
  at24c256 Hilfe Gandalf 6 248 29.08.2016 18:59
Letzter Beitrag: MKc
Smile Progammier Neuling Codeschloss bittet um Hilfe Donalonso 2 285 27.08.2016 18:23
Letzter Beitrag: Binatone
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 449 22.08.2016 08:07
Letzter Beitrag: b3ta
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 180 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 542 06.07.2016 14:59
Letzter Beitrag: Binatone
  Hilfe beim Arduino Shield reimundko 6 455 05.06.2016 11:28
Letzter Beitrag: rpt007
Smile Datum Anzeige mit 7 Segmentanzeige ottii50 11 896 16.05.2016 19:12
Letzter Beitrag: Mathias
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 527 23.04.2016 10:26
Letzter Beitrag: rkuehle

Gehe zu:


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