thymjan
Forum Replies Created
-
AuthorPosts
-
AlfredWMember
Hallo,
wie kompiliere ich den Treiber unter openSuse 13.2.
C Compiler, Kernel-Headers sind natürlich installiert;
beim Aufruf vom make erhalte ich Fehler (sind aber keine fehlenden Dateien)Gruß
Alfred
RainerParticipantRainerParticipantjetzt als zip Datei
Attachments:
bastardMemberRainerParticipantHallo Stefan,
danke für den “Deppen”, ich benutze wohl zu häufig die englische Sprache, dort ist der Apostroph durchaus als Genitiv -s angebracht.
Allerdings habe ich auch das gefunden :
- Seit der Einführung der neuen deutschen Rechtschreibung kann auch im Deutschen zur Hervorhebung von Namen der Apostroph Verwendung finden: Jürgen’s Imbiss
Ich lasse das Program mal so wie es ist, wer es benutzen will, wird ja wohl dort seinen Namen eintragen.
Beste Grüße,
Rainer
- This reply was modified 9 years ago by Rainer.
CostaMemberSicher ist das nicht das erste Thema. Oder?
McElchMemberAlso, zunächst einmal: Der Kalender ist genial! Selten habe ich mich derart auf das nächste Türchen / Experiment gefreut, wie bei diesem Kalender. Manches ist für jemanden, der überhaupt noch nie mit der Materie zu tun hatte, etwas schlecht dokumentiert. Kompilieren, hä? Und bleiben die Programme immer drauf, und das nächste wird dazu geladen? Wohin soll ich was kopieren?
Aber mal ganz ehrlich, wer an so einem Kalender Freude hat, kann auch bissel googeln, oder? Ich hab mich jedenfalls immer schon fast kindisch gefreut, wenn alles geklappt hat. Und meine Frau, von der ich den Kalender habe, schüttelt nur den Kopf, wenn ich begeistert „Kuck mal, KUCK MAL!!!!“ rufe, wenn sich auf dem Monitor paar Zahlen durch Drehen am Poti verändern… 😊
Dass es jetzt auch noch paar Erklärungen zu Aufbau und Wirkweise der Programme gab, ist auch genial, das hatte ich anfangs vermisst.
Ich habe schon tausend Ideen im Kopf, was ich alles mit dem kleinen Board anstellen könnte, da muss ich noch viel lernen, aber der Einstieg ist gemacht.
Das erste Projekt wird für unser Boot sein:
– Wassermelder in vier Sektionen des Rumpfes
– Temperaturüberwachung von Motorraum, Kühlwasser, Getriebe und Wellenlager (vielleicht sogar der drehenden Welle über Infrarot?)
– vielleicht ein Alarm / Buzzer o.ä. falls einer der Werte kritisch ist oder irgendwo Wasser stehtSollten dann noch „Beine“ übrig sein, noch die ein- oder andere Statusmeldung, bspw. Landstrom da oder nicht, oder den Inverter einschalten o.ä. Mal sehen, wie weit ich komme! Vieles aus den ersten Experimenten kann ich da sicher verwerten.
Die ersten Fragen, die sich ergeben sind:
Laut Datenblatt 20 I/O, davon 2 für das WLAN, bleiben 18.
Davon 6 analoge Eingänge, bleiben 12, richtig?Davon 6 PWM, das ist etwas , um analoge Ausgänge zu emulieren, wenn ich das richtig verstanden habe. Muss man diese 6 Pins dafür nehmen, oder kann man auch sagen „Ich nehme euch als digitalen Eingang!“?
Für Ausgänge hab ich nämlich eigentlich wenig Verwendung und fände es daher besser, wenn ich die übrigen 12 Pins als Eingänge nehmen könnte.
Und dann zu den Wassermeldern:
Reicht es da vielleicht, einfach einen Pin und einen GND nebeneinander in Wasser zu hängen, um ein spürbares Signal zu bekommen? Ich hab irgendwo gelesen, dass die Eingänge interne Widerstände haben. Kann da mal jemand was dazu sagen? Habe nämlich zum Thema Wassermeldung zwar etliche Vorschläge gefunden, aber nicht wirklich was für Arduino.
Vielen Dank und allen ebenso viel Freude mit dem Kalender!
RaabinatorMemberHallo McElch,
Falls dir die digitalen I/Os knapp werden, kannst du dich mit einem externen I/O-Expander behelfen. Ich verwende gerne den MCP2317 mit I²C-Bus oder seinen Bruder den MCP23S17 mit SPI-Bus, je nach dem, was sonst noch extern dran hängt. Dieser Chip bietet 16 als Eingang der Ausgang verwendbare Anschlüsse. Ich meine, es gibt auf Arduino.cc auch irgendwo eine Library dafür (z.B. http://playground.arduino.cc/Main/MCP23S17).
Ich glaube auf eBay schon fertige Platinen gesehen zu haben. Ansonsten gibt’s die ICs auch bei Reichelt.de.PWM-Ausgänge kannst du auch als Eingänge verwenden. Sind die von vorne herein, bis du sie anders konfigurierst.
Bei den 20 I/Os sind auch die Analogen Eingänge A0 bis A7 eingerechnet. Die kannst du (normal) auch nur dafür verwenden, ist von Arduino so vorgesehen. Über Umwege gehen die auch als Ein-/Ausgang. Dann musst du dich allerdings mit den Registern des Controllers herumschlagen.
An die Eingänge kann man sogenannte interne Pull-Up Widerstände schalten (mit pinMode(NR, INPUT_PULLUP)). Die haben die Größenordnung von 20 bis 50kOhm.
Weiterhin viel Spaß beim rumprobieren…
- This reply was modified 9 years ago by Raabinator.
McElchMemberIch habe gerade beim Stöbern folgenden Sensor gefunden, den es – für mich ideal – gleich im günstigen 5er-Pack gibt:
Das sollte doch eigentlich genau das richtige für meine Zwecke sein, oder?
RaabinatorMemberDie sind eigentlich für Pflanzen gedacht. Mit dem Poti kann man aber die Schaltschwelle des digital Ausganges einstellen. Könnte funktionieren. Am besten probieren.
Achtung: der Händler ist aus Hong KongMcElchMemberNa dann darf ich dem Sensor halt nicht verraten, dass es ein Boot und kein Blumenkübel ist… :)
Die haben auch Relaiskarten im 5er-Pack und anderes lustiges Zeugs. Ich werde da mal das eine oder andere zum Basteln bestellen. Man investiert ja kein Vermögen. :)
StefanieMemberHallo liebe alle,
Derzeit lässt sich die Led mittels Button ein und ausschalten. Je nachdem welcher Zustand LOW oder HIGH gewählt wurde. Habt ihr eine Idee, ich glaube ich habe schon irgendwo einmal was hier gelesen, dass man den Wert des Buttons über eine andere Variable zwischen speichert. Wie würdet Ihr das umsetzen?
Anbei simple Status Quo:
int led = 9;
int schalter = 5;void setup() {
pinMode(led,OUTPUT);
pinMode(schalter, INPUT);
digitalWrite(schalter, HIGH);
}void loop() {
digitalWrite(led,!digitalRead(schalter));}
LG
RaabinatorMemberHallo Stefanie.
Ich nehme an, du möchtest nur auf eine Zustandsänderung des Buttons reagieren. Momentan wird in jedem Durchlauf von
loop()
nur der aktuelle Zustand an die LED übertragen.
Um auf diese Schaltflanken zu reagieren, musst du dir den letzten Zustand des Button zwischenspeichern und dann diesen immer mit dem aktuellen Zustand des Button vergleichen.
Zunächst erzeugst zu dir überSetup()
eine sogenannte globale Variable:
int buttonZuletzt;
Am Ende vonsetup()
initialisierst du diese Variable mit dem Zustand des Button:
buttonZuletzt = digitalRead(schalter);
In loop() vergleichst du nun immer den Zustand mit dem in der Variablen. Hat er sich geändert, dann reagierst du darauf. Aber nicht vergessen, den dann neuen Zustand wieder merken.loop() { if(buttonZuletzt != digitalRead(schalter)) { // Änderung hat stattgefunden if(buttonZuletzt) { // buttonZuletzt war <>0, also nicht gedrückt (low-aktiv) // muss dann jetzt gedrückt sein digitalWrite(led, 1); // LED ein Serial.println("gedrückt"); buttonZuletzt = 0; // merken, dass jetzt gedrückt } else { // buttonZuletzt war =0, also gedrückt (low-aktiv) // muss dann jetzt nicht gedrückt sein digitalWrite(led, 0); // LED aus Serial.println("losgelassen"); buttonZuletzt = 1; // merken, dass nicht mehr gedrückt } delay(30); // zum entprelen verzögern (einfache Version) } }
Das
delay(30)
am Ende benötigst du, um dem Button Zeit zu geben (30ms), seinen Kontakt vollständig zu öffnen oder zu schließen. Dein Controller ist nämlich so schnell, dass er ohne mehrere Zustandswechsel erkennen würde, obwohl der Button nur einmal betätigt wurde.Ich hoffe, damit ist dir etwas geholfen.
RaabinatorMemberNoch eins. In deiner setup() solltest du
pinMode(schalter, INPUT);
gegen
pinMode(schalter, INPUT_PULLUP);
ersetzten, wenn du nicht einen externen Pull-Up Widerstand verwendest.
Ansonsten bekommst du keinen definierten Zustand und der Schalter reagiert evtl. willkürlich.fkKeymasterHi,
echt schönes Projekt!Das mit den ino-Dateien stimmt. Mann sollte die Projekte immer erst Zippen.
-
AuthorPosts