Artikel-Schlagworte: „C-Berry“

Update: C-Berry Text aufs Display

Vor einiger Zeit habe ich mich mit dem C-Berry-Display für den RaspberryPi beschäftigt und ein kleines Programm geschrieben, mit dem man relativ einfach Text auf das Display schreiben kann.
Nun ist etwas Zeit vergangen und ich habe das Programm um zwei Parameter erweitert. Man kann den Text und in fetter Schrift ausgeben und eine Hintergrundtransparenz einschalten. So kann man zum Beispiel ein erst Bild ins Display laden und darüber dann einen transparenten Text ausgeben.
Alles wie immer ohne Gewähr… ;-).

Benutzt wird das Programm wie folgt:

Wobei Transparenz und Bold entweder den Wert Null oder Eins haben muss. 0 -> Eigenschaft ausgeschaltet, 1 -> Eigenschaft eingeschaltet
Die anderen Parameter erkläre ich hier jetzt nicht nochmal, da hat sich nichts geändert. Schaut bei Bedarf einfach mal hier nach.

Hier der Quellcode:

C-Berry: Linien zeichnen

Recktecke und Kreise sind zwar schon recht hübsch, aber Linien braucht man auch noch ;-).

Benutzung:

 

Hier der Quellcode:

 

Und für alle, die zu faul zum Abtippen sind, hier das File zum Download: tft_line.c

C-Berry: Rechtecke zeichnen

Und weiter geht’s mit dem C-Berry-Display. Diesmal werden Rechtecke gezeichnet.

Genutzt wird der Befehl wie folgt:

x1,y1: Ecke  oben links, gültige Werte: x1 0…319, y1 0…239
x2,y2:  Ecke unten rechts, gültige Werte: x2 0…319, y2 0…239
color:  Farbe, mit der das Rechteck gezeichnet wird
modus:  0 – nicht gefüllt, 1 – gefüllt zeichnen

Auch hier ist es so, dass das Rechteck komplett gefüllt gezeichnet wird.

UPDATE:

Auch dieser Quellcode und die dazugehörige Datei zum Download sind aktualisiert. Es können jetzt auch ungefüllte Rechtecke gezeichnet werden.

 

Quellcode:

Und hier die Datei zum Runterladen.

 

C-Berry: Kreise zeichnen

Heute gibt es den nächsten Schnipsel C-Code rund um das C-Berry Display. Diesmal geht es um das Zeichnen von Kreisen.
Mit tft_circle lassen sich, wie schon geschrieben, Kreise auf das Display zeichnen.

Aufgerufen wird der Befehl mit den folgenden Parametern:

tft_circle position_x position_y radius füllfarbe modus

Dabei haben die einzelnen Parameter folgende Wertebereiche:

  • Position_X: 0…319
  • Position_Y: 0…239
  • Radius: 0…319
  • Füllfarbe: 0…255
  • Modus: 0 – nicht gefüllt, 1 – gefüllt zeichnen

In dieser Version lassen sich nur gefüllte Kreise zeichnen, will man einen einfachen Kreis ohne Füllfarbe, zeichnet man einfach einen zweiten Kreis an die gleiche Position, verkleinert den Radius und nutzt die aktuelle Hintergrundfarbe zum Zeichnen. Ich denke darüber nach, eine zweite Version zu schreiben, die das automatisch erledigt. Mal sehen… ;-).

Update!

Ich habe mich nochmal durch den Beispielcode gekämpft und gesehen, dass es da schon eine Option gibt, Kreise und Rechtecke gefüllt oder eben nicht gefüllt zu zeichnen. Sourcecode und Datei zum Download sind entsprechend aktualisiert.

Hier nun der Quelltext:

Und für alle, die zu faul zum Abtippen sind, hier das File zum Download.

 

Neues von der Himbeere

C-Berry-DisplayVor einiger Zeit erwarb ich für den Raspberry Pi ein TFT-Display namens C-Berry mit 320×240 Bildpunkten. Bislang lag das mehr oder weniger in der Ecke, weil die Ansteuerung nur über C-Programmierung zu machen ist, bzw. über einen Umweg mit Python. Wobei dort mithilfe von Pygame ein Bild erzeugt wird und dieses dann per Shell-Kommando zum Display übertragen wird. Nicht gerade effektiv…
 
Also setzte ich mich hin, schnappte mir ein Buch für C-Anfänger und wurschtelte mich durch die mit dem Display gelieferten Beispiele. Inzwischen bin ich soweit, dass ich mir eigene Shell-Befehle zum Zeichnen von Linien, Rechtecken und der Ausgabe von kurzen Textschnipseln gebastelt habe. Letzterer ist noch nicht perfekt, weil der Text am Ende einer Displayzeile zwar umgebrochen wird, aber das passiert eben auch mitten in einem Wort. Und das ist dann ja nicht so toll… ;-).
 
Weitere Befehle zum Initialisieren und Löschen des Displays, sowie der Einstellung der Helligkeit habe ich hier gefunden.
 
Natürlich will ich den ganzen Kram nun nicht nur für mich behalten. Vielleicht hilft es dem einen oder anderen bei der Umsetzung eigener Projekte. Außerdem wäre es ja cool, wenn es jemand noch verbessern und ich dabei auch etwas lernen kann.
 
