Skocz do zawartości

Dlaczego odbiornik poczerwieni VS1838B przestaje reagować...


Pomocna odpowiedź

Napisano
#include <IRremote.h>
//#define trigPin 12
//#define echoPin 11

const int IR_PIN = 2;
long otrzymany_sygnal;

// Define the IR receiver object
IRrecv irrecv(IR_PIN);

void setup() {  
  Serial.begin (9600);
  irrecv.enableIRIn();

  pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
  pinMode(echoPin, INPUT); //a echo, jako wejście

  pinMode(3, OUTPUT); //Sygnał PWM silnika nr 1
  pinMode(4, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT); //Sygnał PWM silnika nr 1
  pinMode(7, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1
  pinMode(8, OUTPUT);
  //pinMode(9, INPUT_PULLUP);
  //pinMode(10, INPUT_PULLUP);
  digitalWrite(7, LOW); //Silnik nr 1 - do przodu
  digitalWrite(8, HIGH);
  digitalWrite(4, LOW); //Silnik nr 2 - do przodu
  digitalWrite(5, HIGH);

  analogWrite(3, 200); //Wypelnienie 1
  analogWrite(6, 200); //Wypelnienie 2
  

  //KODY PRZYCISKOW
  //GORA - -284099071
  //DOL - -300810751
  //LEWO - -334234111
  //PRAWO - -317522431
  //SRODK - -267387391
} 
 
void loop()  { 
  if (irrecv.decode()) {  
    otrzymany_sygnal = (irrecv.decodedIRData.decodedRawData);
    Serial.println(otrzymany_sygnal);
    irrecv.resume();
    if (otrzymany_sygnal == -284099071) {
      przod(1000); //Funkcja jedz do przodu z opoznieniem 1000
      Serial.println("PRZOD");
    }
    if (otrzymany_sygnal == -267387391) {
      stop(1000);
      Serial.println("STOP");
    }
  } 
}

void przod(int czas){
      digitalWrite(7, LOW); //Silnik nr 1 - do przodu
      digitalWrite(8, HIGH);
      digitalWrite(4, LOW); //Silnik nr 2 - do przodu
      digitalWrite(5, HIGH);
      delay(czas);
}
void tyl(int czas){
      digitalWrite(7, HIGH); //Silnik nr 1 - do tyłu
      digitalWrite(8, LOW);
      digitalWrite(4, HIGH); //Silnik nr 2 - do tyłu
      digitalWrite(5, LOW);
      delay(czas);
}
void stop(int czas){
      digitalWrite(7, LOW); //Silnik nr 1 - stop
      digitalWrite(8, LOW);
      digitalWrite(4, LOW); //Silnik nr 2 - stop
      digitalWrite(5, LOW);
      delay(czas);
}
void prawo(int czas){
      digitalWrite(7, LOW); //Silnik nr 1 - do przodu
      digitalWrite(8, HIGH); //SKRET W PRAWO
      digitalWrite(4, HIGH); //Silnik nr 2 - do tyłu
      digitalWrite(5, LOW);//SKRET W PRAWO
      delay(czas);
}
void lewo(int czas){
      digitalWrite(7, HIGH); //Silnik nr 1 - do tyłu
      digitalWrite(8, LOW); //SKRET W LEWO
      digitalWrite(4, LOW); //Silnik nr 2 - do przodu
      digitalWrite(5, HIGH); //SKRET W LEWO
      delay(czas);
}

Dlaczego odbiornik poczerwieni VS1838B przestaje reagować na  komende analogWrite (linijka 31 i 32),

Witam mam taki problem, zrobilem prostego robota, kod wyglada następująco. Są to dwa silniczki napędzane 8 baterii AA o lacznym V=10V , mostek L293D, osobne zasilanie arduino bateria 9V. Ogolnie to caly robot działa tylko chciałem dołożyć zdalne sterowanie. Odbiornik podczerwieni prawidłowo odbiera sygnały z nadajnika, problem zaczyna się gdy chce na silniki podać wypełnienie by mogły ruszyć. 

W UNO masz taką tabelkę do PWM:

image.thumb.png.627977535952722e37cbadafa6504a92.png

Jak problem występuje np. na pinie 3 to znaczy, że coś innego również korzysta z timera 2, skorzystaj  z pinów przypisanych do innego timera, czyli pierwszych 4 w tabelce.

  • Pomogłeś! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...