Ist es möglich eine IR Lichtschranke gegen einen Taster zu tauschen?
Hintergrund: Bekomme jetzt bald ein "ammo counter" der in NERF Gewehren zum Einsatz kommt. Möchte diesen in einem Paintball markierer einbauen und befürchte das die Lichtschranke zu langsam dafür ist.
Möchte daher die Lichtschranke tauschen um mechanisch zu zählen bei betätigen des Triggers.
Gartenkralle:
OK.. Vielen Dank für deine Hilfe
Werde das probieren.
Wie schon geschrieben, kenne ich den Hintergrund nicht, allerdings kann es durchaus nötig sein, den Taster (Eingangspin) zu entprellen. Das kannst du per Hard- oder Software machen.
Habe jetzt mal etwas gegoogelt und gesehen das die IR Schranke auf A2 hängt. Das ist doch ein digitaler pin. Also brauche ich "nur" im Code folgendes ändern? :
Zeile 136
//read the analog in value
Int sensorValue = analogRead(irSensorPin);
Zu
//read the analog in value
Int sensorValue = digitalRead(irSensorPin);
Oder ist es doch nicht so einfach?
Und da danke das du auch das entprellen erwähnt hast. Werde das per software machen. Also eine Wartezeit einbauen da der Taster e nur alle paar Sekunden gedrückt wird.
Mit "A2" definierst du den analogen Pin.
Mit deinen Beispielen definierst du den als digitalen Eingang.
Also ist das richtig.
Und das "Entprellen" kannst du auch so machen.
Gartenkralle:
Habe jetzt mal etwas gegoogelt und gesehen das die IR Schranke auf A2 hängt. Das ist doch ein digitaler pin. Also brauche ich "nur" im Code folgendes ändern? :
Zeile 136
//read the analog in value
Int sensorValue = analogRead(irSensorPin);
Zu
//read the analog in value
Int sensorValue = digitalRead(irSensorPin);
Oder ist es doch nicht so einfach?
Und da danke das du auch das entprellen erwähnt hast. Werde das per software machen. Also eine Wartezeit einbauen da der Taster e nur alle paar Sekunden gedrückt wird.
Du musst auch noch die Auswertung anpassen. Der Analogread bringt dir einen Wert zwischen 0 und 1023, der Anschließend auf 0-100 gemappt wird. Digitalread gibt 0 oder 1. Die 1 überschreitet nicht die Auswerteschwelle. Weiter unten wird in der Loop nochmals der Analogwert (Test ob "Dart has cleared") benutzt.
131 void loop() {
132
133 // Monitor IR Beam
134 //----------------------------------------------------//
135
136 // Read the analog in value
137 int sensorValue = analogRead(irSensorPin);
138
139 // Map it to the range of the analog output
140 int outputValue = map(sensorValue, 0, 1023, 0, 100);
141
142 // Check to see if dart has fired
143 if (outputValue > fireValue)
144 {
[...]}
174 // Check to see if dart has cleared
175 if (outputValue <= idleValue) {
176 hasCleared = true;
177 }
Theseus:
Du musst auch noch die Auswertung anpassen. Der Analogread bringt dir einen Wert zwischen 0 und 1023, der Anschließend auf 0-100 gemappt wird. Digitalread gibt 0 oder 1. Die 1 überschreitet nicht die Auswerteschwelle. Weiter unten wird in der Loop nochmals der Analogwert (Test ob "Dart has cleared") benutzt.
Habe es nun folgend geändert;
int outputValue = map(sensorValue, 0, 1023, 0, 100);
Zu
Int outputValue = digitalRead(inPin) ;
Und
/ Check to see if dart has cleared
if (outputValue <= idleValue) {
hasCleared = true;
Zu
/ Check to see if dart has cleared
if (outputValue <= true) {
hasCleared = true;
Sollte man in Zeile 60 auch
Int irSensorPin = A2
Ändern zu
InPin = A2
Hoffe das passt alles. Bin leider noch sehr am Anfang in diesen Sachen