Skocz do zawartości

Adampi314

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O Adampi314

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Eksperymentowałem, i widać pewne zmiany, ale niestety wciąż nie jest to płynne, przy wartościach delay ok 10 to ledwo ruszał, a przy tych bliżej wyższych(np 300) to trochę płynniej jeździł (pewnie dlatego że dłużej mógł otrzymać daną prędkość), ale wciąż stawał co chwilę. Przy jeszcze wyższych sterowanie zaczynało robić się bardzo trudne.
  2. Racja, sory że nie pomyślałem i tak głupio wstawiłem, po wstawieniu faktycznie po switchu (poniżej zawartość loopa): if(rc5.read(&toggle, &address, &command)) { switch(command) { case 2: leftMotor(40); rightMotor(40); break; case 8: leftMotor(-40); rightMotor(-40); break; case 4: rightMotor(40); leftMotor(-40); break; case 6: leftMotor(40); rightMotor(-40); break; case 5: stopMotors(); break; case 1: leftMotor(20); rightMotor(40); break; case 3: leftMotor(40); rightMotor(20); break; case 7: leftMotor(-20); rightMotor(-40); break; case 9: leftMotor(-40); rightMotor(-20); break; case 12: digitalWrite(BUZZER, 1); delay(500); digitalWrite(BUZZER, 0); break; case 150: if(poz < 180) poz += 5; else poz = 180; servo.write(poz); break; case 149: if(poz > 0) poz -= 5; else poz = 0; servo.write(poz); break; } delay(40); } else if(rc5.read(&toggle, &address, &command) == 0) stopMotors(); robot cały czas podjeżdża i zatrzymuje się co chwilę (tzn. tak rusza i staje rusza i staje co chwilę).
  3. Dzięki za odpowiedzi. @Treker dodałem delay w tym miejscu: switch(command) { delay(30); case 2: ale to nic nie dało(tzn robot wciąż stoi, przy innych wartościach też). @ethanak no właśnie coś takiego chciałbym zrobić ale nie wiem czy się da (np. chciałem pokombinować z keyboard, ale okazało się że tylko płytki z microcontrollerami typu 32u4 i SAMD to obsługują). Można by też spróbować podłączyć np. matrycę przycisków 4x4 (i wtedy kontrola robota jest łatwa bo wykrywa czy przycisk jest wciśnięty), ale wtedy musiał bym mieć 2 płytki i jakieś nadajniki i odbiorniki bezprzewodowej łączności). Podsumowując, potrzebuje wykrywać czy dany przycisk jest wciśnięty czy puszczony(np. na klawiaturze, keypadzie lub pilocie).
  4. @ethanak @Treker dzięki za odpowiedzi, no mi faktycznie chodziło o jakiś taki kod na puszczenie przycisku, ale skoro się nie da no to wystarczy przycisk stop. #include <RC5.h> #include <Servo.h> #define TSO_PIN 3//pin z czujnikiem podczerwieni #define L_PWM 5 #define L_DIR 4 #define R_PWM 6 #define R_DIR 9 #define PWM_MAX 165 #define SERVO 11 #define BUZZER 10 #define LED 13 RC5 rc5(TSO_PIN); //deklaracja czujnika podczerwieni na danym pinie Servo servo; byte toggle; byte address; byte command; int poz = 90; void setup() { pinMode(L_DIR, OUTPUT); pinMode(R_DIR, OUTPUT); pinMode(L_PWM, OUTPUT); pinMode(R_PWM, OUTPUT); pinMode(BUZZER, OUTPUT); digitalWrite(BUZZER, 0); pinMode(LED, OUTPUT); digitalWrite(LED, 0); Serial.begin(9600); servo.attach(SERVO); } void loop() { if(rc5.read(&toggle, &address, &command)) { switch(command) { case 2: leftMotor(40); rightMotor(40); break; case 8: leftMotor(-40); rightMotor(-40); break; case 4: rightMotor(40); leftMotor(-40); break; case 6: leftMotor(40); rightMotor(-40); break; case 5: stopMotors(); break; case 1: leftMotor(20); rightMotor(40); break; case 3: leftMotor(40); rightMotor(20); break; case 7: leftMotor(-20); rightMotor(-40); break; case 9: leftMotor(-40); rightMotor(-20); break; case 12: digitalWrite(BUZZER, 1); delay(500); digitalWrite(BUZZER, 0); break; case 150: if(poz < 180) poz += 5; else poz = 180; servo.write(poz); break; case 149: if(poz > 0) poz -= 5; else poz = 0; servo.write(poz); break; } } else if(rc5.read(&toggle, &address, &command) == 0) stopMotors(); } void leftMotor(int v){ byte kierunek = 0; if(v < 0) kierunek = 1; v = map(abs(v), 0, 100, 0, PWM_MAX); digitalWrite(L_DIR, kierunek); analogWrite(L_PWM, v); } void rightMotor(int v){ byte kierunek = 0; if(v < 0) kierunek = 1; v = map(abs(v), 0, 100, 0, PWM_MAX); digitalWrite(R_DIR, kierunek); analogWrite(R_PWM, v); } void stopMotors(){ analogWrite(L_PWM, 0); analogWrite(R_PWM, 0); } Kod wygląda w ten sposób, myślałem że jeśli uznamy że nie odebraliśmy sygnału to tak jakbym puścił przycisk, ale wtedy robot nawet nie startował(jak usunąłem tego else to wszystko zaczęło dobrze działać).
  5. Dzięki za odpowiedzi, @Treker ale bit toggle zmienia się tylko jeśli znowu wciśniemy jakiś przycisk, a jeśli puszczamy to w zapisanej wartości pozostaje ta poprzednia, czyli 0, no i tak jak np w przykładzie trzeba jeszcze wcisnąć przycisk. A ja próbuję tak zrobić żeby przy puszczeniu przycisku przestawał jechać (kombinowałem z else po tym pierwszym if-ie, ale wtedy robot nawet nie ruszał).
  6. Witam, mam takie pytanie, czy dało by się tak zrobić że robot będzie jechał tylko gdy dany przycisk będzie wciśnięty (tzn. np. jak wciskam 2 to jedzie do przodu a jak puszczam to się zatrzymuje), a także czy dało by się zrobić tak że robot jechał by po łuku gdy wciśnięte będą dwa przyciski(np. wciskamy 2 i 6 i robot jedzie po łuku w prawo)?
  7. Witam, mam pewien problem z serwomechanizmem. Gdy podłączyłem go tak jak na schemacie to tylko słychać jak chodzi na różnych obrotach, ale nic się nie przekręca. I mam pytanie, w jaki sposób można to zmienić ?? Z góry dzięki za pomoc.
×
×
  • Utwórz nowe...