Forum: Mikrocontroller und Digitale Elektronik C-Problem mit Rapberry Pi


von Michael M. (mj09)


Lesenswert?

Hallo Leute,
ich teste gerade einen Raspberry pi.
Ich will von der Uhrzeit die Sekunden auf einer 7-Segment Anzeige 
anzeigen lassen.
Nun habe ich ein Problem mit dem C-Code.

Hier mein ein Teil meines Codes:
        int pin0 = 15;
        int pin1 = 16;
        int pin2 = 1;
        int pin3 = 4;
        int pin4 = 5;
        int pin5 = 6;
        int pin6 = 10;
        int pin7 = 11;

        for (x=7; x>=0; x--)
        {

                if (sec & 1<<x)
                {
                        digitalWrite(pin&x, 0);
                        //printf("1");

                        }
                else
                {
                        digitalWrite(pin&x, 1);
                        //printf("0");

                }


        }
Wie bekomme ich es hin das die Variable in diesem Befehl 
(digitalWrite(pin&x, 0);) korrekt eingestzt wird?

Kann mir jemand helfen?


Viele Grüße

Michael

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Michael Mayer schrieb:
> Wie bekomme ich es hin das die Variable in diesem Befehl
> (digitalWrite(pin&x, 0);) korrekt eingestzt wird?

Kauf Dir ein C-Buch.

Ernsthaft.

Variablennamen lassen sich nicht "on-the-fly" aus anderen Dingen 
erzeugen. Für das, was Du da willst, wurden Arrays erfunden.

Die sind im C-Buch beschrieben, das Du Dir anschaffen solltest.

Nein, kein "Tutorial", keine Online-Lehrvideos, ein Buch.

Empfehlenswert: Brian Kernighan & Dennis Ritchie, "Programmieren in C", 
zweite Ausgabe, Hanser-Verlag.

(Beschreibt zwar "nur" C89 und nicht C99, ist aber bei so 
fundamentalen Dingen wie Deiner Problemstellung hier mehr als völlig 
ausreichend)

von Birne (Gast)


Lesenswert?

Benutze dafür am besten Arrays.
hier ein gutes tutorial wie das geht:
http://pw1.netcom.com/~tjensen/ptr/ch2x.htm

von Michael M. (mj09)


Lesenswert?

Hallo Birne,
danke für die Antwort.

Ich habe ein Char-Feld eingefügt.
Mit Printf bekomme ich die richtigen Werte.

Nur leider bekomme ich die Ausgabe mit digitalWrite(pin[x], 0); nicht 
hin.

Vielleicht hast du noch einen Tip?



#include <string>
#include <ctime>
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;


int main()
{
        char *pin[]={"pin7", "pin6", "pin5", "pin4", "pin3", "pin2", 
"pin1", "pin0"};
  int sec, min, std;
        int x=0;
        time_t rawtime;
        tm * timeinfo;

        time(&rawtime);
        timeinfo=localtime(&rawtime);

        sec=timeinfo->tm_sec;
        min=timeinfo->tm_min;
        std=timeinfo->tm_hour;



        int pin0 = 15;
        int pin1 = 16;
        int pin2 = 1;
        int pin3 = 4;
        int pin4 = 5;
        int pin5 = 6;
        int pin6 = 10;
        int pin7 = 11;

        if (wiringPiSetup() == -1)
                exit (1);

        pinMode(pin0, OUTPUT);
        pinMode(pin1, OUTPUT);
        pinMode(pin2, OUTPUT);
        pinMode(pin3, OUTPUT);
        pinMode(pin4, OUTPUT);
        pinMode(pin5, OUTPUT);
        pinMode(pin6, OUTPUT);
        pinMode(pin7, OUTPUT);

        //digitalWrite(pin0, 0);
        //digitalWrite(pin1, 1);
        //digitalWrite(pin2, 0);
        //digitalWrite(pin3, 1);
        //digitalWrite(pin4, 1);
        //digitalWrite(pin5, 1);
        //digitalWrite(pin6, 0);
        //digitalWrite(pin7, 1);

        printf("Sek:%i",sec);

        for (x=7; x>=0; x--)
        {

                if (sec & 1<<x)
                {
                        digitalWrite(pin[x], 0);
                        //printf("1");

                        }
                else
                {
                        digitalWrite(pin[x], 1);
                        //printf("0");

                }


        }


return 0;
}


Viele Grüße

Michael

von Matthias R. (mons)


Lesenswert?

