Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: 1 2 [3]   Go Down
Author Topic: RF12 Datenstruct senden, empfangen und wieder trennen  (Read 4312 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, jetzt sehe ich ein wenig klarer. Was genau steht denn nun in now nach
Code:
byte now[6];
getDate(now);

drin?

So wie ich das sehe, ist das in now[0] z. B. das Jahr - allerdings nicht als char, sondern als byte.

Du musst das nun wirklich in einen String umwandeln, der auch nullterminiert sein muss.
Ich würde mal folgendes versuchen:

Code:
byte now[6];
char temp[3];

getDate(now);
// Ausgabe Jahr
lcdTime((int) now[0], temp);
glcd.drawString(13, 44, temp);
// Ausgabe Monat

lcdTime((int) now[1], temp);
glcd.drawString(.., .., temp);

// etc.

void lcdTime(int intWert, char charWert[3]){
  Serial.println(intWert);
   itoa (intWert, charWert, 10);
   Serial.println(charWert);
return charWert;
}
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmm, klappt leider nicht.
Folgende Meldung beim compilieren:
HeimKlima.cpp: In function 'void lcdTime(int, char*)':
LCD:22: error: return-statement with a value, in function returning 'void'

Ok habs raus bekommen!
Code:
char* lcdTime(int intWert, char charWert[3]){
  Serial.println(intWert);
   itoa (intWert, charWert, 10);
   Serial.println(charWert);
return charWert;
}
da stand noch VOID.
Und es geht nun.
Damit kann ich weiter arbeiten.
Ich muss sicher noch schauen was passiert wenn die Zahlen nur einstellig sind.
Mal schauen jetzt ist erstmal Schluss für Heute.

DANKE, Du hast mich ein ganzes Stück weiter gebracht
« Last Edit: March 26, 2012, 02:24:04 pm by MueThoS » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry, war gestern schon ein bisschen unkonzentriert und habe das "return"-Statement übersehen;-) Das muss natürlich richtig lauten:

Code:
void lcdTime(int intWert, char charWert[3]){
  Serial.println(intWert);
   itoa (intWert, charWert, 10);
   Serial.println(charWert);
}

Rudi
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oder so,
 das return drinne lassen und anstatt void lcdTime  char* lcdTime schreiben ging auch
Was ist besser oder richtiger?
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mir gefällt die Variante mit void besser. Ich finde es keinen besonders guten Stil, wenn man einen Parameter hat und den dann auch noch als return-Wert benutzt.
Ich würde entweder nur einen return-Wert nehmen (dann musst du dich aber um die Speicherallokation und -freigabe kümmern) oder die Variante mit dem Wert als Parameter, aber nicht einen Mischmasch.

Das sehen aber andere Leute vielleicht wieder ganz anders;-)

Rudi
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habs so gemacht wie du es gesagt hast!

Und hab gleich die nächste Frage:
kann ich bei einem switch/case auch ich sage mal Bereiche definieren?
Ich mache ja normal sowas:
Code:
switch(test){
case 1
...
break;
case 2
...
break;
case X
...
break;
}

Kann ich auch irgendwie sowas machen:
Code:
switch(test){
case 1
...
break;
case 2
...
break;
case 3-10       <----- wenn test 3 bis 10 sein sollte
...
break;
}
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nee, Bereiche gehen nur, wenn du if-Statements verwendest. Allerdings kannst du durch die einzelnen Bedingungen "durchfallen", d. h. du verwendest dort kein break-Statement:

Code:
switch(test){
case 1
...
break;
case 2
...
break;

case  3:
case  4:
case  5:
case  5:
case  6:
case  7:
case  8:
case  9:
case  10:
// code
break;

}


Funktioniert soweit ganz gut - aber schön ist was anderes;-)

Rudi
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für den Tip!
Ich habs mit den Ifs gemacht.
Meine Setuproutine funktiniert!
Ich kann über den encoder im Setupscreen
1. Zeit und Datum einstellen (wird in der RTC gespeichert)
2. Für die Sensoren Namen vergeben wie Wohnzimmer oder Schlafzimmer.
    (Diese Daten werden im Eeprom gespeichert)
Nach X Zeit springt er aus dem Setupscreen in den Standartscreen.
dieser wird als nächstes in angriff genommen.

Einzige was nicht so schön funktiniert:
Der encoder dreht wunderbar vorwärts aber nicht so schön rückwrts.

naja mal schauen....
updates folgen mit video  smiley
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Video vom Setup:


Das die Anzeige dunkel wird liegt daran das der Rest noch nicht implementiert ist.
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Guten Morgen,
ich habe mal wieder eine Frage:
Ich habe ein Array:
Code:
char* roomName[roomName_SIZE] = {"aus","N. N.","Wohnzimmer","Schlafzimmer","Kueche","Buero","Bad"};
Jetzt möchte ich auf dem Display den jeweiligen Namen des Sensors zentriert anzeigen und das soll automatisch passieren.
Dafür brauche ich aber die Länge des Namens.
Also bei Wohnzimmer z.B.: 10
Ich habe zwar etwas zu sizeof und length gefunden aber irgendwie machen die nicht was sie sollen. bzw nicht was ich möchte
Code:
roomName[payload[sensor].roomID].length()
Code:
sizeof(roomName[payload[sensor].roomID])
Code:
sizeof(roomName[payload[sensor].roomID])/sizeof(int)
Bringt alles nicht das was ich brauche
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dafür ist die Funktion

strlen()

dein Freund.


Rudi
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

THX!!
weiter geht's....
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So mal was anderes:
Ich brauche Netzteile für meine Sensoren.
Und zwar müssen die ganz klein sein und ohne Gehäuse für direkten Anschluss an 230V.
3,5-5V Ausgangsspannung.
Betreiben möchte ich die Jeenodes damit.
Am liebsten währen mir diese Dinger: http://jeelabs.org/2012/01/27/cant-be-done/
Leider verkauft er diese nicht.
Aber die würden super passen.
Könnte man sicher auf einer Lochraster aufbauen oder?

Hat sonst jemand ne alternative?
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So, ich versuch es nochmal:
Ich suche eine Stromversorgung für meine Home-Temp-Überwachung.

Diese wird in ein Steckergehäuse gebaut: http://www.reichelt.de/?ARTICLE=33970;PROVID=1024
Die Platine die dort rein kommt sit folgende: http://jeelabs.net/projects/9/wiki/JeeNode
Mit dem RoomBoard (das ist aber nicht wirklich Platzintensiev.

Dafür brauche ich nun eine Spannungsversorgung.

Vom Formfaktor her währe die Größe wie sie hier : http://jeelabs.org/2012/01/27/cant-be-done/
verwendet wurde ideal.
Wie schon erwähnt gibt es diese Platine aber nicht zu kaufen.

Könnt Ihr mir eine Alternative empfehlen?
Logged

Germany
Offline Offline
Edison Member
*
Karma: 50
Posts: 2372
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Du könntest theoretisch die Schaltung auch auf Lochraster nach bauen, vom Schaltungsdesign ist sie ja kaum anders als der Conrad-Bausatz zum Betrieb einer LED an 230V. Alternativ gibt es die USB-Handyladeteile von Drittherstellern, die auch nur ein paar Euro kosten.
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Pages: 1 2 [3]   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: