Skocz do zawartości

Mattti87

Użytkownicy
  • Zawartość

    14
  • Rejestracja

  • Ostatnio

Reputacja

4 Neutralna

O Mattti87

  • Ranga
    2/10

Ostatnio na profilu byli

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

  1. Zrobiłem TAK! /* * Modified by Rui Santos, http://randomnerdtutorialscom * based on IRremote Library - Ken Shirriff */ #include <IRremote.h> int IR_Recv = 3; //IR Receiver Pin 3 #define L_PWM 5 #define L_DIR 4 #define R_PWM 6 #define R_DIR 9 #define PWM_MAX 165 #define GRANICA 850 #define R_LINE_SENSOR A0 #define L_LINE_SENSOR A1 #define BUZZER 10 #define LED 13 IRrecv irrecv(IR_Recv); decode_results results; volatile int stanRobota = 1; //do maszyny stanów void setup(){ Serial.begin(9600); //starts serial communication irrecv.enableIRIn(); // Starts the receiver //Konfiguracja pinow od mostka H pinMode(L_DIR, OUTPUT); pinMode(R_DIR, OUTPUT); pinMode(L_PWM, OUTPUT); pinMode(R_PWM, OUTPUT); //Konfiguracja pozostalych elementow pinMode(BUZZER, OUTPUT); digitalWrite(BUZZER, 0); //Wylaczenie buzzera pinMode(LED, OUTPUT); digitalWrite(LED, 0); //Wylaczenie diody } void loop(){ if(results.value==16724175) { lineFollow(); } //decodes the infrared input if (irrecv.decode(&results)){ long int decCode = results.value; Serial.println(results.value); //switch case to use the selected remote control button switch (results.value){ case 16736925: leftMotor(100); //Do przodu TURBO! rightMotor(100); break; case 16712445: leftMotor(50); //Do przodu rightMotor(50); break; case 16750695: leftMotor(-40);//Do tyłu rightMotor(-40); break; case 16754775: stopMotors(); break; case 16769055: leftMotor(-30);//w lewo w miejscu rightMotor(30); break; case 16720605: leftMotor(20);//w lewo po łuku rightMotor(40); break; case 16748655: leftMotor(30); //w prawo w miejscu rightMotor(-30); break; case 16761405: leftMotor(40);//w prawo po łuku rightMotor(20); break; case 16769565: digitalWrite(BUZZER, 1); //buzzer delay(500); digitalWrite(BUZZER, 0); break; case 16753245: //led digitalWrite(LED, 1); delay(500); digitalWrite(LED, 0); break; case 16738455: //alarm stopMotors(); for(int i=0;i<20;i++) { digitalWrite(BUZZER, 1); digitalWrite(LED, 1); delay(50); digitalWrite(BUZZER, 0); digitalWrite(LED, 0); delay(50); } break; case 16756815: //alarm stopMotors(); for(int i=0;i<10;i++) { digitalWrite(BUZZER, 1); digitalWrite(LED, 1); delay(100); digitalWrite(BUZZER, 0); digitalWrite(LED, 0); delay(100); } break; } irrecv.resume(); // Receives the next value from the button you press } delay(10); } /*FUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJE*/ void leftMotor(int V) { if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia) V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(L_DIR, 0); //Kierunek: do przodu analogWrite(L_PWM, V); //Ustawienie predkosci } else { V = abs(V); //Funkcja abs() zwroci wartosc V bez znaku V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(L_DIR, 1); //Kierunek: do tyłu analogWrite(L_PWM, V); //Ustawienie predkosci } } void rightMotor(int V) { if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia) V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(R_DIR, 0); //Kierunek: do przodu analogWrite(R_PWM, V); //Ustawienie predkosci } else { V = abs(V); //Funkcja abs() zwroci wartosc V bez znaku V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(R_DIR, 1); //Kierunek: do tyłu analogWrite(R_PWM, V); //Ustawienie predkosci } } void stopMotors() { analogWrite(L_PWM, 0); //Wylaczenie silnika lewego analogWrite(R_PWM, 0); //Wylaczenie silnika prawego } boolean leftSensor() { if (analogRead(L_LINE_SENSOR) > GRANICA) { //Jesli czujnik widzi linie, to return 1; //Zwroc 1 } else { //Jesli czujnik nie jest nad linią, to return 0; //Zwroc 0 } } boolean rightSensor() { if (analogRead(R_LINE_SENSOR) > GRANICA) { //Jesli czujnik widzi linie, to return 1; //Zwroc 1 } else { //Jesli czujnik nie jest nad linią, to return 0; //Zwroc 0 } } void lineFollow() { if (leftSensor() == 0 && rightSensor() == 0) { //Jesli czujniki nie widza linii leftMotor(50); //Jazda prosto rightMotor(50); } else if (leftSensor() == 1) { //Jesli lewy czujnik widzi linie leftMotor(0); //Jazda po łuku w lewo rightMotor(60); } else if (rightSensor() == 1) { //Jesli prawy czujnik widzi linie leftMotor(60); //Jazda po łuku w prawo rightMotor(0); } }
  2. KOD inny pilot chciałbym dodać LineFollower, próbowałem maszyną stanów ale coś nie pykło #include <IRremote.h> int IR_Recv = 3; //IR Receiver Pin 3 #define L_PWM 5 #define L_DIR 4 #define R_PWM 6 #define R_DIR 9 #define PWM_MAX 165 #define GRANICA 850 #define R_LINE_SENSOR A0 #define L_LINE_SENSOR A1 #define BUZZER 10 #define LED 13 IRrecv irrecv(IR_Recv); decode_results results; void setup(){ Serial.begin(9600); //starts serial communication irrecv.enableIRIn(); // Starts the receiver //Konfiguracja pinow od mostka H pinMode(L_DIR, OUTPUT); pinMode(R_DIR, OUTPUT); pinMode(L_PWM, OUTPUT); pinMode(R_PWM, OUTPUT); //Konfiguracja pozostalych elementow pinMode(BUZZER, OUTPUT); digitalWrite(BUZZER, 0); //Wylaczenie buzzera pinMode(LED, OUTPUT); digitalWrite(LED, 0); //Wylaczenie diody } void loop(){ //decodes the infrared input if (irrecv.decode(&results)){ long int decCode = results.value; Serial.println(results.value); //switch case to use the selected remote control button switch (results.value){ case 16736925: leftMotor(100); //Do przodu TURBO! rightMotor(100); break; case 16712445: leftMotor(50); //Do przodu rightMotor(50); break; case 16750695: leftMotor(-40);//Do tyłu rightMotor(-40); break; case 16754775: stopMotors(); break; case 16769055: leftMotor(-30);//w lewo w miejscu rightMotor(30); break; case 16720605: leftMotor(20);//w lewo po łuku rightMotor(40); break; case 16748655: leftMotor(30); //w prawo w miejscu rightMotor(-30); break; case 16761405: leftMotor(40);//w prawo po łuku rightMotor(20); break; case 16769565: digitalWrite(BUZZER, 1); //buzzer delay(500); digitalWrite(BUZZER, 0); break; case 16753245: //led digitalWrite(LED, 1); delay(500); digitalWrite(LED, 0); break; case 16738455: //alarm stopMotors(); for(int i=0;i<20;i++) { digitalWrite(BUZZER, 1); digitalWrite(LED, 1); delay(50); digitalWrite(BUZZER, 0); digitalWrite(LED, 0); delay(50); } break; case 16756815: //alarm stopMotors(); for(int i=0;i<10;i++) { digitalWrite(BUZZER, 1); digitalWrite(LED, 1); delay(100); digitalWrite(BUZZER, 0); digitalWrite(LED, 0); delay(100); } break; } irrecv.resume(); // Receives the next value from the button you press } delay(10); } /*FUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJEFUNKCJE*/ void leftMotor(int V) { if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia) V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(L_DIR, 0); //Kierunek: do przodu analogWrite(L_PWM, V); //Ustawienie predkosci } else { V = abs(V); //Funkcja abs() zwroci wartosc V bez znaku V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(L_DIR, 1); //Kierunek: do tyłu analogWrite(L_PWM, V); //Ustawienie predkosci } } void rightMotor(int V) { if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia) V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(R_DIR, 0); //Kierunek: do przodu analogWrite(R_PWM, V); //Ustawienie predkosci } else { V = abs(V); //Funkcja abs() zwroci wartosc V bez znaku V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(R_DIR, 1); //Kierunek: do tyłu analogWrite(R_PWM, V); //Ustawienie predkosci } } void stopMotors() { analogWrite(L_PWM, 0); //Wylaczenie silnika lewego analogWrite(R_PWM, 0); //Wylaczenie silnika prawego } boolean leftSensor() { if (analogRead(L_LINE_SENSOR) > GRANICA) { //Jesli czujnik widzi linie, to return 1; //Zwroc 1 } else { //Jesli czujnik nie jest nad linią, to return 0; //Zwroc 0 } } boolean rightSensor() { if (analogRead(R_LINE_SENSOR) > GRANICA) { //Jesli czujnik widzi linie, to return 1; //Zwroc 1 } else { //Jesli czujnik nie jest nad linią, to return 0; //Zwroc 0 } } void lineFollow() { if (leftSensor() == 0 && rightSensor() == 0) { //Jesli czujniki nie widza linii leftMotor(50); //Jazda prosto rightMotor(50); } else if (leftSensor() == 1) { //Jesli lewy czujnik widzi linie leftMotor(0); //Jazda po łuku w lewo rightMotor(60); } else if (rightSensor() == 1) { //Jesli prawy czujnik widzi linie leftMotor(60); //Jazda po łuku w prawo rightMotor(0); } }
  3. Dzień dobry, Mój kod: https://github.com/mateuszlanduch/robot-wolf.git mateusz.landuch@gmail.com Idea: Robot jeździ sterowanie pilotem, jazda, linefollower (1), kwadrat-jazda(2), 3 automatyczna jazda. 3 automatyczna jazda - ta automatyczna jazda jak włączę działa bez przerwy. Line follower da się wyłączyć(jest ok), jak zrobić żebym mógł wyłączyć automatyczną jazdę. Domyślam się że jest lipa przez te delay. Ktoś coś?
  4. Witam, chciałem na tym robocie zrobić funkcje: Pilot: 1. Strzałki sterowanie 2. Buzzer na przycisku od wyciszania tv 3. Numery od 1-0 funkcje: np 1 to lineFollower 2... itd i zastosowałem funkcje. Tylko żeby śledził linie to muszę zrobić pętle co uniemożliwia mi zatrzymanie danej funkcji. Chciałem zrobić przerwanie ale też mi nie działa z uwagi na pętle. CZY DA SIĘ TO ZROBIĆ NIE UŻYWAJĄ PĘTLI? CZY może zamiast switch case if, else if, else? Może jakaś podpowiedź pleas, więcej nie będę męczył mateusz.landuch@gmail.com
  5. Jak zrobić w instrukcji case warunek do "śledzenia linii". Czyli takie 3 tryby sterowanie, śledzenie linii, omijanie przeszkód. Ale jak to zrobić że np. po wciśnięciu jakiegoś przycisku on wchodzi w tryb śledzenia linii i jak wcisnę jeszcze raz to przestaje. Ewentualnie dodam inny sensor np. ultradźwiękowy i będzie omijał przeszkody. W taki sposób zbuduję kilka programów, rozumiem że nie mogę dodać if do case..? i Jak to zrobić? proszę o pomoc lub wskazówkę najlepiej mail mateusz.landuch@gmail.com
  6. "W przyszłości pojawi się zestaw dodatkowych sensorów do naszego robota - wtedy zainteresowani tym tematem będę mogli pójść krok dalej!" TRZYMAM FIRMĘ BOTLAND ZA SŁOWO Wtedy kupuje kolejny zestaw! Albo nawet dwa!
  7. Witajcie, jestem amatorem programowania. Zakupiłem kurs budowy robotów! Moim marzeniem jest zrobienie pojazdu RC na Arduino.
  8. Witam, ciekawym tematem była by łączność Wifi, jakieś nowe Arduino z Wifi (ESP8266).
  9. Witam, jak zrobić żeby ten dźwięk wykonał się raz? for (czestotliwosc = 31; czestotliwosc < 65535; czestotliwosc++) { tone(A5, czestotliwosc); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie A5 } niby w pętli for, ale w tym przypadku nie wychodzi mi. Bardzo zależy mi żeby ten dźwięk wykonał się raz. Pozdrawiam Mateusz Łańduch
  10. // ZADANIE 5.3 FORBOT JEST NAJLEPSZY! #include <Arduino.h> #include <Servo.h> //Biblioteka odpowiedzialna za serwa Servo serwomechanizm; //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa int pozycja = 0; //Aktualna pozycja serwa 0-180 int zmiana = 6; //Co ile ma się zmieniać pozycja serwa? int czas = 200; void setup() { serwomechanizm.attach(9); //Serwomechanizm podłączony do pinu 9 } void loop() { if (pozycja < 180) { //Jeśli pozycja mieści się w zakresie serwomechanizm.write(pozycja); //Wykonaj ruch } else { //Jeśli nie, to powrót na początek pozycja = 0; czas = czas + 50; ////////////////////////////// ZADANIE 5.3 - zwiekszanie czasu kolejnego przeskoku o 50 milisekund ////////////////////////////////////// pozycja = pozycja + zmiana; //Zwiększenie aktualnej pozycji serwa delay(czas); }
  11. Witam, u mnie także wyskakuje błąd, a biblioteki są dołączone. #include "DHT.h" // biblioteka sensorów DHTxx #define DHTPIN 2 // wyjście danych sensora jest dołączone // do linii 2 Arduino // deklaracja typu czujnika #define DHTTYPE DHT11 // DHT22 // #define DHTTYPE DHT11 // DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); // otworzenie portu szeregowego dht.begin(); // inicjalizacja czujnika } void loop() { float t = dht.readTemperature(); // odczyt temperatury float h = dht.readHumidity(); // odczyt wilgotności powietrza // czy odczytano wartości? if (isnan(t) || isnan(h)) { // NIE -> informacja o błędzie Serial.println(">>>>>>>>>>>>>>>>>>>>Blad odczytu danych z czujnika!"); } else { // TAK -> wysyłamy wyniki przez port szeregowy Serial.print("Wilgotnosc: "); Serial.print(h); Serial.print(" % "); Serial.print("Temperatura: "); Serial.print(t); Serial.println(" *C"); } delay(1000); // opóźnienie }
×
×
  • Utwórz nowe...