Heute gibt es zunächst den Code-Schnipsel zum Anzeigen von Text auf dem C-Berry. Wenn ihr es kompilieren wollt, solltet ihr euch vorher die orginale Software von Admatec herunterladen und entpacken. Dort findet ihr alle benötigten Header-Dateien.
 
Ich habe mir für meine Programme ein eigenes Verzeichnis angelegt und alle benötigten Dateien einschließlich des makefiles dorthin kopiert. Den nachfolgenden Code müsst ihr dann in eine Datei (bei mir heißt sie tft_string.c) kopieren.
 


#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include "RAIO8870.h"
#include <string.h>
int main( int argc, char *argv[] )
{
char text[255];
strcpy(text,argv[6]);
int fsf=atoi(argv[1]);
int px=atoi(argv[2]);
int py=atoi(argv[3]);
int col_fg=atoi(argv[4]);
int col_bg=atoi(argv[5]);

if (!bcm2835_init()){
printf("tft_string: Error, check your display!\n");
exit(1);
}

if( argc < 1 || argc > 7){
printf("tft_string: Error, check arguments!\n");
printf("Use 'tft_string fontsize pos_x pos_y fg_color bg_color string'");
exit(1);
}

if( strlen(text) > 255){
printf("tft_string: Error, string too long! Limit: 255 chars \n");
exit(1);
}

if( col_fg < 0 || col_fg > 255){
printf("tft_string: Error, foregroundcolor out of range! Use 0...255! \n");
exit(1);
}

if(col_bg < 0 || col_bg > 255){
printf("tft_string: Error, backgroundcolor out oft range! Use 0...255!\n");
exit(1);
}

if( px < 0 || px > 319){
printf("tft_string: Error, pos_x out of range! pos_x: 0...319!\n");
exit(1);
}

if ( py < 0 || py > 239){
printf("tft_string: Error, pos_y out of range! pos_y: 0...239!\n");
exit(1);
}
if ( fsf < 0 || fsf > 20){
printf("tft_string: Error, bad fontsize! fs: 0...20!\n");
exit(1);
}

RAIO_SetFontSizeFactor ( fsf );

RAIO_print_text ( px, py, text, col_bg ,col_fg);


return 0;
}

 

Vor dem Kompilieren müsst ihr das orginale Makefile noch etwas bearbeiten, sonst rattert es Fehlermeĺdungen 😉
 

all: tft_string

tft_string: tft_string.o tft.o RAIO8870.o
gcc tft_string.o tft.o RAIO8870.o -lbcm2835 -lrt -o tft_string

tft.o: tft.c tft.h
gcc -Os -c tft.c

tft_string.o: tft_string.c
gcc -Os -c tft_string.c

RAIO8870.o: RAIO8870.c RAIO8870.h
gcc -Os -c RAIO8870.c

clean:
rm -rf *o tft_string

 
So sollte es anschließend aussehen. Danach wird das Progrämmchen mit “make” erstellt. Wenn alles ohne Fehlermeldung kompiliert wurde könnt ihr es gleich testen mit einem fröhlichen “Hallo Welt” :-).
 

sudo ./tft_string 0 10 10 255 0 "Hallo Welt"

 
Wichtig: alle Parameter nach dem “./tft_string” müssen durch Leerzeichen voneinander getrennt sein! Die Parameter bedeuten im einzelnen:

0 ------------ Schriftgröße, gültiger, von mir willkürlich festgelegter Wertebereich 0-20
10 10 -------- Cursorposition x y, gültiger Wertebereich: x 0-319, y 0-239
255 ---------- Schriftfarbe, hier Weiß, gültiger Wertebereich: 0-255
0 ------------ Hintergrundfarbe, hier Schwarz. Gültiger Wertebereich: 0-255
"Hallo Welt" - sollte klar sein. Es sind maximal 255 Zeichen möglich.

 
Damit der Befehl systemweit aufgerufen werden kann, kopiert ihr ihn (wenn er euch gefällt und funktioniert) nach /usr/bin.
 
Für Fragen, Anregungen und Hinweise nutzt bitte die Kommentarfunktion (solange sich der SPAM in Grenzen hält) oder das Kontaktformular!
Sollten hier irgendwo grobe Fehler vorhanden sein, denkt bitte dran: Ich bin C-Anfänger! Also bitte nicht hauen, sondern sagen, wie man es besser macht… 😉
 
Hier noch ein kleines Demo. Ein Shellscript, das die Uhrzeit auf das C-Berry schreibt, bestehend aus ganzen 8 Zeilen… 🙂
 

Folge mir auf Twitter
Wetter aktuell
Messung vom 25.11.2017, 00:56

Temperatur: 7.4°C
rel. Luftfeuchtigkeit: 67 %

Wind: 0 km/h

Regensensor: 0 => Kein Regen

Luftdruck: 1009.75 hPa

Feinstaubmesswerte:

PM2,5: 10.6 μg/m³
PM10: 13.5 μg/m³

Sonnenaufgang:  08:41
Sonnenuntergang: 17:12

Von der Idee zur Frontplatte in unter vier Stunden. #FreeCAD #3D-Druck #Rasperry pic.twitter.com/UMGB…

Vor etwa 2 Tagen von portitzers Twitter via Twitter for Android

Aus dem Fotoalbum

Moscheen, Kirchen, Synagogen - Akko

Blühender Granatapfel in Akko

Markt in Akko