Oh je, da fehlt aber einiges...
Hier: Lass dir das mal durch den Kopf gehen:
1
// Ohne Header, etc, nur Array initialisieren
2
int pin[8];
3
pin[0] = 15;
4
pin[1] = 16;
5
// usw.

Kauf dir wirklich mal Buch und kopier nicht irgendwelche Beispielcodes 
zusammen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Verflucht noch mal:

Kauf Dir ein C-Buch!

Was Du da machst, ist so vollkommen sinnlos.

von Christian H. (christian_h)


Lesenswert?

Das ist ein Verbrechen an der C-Syntax. Schau, du hast dir ein 
Char-Array gemacht gemacht, von Variablen die "pin1" und so enthalten! 
Schau dir mal den Unterschied zwischen Variablennamen und Werten an. Das 
was dort enthalten ist, ist ein String, ein Wert und kein Variablenname. 
Zusätzlich erstellst du daunter mti int pin0 jedoch Variablen die so 
heißen. Die Funktion digitalWrite erwartet ein int in dem ersten 
Parameter, man schreibt also ein Variablennamen hinein, oder direkt ein 
Wert, aber keinen String (Zeichenkette). Das dort ist völliges Chaos -> 
C-Buch kaufen

von hans (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Verflucht noch mal:
>
> Kauf Dir ein C-Buch!

Bei solchen Kommentaren kann man einfach nur noch kotzen.

von Programmierer (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Verfl...[und weiteres gescheites Zeug weggekürzt]


Manchmal wünsch' ich mir einen kleinen Like Button, um die besten 
Antworten zu honorieren. Wirklich. :)

So wie beispielsweise bei stackexchange, da bekommen die besten 
Antworten Punkte und wandern damit nach "oben". Nungut, für ein 
Diskussionsforum vlt auch etwas kontraproduktiv. Egal, wollte es einfach 
loswerden. :)

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

Rufus hat einfach nur recht.
Um die Grundlagen zu lernen ist das einfach ein sehr guter Vorschlag.

von Michael M. (mj09)


Lesenswert?

Hallo Leute,
es läuft.

Danke an alle die im Sinne eines Forums geholfen haben.

An alle anderen hoffe ich, dass sie eines Tages nicht von ihrem Ross 
runterfallen.


Viele Grüße

Michael

von Christian H. (christian_h)


Lesenswert?

Wieso soll man auf einen hohem Ross sitzen, wenn man etwas ganz normal, 
wie jeder andere gelernt hat (C mit einem Buch). Es waren nur gut 
gemeinte Ratschläge, denn schon die nächsten Zeilen Code werden 
wahrscheinlich dein Projekt dann beenden, wenn es dazu keine 
Internetkopie gibt.

von Stephan (Gast)


Lesenswert?

Es ist schon auch interessant das es im heutigen Zeitalter eine schwere 
Beleidigung ist jemandem zu sagen er möge sich ein Buch kaufen.

Aber für uns ältere Menschen ist ein Buch gar nichts unmoralisches.

von Michael M. (mj09)


Lesenswert?

Du willst mir allen ernstes Erzählen das du jedesmal das Rad neu 
erfindest.
Du hast also noch niemals Code von anderen benutzt.
Des Weiteren hast du in deinem C-Buch die Lösung für alle Probleme.

Dieses Buch würde ich gerne haben.



So und nun beende ich diese unsinnige Diskusion.


Viele Grüße

Michael


Ps. Der Ton macht die Musik.

von W.S. (Gast)


Lesenswert?

hans schrieb:
> Bei solchen Kommentaren kann man einfach nur noch kotzen.

Dann tue es doch einfach. Das Kotzen natürlich.

Aber zu einem besseren Programmierer wirst du durch diese Übung auch 
bloß nicht. Merk dir mal eins: In der Elektroniksparte, zu der auch das 
Programmieren gehört, ist es eine absolute Notwendigkeit zeitlebens 
seine Nase in ein Fachbuch oder ne selbstausgedruckte PDF-Dokumentation 
zu stecken und weiterzulernen. OK, nicht ganz zeitlebens, nur bis zur 
Rente, ab da ist es fakultativ.

Wenn dir das nicht paßt, dann ist diese Branche nicht die Richtige für 
dich. Glaub's mir einfach und beherzige die Worte von Rufus.

W.S.

PS: Hey Rufus, du hast ja schon wieder die beiden gräßlichen Namen K&R 
genannt...
Apropos zum Raspberry: Soweit ich gehört hab (noch nicht selber getan), 
läuft dort inzwischen auch Lazarus nativ. DAS macht dieses Brettl ein 
ganzes Stück attraktiver find ich.

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

