Probleme mit einfacher Tasterschaltung
Hallo,
mal wieder komme ich nicht weiter.
Ein kleiner 4 Kanal Fernsteuer Roboter. 1 DC Motor. L293D, proMini, 9Volt Block, Festspannungsregler 5 Volt und ein Servo.
Die 4 Emfängerkanäle liefern HIGH und sind mit 10K auf GND.
Vor, Rück, Links, Rechts
Mit diesem Sketch geht es noch nicht. Es geht nur eine Funktion zur Zeit. Aber z.B. Vor und Links oder Rechts zugleich geht nicht.
Was kann ich machen um das zu erreichen?
Code:
const int ledPin_1 = 8;
const int ledPin = 13;
const int Pin = 6; // Taster
const int Pin_1 = 7; // Taster
void setup()
{
pinMode(6, INPUT);//Taster
pinMode(7, INPUT);//Taster
pinMode(13, OUTPUT);//LED
pinMode(8, OUTPUT);//LED
}
void loop()
{
int pulsador = digitalRead(6);//Taster A
while (pulsador == 1)//while the button is pressed
{
digitalWrite(13, HIGH);
delay(10);
digitalWrite(13, LOW);
pulsador = digitalRead(6); //refresh value of variable
}
{
int pulsador_1 = digitalRead(7);//Taster B
while (pulsador_1 == 1)//while the button is pressed
{
digitalWrite(8, HIGH);
delay(10);
digitalWrite(8, LOW);
pulsador_1 = digitalRead(7); //refresh value of variable
}
}
}
Gerne würde ich einen Tipp bekommen
Achim
Liste der Anhänge anzeigen (Anzahl: 1)
Super,
dankeschön!
Im Januar hatte ich mit dem Bauen begonnen. Nun kam mir das ganze Jahr was dazwischen. Leider stelle ich mich mit dem Lernen immer so kompliziert an.
Die Hindernis IR Module baue ich wieder raus. Die Einfache Version reicht.
Einen Sketch hatte ich natürlich schon fertig. Da ging aber gar nichts. Das ist das Erste Mal, das weder delay, noch Millis gingen.
Heute Abend probiere ich weiter.
Fast hätte ich mich schon aus der Situation gezogen und mit je 2 ATTiny das Problem locker umschifft.
Aber die Prominis auslöten ist wenig spaßig.
Immerhin 6 Stück davon.
Anhang 34566
Nochmals Danke.
Wenigstens nur noch 3 Tage bis zur Sonnenwende!
Dann gehts Bergauf
Achim
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die nette Info!
Mit dem switch!
Woher weiß der code dieses?
Zitat:
case '3':
//Wenn 3, dann ist Taster1 und Taster2 geschlossen und alle anderen offen
Wie ändert man das?
Wie mache ich weiter?
Beziehe ich mich dann auf z.B.
case`3`:
Hier mal der Stromlaufplan in reduzierter Zeichnung:
Anhang 34571
So hatte ich es naiv zuerst versucht. Irgendwann gemerkt, das 12 kein PWM kann. Die IR Sache baue ich aus.
Eigentlich war das gar nicht so schlecht. Nur das der Promini nicht auf die `Drückzeit` der Tasten reagiert hat.
Code:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
const int L = 2; // Links Fern
const int R = 3; // Rechts Fern
const int Vor = 4; // Vor Fern
const int Rueck = 5; // Rückwärts Fern
const int IRL = 6; //Hinderniss Rechts
const int IRR = 7; // Hinderniss Links
const int FERNON = 13; //Fernsteuerung Spannung
int PWM = 10; // PWM Motor
const int Motor_1 = 11; //Motor vor rück
const int Motor_2 = 12; //Motor vor rück
int val = 0;
void setup() {
myservo.attach(9); // Servo auf DigitalPin 9
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(10, OUTPUT); //PWM
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
int val = 0;
val = digitalRead(IRL); //Ir Links lesen
if (digitalRead(IRL) == HIGH)
{
digitalWrite(FERNON, LOW);
analogWrite(PWM, 170);
myservo.write(60);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, HIGH);
delay(2000);
}
else
{
digitalWrite(FERNON, HIGH);
digitalWrite(PWM, LOW);
myservo.write(90);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
}
{
val = digitalRead(IRR); //Ir Rechts lesen
if (digitalRead(IRR) == HIGH)
{
digitalWrite(FERNON, LOW);
analogWrite(PWM, 170);
myservo.write(120);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, HIGH);
delay(2000);
}
else
{
digitalWrite(FERNON, HIGH);
digitalWrite(PWM, LOW);
myservo.write(90);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
delay(50);//Pause, damit das Servo drehen kann
}
val = digitalRead(2); //Links Fernsteuerung
if (digitalRead(2) == HIGH)
{
myservo.write(60);
delay(50);//Pause, damit das Servo drehen kann
}
else
{
myservo.write(90);
delay(50);//Pause, damit das Servo drehen kann
}
{
val = digitalRead(3); //Rechts Fernsteuerung
if (digitalRead(3) == HIGH)
{
myservo.write(120);
delay(50);//Pause, damit das Servo drehen kann
}
else
{
myservo.write(90);
}
delay(50);//Pause, damit das Servo drehen kann
}
{
val = digitalRead(4);//Fernsteuerung vor
if (digitalRead(4)==HIGH)
{
analogWrite(PWM, 170);
digitalWrite(Motor_1, HIGH);
digitalWrite(Motor_2, LOW);
}
else
{
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
}
{
val = digitalRead(5);//Fernsteuerung vor
if (digitalRead(5)==HIGH)
{
analogWrite(PWM, 170);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, HIGH);
}
else
{
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
}
}
}
}}