Gibt es da nicht jemand bestimtmen, der sonst immer gerne auf "Keep it Simple" bzw. sogar KISS rumreitet, wenn ein anderer mehr beantwortet als gefragt wurde?
Das Argument sieht grade so aus als ob das je nach Tagesform wahlfrei wäre.
Aber dem TO ist ja mit dem einfachen Beispiel auf die einfache Frage erstmal geholfen worden.
Hi und Danke für deine Erklärung da ich mich neu in Arduino einarbeite bin ich für jede Hilfe dankbar und habe großes Interesse zu deinem Sketch.
- - - Aktualisiert - - -
Das ist jetzt mal eine Version, allerdings läuft sie noch nicht bin wohl noch ein wenig eingerostet. Kann mir einer helfen die Fehler aus zu bügeln
und hier noch mein altes Programm das, wunderbar getan hatCode:// 14-19 //Sensoren const int V_LINKS = 14; const int V_MITTE = 15; const int V_RECHTS = 16; const int H_LINKS = 17;; const int H_MITTE = 18;; const int H_RECHTS = 19; //Motoren const int LINKS = 6; const int RECHTS = 5; const int VOR = 4; const int ZURUECK = 2; const int PWM = 3; int pwm 127; void setup() { // put your setup code here, to run once: pinMode(V_LINKS, INPUT); pinMode(V_MITTE, INPUT); pinMode(V_RECHTS, INPUT); pinMode(H_LINKS, INPUT); pinMode(H_MITTE, INPUT); pinMode(H_RECHTS, INPUT); pinMode(LINKS, OUTPUT); pinMode(RECHTS, OUTPUT); pinMode(VOR, OUTPUT); pinMode(ZURUECK, OUTPUT); pinMode(PWM, OUTPUT); } void loop() { analogWrite(PWM, pwm); switch( digitalRead() ) { case digitalRead(V_MITTE) : digitalWrite(ZURUECK, HIGH); break; case digitalRead(V_LINKS) : digitalWrite(ZURUECK, HIGH) | digitalWrite(RECHTS, HIGH) ; break; case digitalRead(V_RECHTS) : digitalWrite(ZURUECK, HIGH) | digitalWrite(LINKS, HIGH) ; break; case digitalRead(H_MITE) : digitalWrite(VOR, HIGH) ; break; case digitalRead(H_LINKS) : digitalWrite(VOR, HIGH) | digitalWrite(RECHTS, HIGH) ; break; case digitalRead(H_RECHTS) : digitalWrite(VOR, HIGH) | digitalWrite(LINKS, HIGH) ; break; default : digitalWrite(VOR, HIGH) | digitalWrite(ZURUECK, HIGH) ; } // put your main code here, to run repeatedly: delay(30); }
Code://Motoren #define VOR 0b00110100 #define ZURUECK 0b00101100 #define LINKS 0b00100110 #define RECHTS 0b00100101 #define GERADE 0b00100111 #define BREACK 0b00111111 #define PWM_DRIVE 0b00100000 #define PWM_LENKUNG 0b00000100 //Sensoren #define V_MITE 0b00111101 #define V_LINKS 0b00111011 #define V_RECHTS 0b00111110 #define H_MITE 0b00101111 #define H_LINKS 0b00011111 #define H_RECHTS 0b00110111 //LED ROT, GREUN #define LED_ROT 0b10000000 #define LED_GRUEN 0b01000000 #define LED_AUS 0b00000000Code:#include <avr/io.h> #include <avr/interrupt.h> #include "Roboter.h" /* #define DURCHLEUFE 256 volatile unsigned int wert=0; //Timer 0 ISR(TIMER0_OVF_vect) { wert++; TCNT0 = 256 -DURCHLEUFE; } */ int main(void) { /*TCNT0 = 256 -DURCHLEUFE; TCCR0 = (1 << CS02)|(1 << CS00); TIMSK = (1 << TOIE0); sei(); */ DDRB = 0xFF; //Ausgang, Motoren DDRC = 0b11000000; //Eingang, Sensoren while (1) { switch( PORTC ) { case V_MITE : PORTB = ZURUECK ; break; case V_LINKS : PORTB = ZURUECK | RECHTS ; break; case V_RECHTS : PORTB = ZURUECK | LINKS ; break; case H_MITE : PORTB = VOR ; break; case H_LINKS : PORTB = VOR | RECHTS ; break; case H_RECHTS : PORTB = VOR | LINKS ; break; default : PORTB = BREACK ; PORTB = LED_ROT ; } } return 0; }
habe schreiben erst heute gelernt.
bin legasteniger.
by Ferdinand.
ok einen fehler habe ich jetzt gefunden
int pwm 127;
Warum auch immer ich das so schreiben muss
int pwm = 127;
- - - Aktualisiert - - -
mit 3 pin beim antrib bei der lenkung brauch ich kein pwm da ist es direckt auf 5v also 2 pin
3 pin vor zurück + pwm,
2 pin lenkung links rechts
habe schreiben erst heute gelernt.
bin legasteniger.
by Ferdinand.
Das ist ja nett.
In Deinem alten Code arbeitest Du mit Ports, und Bitmasken, die du je nach Bitmuster am Port der Sensoren veroderst, um die entsprechenden Ausgänge zu setzen.
Dann ist das soweit ich das bei den Sensoren gesehen habe eine inverse Logik.
Sprich der Sensor der 0 ist bestimmt die Motoren Aktion.
Im neuen Code erwartet Switch eine Variable, aber bekommt eine leere Funktion.
Im alten Code war das Bitmuster des Ports die Variable, die mit den definierten Bitmustern verglichen wurde.
Im neuen Code vergleichts Du also eine leere Funktion mit einer Funktion, die Dir den Zustand eines Bits zurück gibt.
Bei der Aktion das selbe, da setzt eiine Funktion ein Bit und das ganze wird verodert mit einer anderen Funktion die auch ein Bit setzt.
So kann das leider nicht funktionieren.
Da müsstest du auch in Arduino direkte Bitmanipulationen durchführen oder aber dich auf die funktionen einlassen.
Bin bei dem was ich mir aus dme Post kopiert habe verrutscht und bei den Sensoren Pins gelandet. Das unten ist Mist
Demnach hast Du für Vorwärts/Rückwärts IN1,IN2Code:Ich vermute mal das du zwei Motoren hast, die mit PWM,IN1,IN2 angesteuert werden. Auf Verdacht sage ich mal: L_PWM=14 L_IN1=15 L_IN2=16 R_PWM=17 R_IN1=18 R_IN2=19
und fürs Lenken PWM,IN1,IN2
???
Geändert von i_make_it (02.03.2018 um 20:18 Uhr)
ok jetzt habe ich es mal so versucht
das scheint auch nicht zu gehenCode:// 14-19 //Sensoren const int V_LINKS = 14; const int V_MITTE = 15; const int V_RECHTS = 16; const int H_LINKS = 17;; const int H_MITTE = 18;; const int H_RECHTS = 19; //Motoren const int LINKS = 6; const int RECHTS = 5; const int VOR = 4; const int ZURUECK = 2; const int PWM = 3; int pwm = 127; void setup() { // put your setup code here, to run once: pinMode(V_LINKS, INPUT); pinMode(V_MITTE, INPUT); pinMode(V_RECHTS, INPUT); pinMode(H_LINKS, INPUT); pinMode(H_MITTE, INPUT); pinMode(H_RECHTS, INPUT); pinMode(LINKS, OUTPUT); pinMode(RECHTS, OUTPUT); pinMode(VOR, OUTPUT); pinMode(ZURUECK, OUTPUT); pinMode(PWM, OUTPUT); } void loop() { analogWrite(PWM, pwm); if (V_MITTE == HIGH) { digitalWrite(ZURUECK, HIGH); } else if (V_LINKS == HIGH) { digitalWrite(ZURUECK, HIGH) | digitalWrite(RECHTS, HIGH); } else if (V_RECHTS == HIGH) { digitalWrite(ZURUECK, HIGH) | digitalWrite(LINKS, HIGH); } else if (H_MITE == HIGH) { digitalWrite(VOR, HIGH); } else if (H_LINKS == HIGH) { digitalWrite(VOR, HIGH) | digitalWrite(RECHTS, HIGH); } else if (H_RECHTS == HIGH) { digitalWrite(VOR, HIGH) | digitalWrite(LINKS, HIGH); } else { digitalWrite(VOR, HIGH) | digitalWrite(ZURUECK, HIGH) ; } delay(30); }
habe schreiben erst heute gelernt.
bin legasteniger.
by Ferdinand.
für die lenkung brauch ich kein PWM aber für vor und zurück brauche ich PWM
- - - Aktualisiert - - -
So habe es jetzt ohne fehler danke für die hinweise auch dafür das meine Sensoren ja invertirt sind habe ich ganz vergesse hir men code
jetzt muss ich nur noch alles zusammen stecken und testenCode:// 14-19 //Sensoren const int V_LINKS = 14; const int V_MITTE = 15; const int V_RECHTS = 16; const int H_LINKS = 17;; const int H_MITTE = 18;; const int H_RECHTS = 19; //Motoren const int LINKS = 6; const int RECHTS = 5; const int VOR = 4; const int ZURUECK = 2; const int PWM = 3; int pwm = 127; void setup() { // put your setup code here, to run once: pinMode(V_LINKS, INPUT); pinMode(V_MITTE, INPUT); pinMode(V_RECHTS, INPUT); pinMode(H_LINKS, INPUT); pinMode(H_MITTE, INPUT); pinMode(H_RECHTS, INPUT); pinMode(LINKS, OUTPUT); pinMode(RECHTS, OUTPUT); pinMode(VOR, OUTPUT); pinMode(ZURUECK, OUTPUT); pinMode(PWM, OUTPUT); } void loop() { analogWrite(PWM, pwm); if (digitalRead(V_MITTE) == LOW) { digitalWrite(ZURUECK, HIGH); } else if (digitalRead(V_LINKS) == LOW) { digitalWrite(ZURUECK, HIGH); digitalWrite(RECHTS, HIGH); } else if (digitalRead(V_RECHTS) == LOW) { digitalWrite(ZURUECK, HIGH); digitalWrite(LINKS, HIGH); } else if (digitalRead(H_MITTE) == LOW) { digitalWrite(VOR, HIGH); } else if (digitalRead(H_LINKS) == LOW) { digitalWrite(VOR, HIGH); digitalWrite(RECHTS, HIGH); } else if (digitalRead(H_RECHTS) == LOW) { digitalWrite(VOR, HIGH); digitalWrite(LINKS, HIGH); } else { digitalWrite(VOR, HIGH); digitalWrite(ZURUECK, HIGH); } delay(30); }
- - - Aktualisiert - - -
der volsteligkeitshalber hir noch mein vertiger code
leider tut der nicht so wie ich möchte trozdem danke fr eure hilfeCode:// 14-19 //Sensoren const int V_LINKS = 14; const int V_MITTE = 15; const int V_RECHTS = 16; const int H_LINKS = 17;; const int H_MITTE = 18;; const int H_RECHTS = 19; //Motoren const int LINKS = 6; const int RECHTS = 5; const int VOR = 4; const int ZURUECK = 2; const int PWM = 3; int pwm = 80; void setup() { // put your setup code here, to run once: pinMode(V_LINKS, INPUT); pinMode(V_MITTE, INPUT); pinMode(V_RECHTS, INPUT); pinMode(H_LINKS, INPUT); pinMode(H_MITTE, INPUT); pinMode(H_RECHTS, INPUT); pinMode(LINKS, OUTPUT); pinMode(RECHTS, OUTPUT); pinMode(VOR, OUTPUT); pinMode(ZURUECK, OUTPUT); pinMode(PWM, OUTPUT); } void loop() { analogWrite(PWM, pwm); if (digitalRead(V_MITTE) == LOW) { digitalWrite(ZURUECK, HIGH); digitalWrite(VOR, LOW); digitalWrite(LINKS, HIGH); digitalWrite(RECHTS, HIGH); } else if (digitalRead(V_LINKS) == LOW) { digitalWrite(ZURUECK, HIGH); digitalWrite(VOR, LOW); digitalWrite(RECHTS, HIGH); digitalWrite(LINKS, LOW); } else if (digitalRead(V_RECHTS) == LOW) { digitalWrite(ZURUECK, HIGH); digitalWrite(VOR, LOW); digitalWrite(LINKS, HIGH); digitalWrite(RECHTS, LOW); } else if (digitalRead(H_MITTE) == LOW) { digitalWrite(VOR, HIGH); digitalWrite(ZURUECK, LOW); digitalWrite(LINKS, HIGH); digitalWrite(RECHTS, HIGH); } else if (digitalRead(H_LINKS) == LOW) { digitalWrite(VOR, HIGH); digitalWrite(ZURUECK, LOW); digitalWrite(RECHTS, HIGH); digitalWrite(LINKS, LOW); } else if (digitalRead(H_RECHTS) == LOW) { digitalWrite(VOR, HIGH); digitalWrite(ZURUECK, LOW); digitalWrite(LINKS, HIGH); digitalWrite(RECHTS, LOW); } else { digitalWrite(VOR, HIGH); digitalWrite(ZURUECK, LOW); digitalWrite(LINKS, HIGH); digitalWrite(RECHTS, HIGH); } //delay(30); }
das mit dem PWM funktionirt super häte ich so nicht gedacht
habe schreiben erst heute gelernt.
bin legasteniger.
by Ferdinand.
Als erstes würde ich im Code überall pwm ersetzten, z.B. durch pwmm.
Und PWM ebenfalls, z.B. durch PWMM.
Wenn ich Deinen Code in meine Arduino IDE stecke mosert er mir die beiden sofort an.
Variablen werden normalerweise schwarz dargestellt, pwm wird braun und PWM blau dargestellt.
Das heist die IDE erkennt die also bei mir als Keywords.
Lesezeichen