Nicht das Rad neu erfinden.
Aber die Grundideen von Strings, Integers und dem Sprachaufbau
muss einfach jeder für sich lernen.
Der Nürnberger Trichter funktioniert leider nicht.

Und wenn man das gelernt hat - was mit einem Buch einfach halt mal sehr 
gut geht - ,
Gerade dann muss in dem Buch auch nicht die Lösung aller Probleme 
stehen,
weil man das Problem selbst verstehen kann.

von Simon K. (simon) Benutzerseite


Lesenswert?

Michael Mayer schrieb:
> Du willst mir allen ernstes Erzählen das du jedesmal das Rad neu
> erfindest.
> Du hast also noch niemals Code von anderen benutzt.
> Des Weiteren hast du in deinem C-Buch die Lösung für alle Probleme.
>
> Dieses Buch würde ich gerne haben.

Du hast offensichtlich nicht verstanden worum es ging. Es geht um die 
Grundlagen, die bei deinem Programm dafür sorgen, dass es nicht 
funktioniert. Ohne Grundlagen ist der Rest eben hinfällig.

Nicht beleidigt sein, sondern sich einfach mal damit beschäftigen. Das 
hat jeder von uns C-Programmierern hinter sich (bis auf wenige 
Ausnahmen). Grundlagen vermittelt man nicht im Forum, sondern 
strukturiert und aufeinander aufbauend in der richtigen Reihenfolge. Das 
kann dir nur ein Buch bieten.

Michael Mayer schrieb:
> So und nun beende ich diese unsinnige Diskusion.

Scherzkeks. Willst du uns den Mund verbieten oder was?

Michael Mayer schrieb:
> Ps. Der Ton macht die Musik.

Dito.

von Birne (Gast)


Lesenswert?

Es gibt viele leute, welche C nach dem Motto learning by doing lernen.
Das ist meiner Meinung nach die beste Methode.
Ein C-Buch zu kaufen und von vorne nach hinten durchzuarbeiten ist das 
sinnloseste, was man machen kann. Hat man ein Problem kann man ein Buch 
oder auch das Internet als Nachschlagewerk benutzen. Dabei wird mann 
dann relativ schnell bei den C Basics landen :) ohne das Verständnis von 
Pointern, Arrays, etc. geht da gar nichts ;)

Das einzige was man ihm vorwerfen kann ist, dass er nicht vorher 
ausgiebig recherchiert hat, sondern eine absolute Einsteigerfrage hier 
im Forum geposted hat, welche sicher jeder Programmierer schon mal hatte 
und schon tausende male irgendwo im Internet beantwortet wurde.

Somit verschwendet er quasi unsere Zeit. Was ihm aber wieder nicht 
vorzuhalten ist, denn es steht jedem von euch ja frei, auf seine Frage 
zu antworten oder nicht. Da ihr eine große Diskussion angefangen habt 
hier im Thread gehe ich davon aus, dass ihr Zeit im überfluss habt.
Warum nutzt ihr die nicht, um ihm einfach C beizubringen.

Mit meinem obigen Post habe ich genau das versucht und ihn aktiv in die 
richtige Richtung gepushed und er hat dabei viel gelernt.
Ich finde es immer gut, wenn Leute C lernen wollen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Birne schrieb:
> Es gibt viele leute, welche C nach dem Motto learning by doing lernen.
> Das ist meiner Meinung nach die beste Methode.
Das ist so, als würdest du sagen "Englisch muss man nach dem Motto 
Learning by doing lernen".
Das ist totaler Unsinn, da man eine Mindestzahl an Vokabeln und 
Sprachkonstrukten wissen muss, um überhaupt was machen zu können.
Exakt genau so ist es mit Programmiersprachen.

> Ein C-Buch zu kaufen und von vorne nach hinten durchzuarbeiten ist das
> sinnloseste, was man machen kann.
Dann hast du eventuell ein schlechtes Buch gehabt.

> Hat man ein Problem kann man ein Buch
> oder auch das Internet als Nachschlagewerk benutzen. Dabei wird mann
> dann relativ schnell bei den C Basics landen :) ohne das Verständnis von
> Pointern, Arrays, etc. geht da gar nichts ;)
Das Problem ist, dass man bei dieser Vorgehensweise nicht strukturiert 
an die Sprache herangeführt wird, sondern sozusagen mehrere Baustellen 
aufmacht, die man parallel versucht zu verstehen.

