PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino Asuro Taster können nicht angesprochen werden



Henne1992
14.01.2014, 22:48
Hallo Leute

Ich wollte mit einem Arduino einen Asuro betreiben.

Vorwärts/Rückwärts fahren kann er. Genauso wie nach links und nach rechts drehen.

Nur ich weiß nicht wie ich die Taster ansprechen soll.

Hier mein Quellcode :


int rforward = 13;
int rreverse = 12;
int lforward = 5;
int lreverse = 4;
int lmotorspeed = 255;
int lmotor= 9;
int rmotorspeed = 255;
int rmotor= 10;
int statusledred = 2;
int frontled = 6;
int lphotores = 3;
int rphotores = 2;
int statusledgreen = 8;
int odometricled = 7;
long tmp;
long taster = ((10240000L/tmp-10000L)*61L+5000L)/10000;

void setup()
{
pinMode(rforward, OUTPUT);
pinMode(rreverse, OUTPUT);
pinMode(lforward, OUTPUT);
pinMode(lreverse, OUTPUT);
pinMode(frontled, OUTPUT);
pinMode(statusledred, OUTPUT);
pinMode(statusledgreen, OUTPUT);
pinMode(odometricled, OUTPUT);
}

//read front switches
int readSwitches()
{
long taster = ((10240000L/tmp-10000L)*61L+5000L)/10000; // Pollswitch-Funktion Tasterauswerutng
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
tmp = analogRead(4);
digitalWrite(3, LOW);
return taster;
}





void loop()

{

readSwitches();

//GERADAUS FAHREN 2500ms
digitalWrite (4, LOW); //Links vorwärts
digitalWrite (5, HIGH);
digitalWrite (9,HIGH);

digitalWrite (12, LOW); //Rechts vorwärts
digitalWrite (13, HIGH);
digitalWrite(10,HIGH);


if (taster == 2 || taster ==4 || taster == 8 || taster ==16 || taster ==32);
{

//RÜCKWÄRTSFAHREN
// linker Motor zurück
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
digitalWrite(9,HIGH);
// rechter Motor zurück
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(10,HIGH);
delay(2500);

// 90 GRAD LINKSKURVE
//Rechts vorwärts
digitalWrite (12, LOW);
digitalWrite (13, HIGH);
digitalWrite(10,HIGH);
// links zurück
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
delay(2500);

//GERADAUS FAHREN 2500ms
digitalWrite (4, LOW); //Links vorwärts
digitalWrite (5, HIGH);
digitalWrite (9,HIGH);

digitalWrite (12, LOW); //Rechts vorwärts
digitalWrite (13, HIGH);
digitalWrite(10,HIGH);
delay(2500);

//90 GRAD RECHTSKURVE
digitalWrite (4, LOW); //Links vorwärts
digitalWrite (5, HIGH);
digitalWrite (9,HIGH);

// Rechts rückwärts
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(10,HIGH);
delay(2500);

}

}









Hieran haben wir uns orientiert und es auch so angewendet :

https://www.roboternetz.de/community/threads/62866-ASURO-Arduino

Wir haben den IC ATmega328 von Arduino Uno rausgenommen und ihn in den Asuro platziert.
Nur halt mit den Tastern haben wir Probleme.

Ich wäre euch für Hilfe sehr dankbar

Mitfreundlichen Grüßen

Henne1992

Valen
15.01.2014, 04:01
Was genau stimmt nicht? Nimmt doch das ganzen Tanzen-spiel raus und mache ein Sketch das nur den gemessene Tasterwerten zum Rechner sendet. Nur dann kann man was richtig beobachten, Fehler herausfinden, und sonnst was nicht stimmt.

Und muss den Tasterwert-berechnung nicht nach den tmp=AnalogRead(4) statt finden? Was soll den Arduino-suro sonnst mit den Variabele tmp machen?

Henne1992
15.01.2014, 08:48
Uns wurde gesagt, dass man die Voltzahl so von den einzelnen Taster berechnen kann und Sie somit, wenn man einen/mehrere Taster drückt durch den Spannungsabfall merkt, dass ein Taster gedrückt wurde.
Wie würde denn dein Sketch aussehen um den gemessenen Tasterwert zum Rechner zu senden ?

Valen
15.01.2014, 19:46
Was du gesagt ist stimmt. Aber man sollte doch erst die Spannung an Analog Pin 4 messen und im tmp speichern, und nur danach mit berechnen was den Taster Wert ist. Oder? Dein Programm berechnet nun mit den vorherigen Taster-spannung.

Zum Beispiel nur den wichtige Anderungen im readSwitches und den loop-Funktion. (Nicht getestet!)



...

//read front switches
int readSwitches()
{
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
tmp = analogRead(4); // Erst messen, dan Berechnen!
digitalWrite(3, LOW);

long taster = ((10240000L/tmp-10000L)*61L+5000L)/10000; // Pollswitch-Funktion Tasterauswerutng

return taster;
}

...
void loop()

{

readSwitches();
if (taster!=0) Serial.println(taster); // Wenn Taster nicht 0 ist, zur Rechner senden als ASCII

delay(100); //etwas verzögeren


}


Außerdem, bemerken das ein Taster gedruckt ist kann man eigentlich schon wen an INT/Pin3 als Digitale Eingang ein LOW gemessen wird. Dazu braucht man nicht den analoge Taster-wert jedesmal zu messen und berechnen. Den Tasterspannung wird schon durch R23 hoch gehalten bis ein eingedrukten Taster die Kondensator C7 entladet. Ein Interupt Routine ist sehr geeignet dafür wegen die Automatische Abhandlung, aber für Anfänger etwas complex. Oft die Pin-zustand abfragen sollte auch reichen. Wenn ein Taster-prellung bemerkt ist kannst du die Einzelne Tastern heraus finden lassen durch den Funktion readSwitches.