Jump to content

Segment Display 4x7


tatzemax

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 to comment
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 to comment
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...