> Das einzige was man ihm vorwerfen kann ist, dass er nicht vorher
> ausgiebig recherchiert hat, sondern eine absolute Einsteigerfrage hier
> im Forum geposted hat, welche sicher jeder Programmierer schon mal hatte
> und schon tausende male irgendwo im Internet beantwortet wurde.
Ich gehe davon aus, dass er schlicht und einfach nicht weiß, wonach er 
suchen soll, da ihm die essentiellen Grundlagen der Sprache fehlen 
(siehe Absatz 1).

> Ich finde es immer gut, wenn Leute C lernen wollen.
Ich auch, aber das ist hier offensichtlich nicht der Fall.

von Achim M. (minifloat)


Lesenswert?

1
int pins[8] = {15, 16, 1, 4, 5, 6, 10, 11};
2
//...
3
digitalWrite(pins[x], 0);
4
//...
5
digitalWrite(pins[x], 1);
Verstehen müsste mans auch noch...

von Karl H. (kbuchegg)


Lesenswert?

Birne schrieb:
> Es gibt viele leute, welche C nach dem Motto learning by doing lernen.


Also ich keinen keinen, der damit C gelernt hat. Richtig gelernt und 
nicht nur das, was er glaubt halbwegs verstanden zu haben. Was, wenn man 
mal im Detail nachbohrt, meistens noch nicht mal die Hälfte dessen ist, 
was er eigentlich können und beherrschen sollte.

Ab einem gewissen Grundlevel ist learning by doing sinnvoll. Davor 
nicht. Aber um zu diesem Grundlevel zu kommen, ist ein gutes Buch das 
Sinnvollste überhaupt (neben einem Lehrer, der mit einem die einzelnen 
Kapitel von vorne bis hinten durchgeht). Warum? Weil es systematisch 
vorgeht und nicht wild hin und her springt und dabei 2/3 der ganzen 
kleinen Details vergisst, die man eben auch beherrschen sollte. Das 
heißt ja nicht, dass man sich die alle sofort merkt. Das tat und tut 
wahrscheinlich niemand. Aber, man hat eine Referenz auf die man 
zurückgreifen kann, wenn man diese Detailswissen benötigt und wenn man 
das Buch durchgearbeitet hat, dann weiß man auch noch einiger Zeit immer 
noch, wo die gesuchte Information zu finden ist.

Und 'learning by doing'. Jedes Buch, das etwas auf sich hält, hat am 
Ende eines Kapitels genügend Übungen und Aufgaben, so dass das 'doing' 
nicht zu kurz kommt.

Generationen von Programmieren sind mit dem K&R aufgewachsen. Wie gut 
jemand mitlerweile geworden war, konnte man praktisch immer daran 
ablesen, wie zerfleddert sein K&R (der ständig neben dem Monitor lag) 
mittlerweile war. Je besser, desto zerfledderter.

von Henry P. (henrylexx)


Lesenswert?

Hey cool noch jemand der ein raspberry pi hat ;)

ich empfehle dir dieses, hat mir in meinem ersten semeser informatik 1, 
hochgradig geholfen !!

http://openbook.galileocomputing.de/c_von_a_bis_z/

von Electronics'nStuff (Gast)


Lesenswert?

hans schrieb:
> Rufus Τ. Firefly schrieb:
>> Verflucht noch mal:
>>
>> Kauf Dir ein C-Buch!
>
> Bei solchen Kommentaren kann man einfach nur noch kotzen.

LOL warum?
Andere User hätten das ebenfalls geschrieben.

Man kann nicht alles in ein Video Tutorial packen.
Vor allem nicht C!

von Edson (Gast)


Lesenswert?

Michael Mayer schrieb:
> Du willst mir allen ernstes Erzählen das du jedesmal das Rad neu
> erfindest.
> Du hast also noch niemals Code von anderen benutzt.
> Des Weiteren hast du in deinem C-Buch die Lösung für alle Probleme.
>
> Dieses Buch würde ich gerne haben.

Ich verrate dir ein Geheimnis: Alle Programmier-Aufgaben und Probleme 
lassen sich in C lösen. Du brauchst dir dieses tolle Buch also nur 
endlich mal zu kaufen und darin zu lesen.

> So und nun beende ich diese unsinnige Diskusion.

Du bist der Vater dieser unsinnigen Diskussion, das gibt dir aber nicht 
das Recht sie zu beenden.

>
> Viele Grüße
>
> Michael
>
>
> Ps. Der Ton macht die Musik.

Nö, ein Ton alleine ist noch keine Musik. Genau wie ein Tutorial kein 
Buch ersetzen kann. Aber es gibt Banausen die das nicht merken und dann 
flache Sprüche repetieren...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.