Go Down

Topic: 5 Lampen mit 5 Schaltern ansteuern? (Read 8257 times) previous topic - next topic

vitaX

#15
Mar 11, 2010, 07:02 pm Last Edit: Mar 11, 2010, 07:07 pm by vitaX Reason: 1
Hi Joghurt,  

Deine Zeilen mit dem Skript werde ich sofort testen,
herzlichen Dank dafür!  

Nun hoffe ich, das Deine Zeilen "des Rätsels Lösung" sind...da wäre ich alleine nie drauf gekommen!

Der Anfang für das Skript, denke ich sieht so ungefähr aus:

//array initialisieren, 5 Elemente/Lampen sind an Pin2-6 angeschlossen:

int lampenPin[5] = {2,3,4,5,6};    

//array initialisieren, 5 Elemente/Schalter an Pin7-11 angeschlossen:

int schalterPin[5]={7,8,9,10,11};

Jetzt werde ich das mal so ausprobieren und sehen, ob`s funktioniert...

Was für Sachen bastelst Du denn so mit dem Arduino?
Deine Webseite flackert nicht.
Wie funktioniert denn diese Animation mit dem Arduino, gibt es eine Anleitung dazu?

Über die Ergebnisse werde ich schnellstmöglich berichten ;)

Nicole






Joghurt

#16
Mar 11, 2010, 07:41 pm Last Edit: Mar 11, 2010, 11:19 pm by Joghurt Reason: 1
Quote
Deine Zeilen mit dem Skript werde ich sofort testen, herzlichen Dank dafür!

Kein Problem. :)

Quote
Nun hoffe ich, das Deine Zeilen "des Rätsels Lösung" sind...da wäre ich alleine nie drauf gekommen!

Schaun wir mal, ob das tatsächlich das ist, was Du wolltest... ;)

Quote
Der Anfang für das Skript, denke ich sieht so ungefähr aus:
//array initialisieren, 5 Elemente/Lampen sind an Pin2-6 angeschlossen:
int lampenPin[5] = {2,3,4,5,6};    
//array initialisieren, 5 Elemente/Schalter an Pin7-11 angeschlossen:
int schalterPin[5]={7,8,9,10,11};

Öhm, wofür willst Du denn die Arrays verwenden...?

Quote
Was für Sachen bastelst Du denn so mit dem Arduino?

Nichts bisher, leider, mir fehlt noch sämtliche Hardware, ich bin noch trockener Theoretiker.  8-)
Ich hab hier noch drei andere große Projekte, bevor meine Regierung mir den Großeinkauf erlaubt... ::)  ;)
Schätze mal, in zwei Monaten oder so ist es soweit.

Dann hab ich vor mir ne CNC-Fräse zu bauen, anschließend einen automatischen, gründlichen Reinigungsbot samt Fernsteuerung auf XBee-Basis mit Display, und anschließend einen Hexapod. Aber das kann alles noch etwas dauern, ich bin auch noch nicht wirklich ausreichend gut in C, ich hab definitiv mehr Hobbies als Zeit. ;D

Quote
Deine Webseite flackert nicht.

Schön zu hören. :)

Quote
Wie funktioniert denn diese Animation mit dem Arduino, gibt es eine Anleitung dazu?

Was meinst Du, was es ist oder was es macht?

Es macht ganz genau das, was ich Dir in meiner vorletzten Post gequoted hab, ist der gleiche Code. :)

Dahinter steckt ein Arduino-Emulator-Applet in Java, den ich mir letzt mal gebastelt hab. Hier hab ich spaßeshalber z.B. mal die ganzen Basic Examples umgesetzt, und da kann man auch die kompletten Sources runterladen, falls Dus Dir mal angucken willst.

Damit kann ich mich mit der Materie beschäftigen und schnell mal was grundsätzliches wie Deins entwickeln und prüfen, auch wenn mir die echte Hardware noch fehlt. :D

willich

wow hast du die nachgebastelt?
Oder ist das echt nen Interpreter für einfachen Code?

Joghurt

#18
Mar 12, 2010, 06:57 pm Last Edit: Mar 12, 2010, 07:11 pm by Joghurt Reason: 1
Naja, ich hab die Grundfunktionen der Arduino-IDE nachgebaut, und die Zustände der Ports auf die Grafik gemappt.

Eigentlich keine große Sache, das einzig Kniffelige daran war, den Arduino-Code möglichst unverändert verwenden zu können. :)

pi

@Nicole
Zurück zum Thema:

Um nach einem beendeten "Leuchtevent" festzustellen welcher Schalter als nächstes geschlossen wird musst du zunächst mal wissen, welche Schalter in dem Moment alle schon geschlossen sind.

Das merkst du dir z.B. in einem Feld:
Code: [Select]
#define ANZ_PINS 5
char letzter_status[ANZ_PINS];


Dann klapperst du der Reihe nach jeden Schalter ab und prüfst, ob er von LOW auf HIGH gewechselt hat. Hast du einen solchen gefunden, dann startest du dafür das passende Leuchtevent.

Quick hack, ungetestet:
Code: [Select]
#define ANZ_PINS 5
char schalter[ANZ_PINS] ={2, 3, 4, 5, 6};
char lampe[ANZ_PINS] ={7, 8, 9, 10, 11};
char letzter_status[ANZ_PINS];
// in pos merken wir uns, welcher Schalter als nächstes dran ist
char pos;

// Das Leuchtevent
void leuchtevent(char pin)
{
 // Lampe einschalten...
 digitalWrite(lampe[pin], HIGH);
 // ...mindestens halbe Sekunde warten...
 delay(500);
 // ... warten bis der Schalter ausgeschaltet wird...
 while (digitalRead(schalter[pin]) == HIGH) {}
 // ...alle Schalterstellungen merken...
 for (int i = 0; i < ANZ_PINS; i++)
 {
   letzter_status[i] = digitalRead(schalter[i]);
 }
 // ... und Lampe wieder ausschalten.
 digitalWrite(lampe[pin], LOW);
}

void setup()
{
 for (int i = 0; i < ANZ_PINS; i++)
 {
   // Schalter sind Input
   pinMode(schalter[i], INPUT);
   // Lampen sind Output
   pinMode(lampe[i], OUTPUT);
   // die Stellung des i-ten Schalters merken
   letzter_status[i] = digitalRead(schalter[i]);
   pos = 0;
 }
}

void loop()
{
 // den aktuellen Schalter abfragen
 char status = digitalRead(schalter[pos]);
 // wurde er eingeschaltet?
 if((letzter_status[pos]==LOW) && (status == HIGH))
   // Ja: Leuchtevent starten
   leuchtevent(pos);
 // für den nächsten Durchlauf den nächsten Schalter benutzen
 pos++;
 // Überlauf: Nach (ANZ_PINS -1) kommt wieder 0
 if(pos >= ANZ_PINS) pos = 0;
}

Gruß
pi

Go Up