Jump to content

Segment Display 4x7


Recommended Posts

Hallo und Frohe Weihnachten.

 

An dieser Stelle wollte ich mal ein kleines Projekt vorstellen.

Ich habe dafür das Segment Display 4x7 und das Temperature Bricklet genutzt,

auf dem Segment Display lasse ich abwechseld die Systemuhrzeit und die Temperatur vom Temperature Bricklet anzeigen.

Das ganze habe ich C++ geschrieben,

denn Quellcode habe ich mal angefügt,

falls jemand Tipps und Verbresserungen für den Code hat... ich würde mich freuen. (Ich bin Anfänger seih mir das zusammenkopiern der einzelnen Quellcode verziehen).

#include <stdio.h>
#include <time.h>

#include "ip_connection.h"
#include "bricklet_segment_display_4x7.h"
#include "bricklet_temperature.h"

#define HOST "localhost"
#define PORT 4223



const uint8_t digits[] = {0x3f,0x06,0x5b,0x4f,
                          0x66,0x6d,0x7d,0x07,
                          0x7f,0x6f,0x77,0x7c,
                          0x39,0x5e,0x79,0x71}; // 0~9,A,b,C,d,E,F
int main(void)
{

// Create IP connection
    IPConnection ipcon;
    ipcon_create(&ipcon);

    // Create device object
    SegmentDisplay4x7 sd4x7;
    segment_display_4x7_create(&sd4x7, "iX8", &ipcon); 
    // Create device object
    Temperature t;
    temperature_create(&t, "dX3", &ipcon); 

// Connect to brickd
    if(ipcon_connect(&ipcon, HOST, PORT) < 0) {
        fprintf(stderr, "Keine Verbinung möglich\n");
        exit(1);
    }
while('a'=='a')
{

struct tm *newtime;
time_t long_time;

time( &long_time );
newtime = localtime( &long_time );

int stunde = newtime->tm_hour;
int minute = newtime->tm_min;

//Befehl an die Anzeige senden
uint8_t segmentsuhr[4] = {digits[stunde/10], digits[stunde%10], digits[minute/10], digits[minute%10]};
segment_display_4x7_set_segments(&sd4x7, segmentsuhr, 1, true);
      	usleep(10000000);//10 Sekunden

 // Temperatur auslesen (°C/100)
   		  int16_t temperature;
  		  if(temperature_get_temperature(&t, &temperature) < 0) {
    		  fprintf(stderr, "Kein Wert abrufbar\n");
   		  exit(1);
  		  }

temperature = temperature/100.0;//Temperatur auf 2 Ziffern vor dem Komma bringen
// Temperatur auf Anzeige schreiben
uint8_t segmentstemp[4] = {digits[temperature/10], digits[temperature%10],0x63, digits[12]};
segment_display_4x7_set_segments(&sd4x7, segmentstemp, 1, false);

usleep(10000000);//10 Sekunden

}
ipcon_destroy(&ipcon); // Calls ipcon_disconnect internally
} 

IMAG1316.thumb.jpg.171b932a26a4ec3bba2a795fb731351c.jpg

IMAG1315.thumb.jpg.3506660049a9b015f843225c47f8ea58.jpg

Link zu diesem Kommentar
Share on other sites

sehr schick. ich habe bei mir die Zeitanzeige sekündlich gemacht. Damit konnte ich den  ":" blicken lassen :)

 

ich habe zwei Anzeigen nebeneinander. Die rechte "steht Kopf". Dafür die Zeichen (Python):

DIGITS2= [0x3f,0x30,0x5b,0x79,

          0x74,0x6d,0x6f,0x38,

          0x7f,0x7d,0x7E,0x67,

          0x0f,0x73,0x4f,0x4e] # // 0~9,A,b,C,d,E,F

setz ich bei Zeit mal ins Wiki, bzw. @TF für die Doku.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...