Artikel-Schlagworte: „C“

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.

 

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 12.12.2017, 01:27

Temperatur: 7.4°C
rel. Luftfeuchtigkeit: 38 %

Wind: 1.3 km/h

Regensensor: 0 => Kein Regen

Luftdruck: 985 hPa

Feinstaubmesswerte:

PM2,5: 2.2 μg/m³
PM10: 3.1 μg/m³

Sonnenaufgang:  09:04
Sonnenuntergang: 17:03

@rene_schmidt Und hast du eine Lösung gefunden?

Vor etwa 4 Stunden von portitzers Twitter via Twitter for Android

Aus dem Fotoalbum

Moscheen, Kirchen, Synagogen - Akko

Blühender Granatapfel in Akko

Markt in Akko