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
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)
Benutze dafür am besten Arrays. hier ein gutes tutorial wie das geht: http://pw1.netcom.com/~tjensen/ptr/ch2x.htm
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
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
Verflucht noch mal: Kauf Dir ein C-Buch! Was Du da machst, ist so vollkommen sinnlos.
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
Rufus Τ. Firefly schrieb: > Verflucht noch mal: > > Kauf Dir ein C-Buch! Bei solchen Kommentaren kann man einfach nur noch kotzen.
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. :)
Rufus hat einfach nur recht. Um die Grundlagen zu lernen ist das einfach ein sehr guter Vorschlag.
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
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.
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.
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.
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.
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.
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.
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.
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.
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...
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.
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/
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.