• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
odczyt sensorów + danych z myszki przez usb shield
#6
Ok, to tutaj mam połączone oba kody. Metodą eliminacji wyszło na to, że problematyczna jest linijka  "if (Usb.Init() == -1)" z kodu mouse hida.
Jej obecność powoduje opóznienia i brak reakcji ze strony czujnika odległości i enkodera, ale myszka za to działa.
Po skasowaniu linijki myszka jest martwa, za to reszta czujników śmiga i to w pożądanej prędkości Smile
Może coś by to mówiło doświadczonym kolego i koleżankom? 

Kod:
#include <hidboot.h>
#include <usbhub.h>

// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>

class MouseRptParser : public MouseReportParser
{
protected:
  void OnMouseMove  (MOUSEINFO *mi);
  void OnLeftButtonUp (MOUSEINFO *mi);
  void OnLeftButtonDown (MOUSEINFO *mi);
  void OnRightButtonUp  (MOUSEINFO *mi);
  void OnRightButtonDown  (MOUSEINFO *mi);
  void OnMiddleButtonUp (MOUSEINFO *mi);
  void OnMiddleButtonDown (MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{
    Serial.print("dx=");
    Serial.print(mi->dX, DEC);
    Serial.print(" dy=");
    Serial.println(mi->dY, DEC);
};
void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
{
    Serial.println("L Butt Up");
};
void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
{
    Serial.println("L Butt Dn");
};
void MouseRptParser::OnRightButtonUp  (MOUSEINFO *mi)
{
    Serial.println("R Butt Up");
};
void MouseRptParser::OnRightButtonDown  (MOUSEINFO *mi)
{
    Serial.println("R Butt Dn");
};
void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
{
    Serial.println("M Butt Up");
};
void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
{
    Serial.println("M Butt Dn");
};

USB     Usb;
USBHub     Hub(&Usb);
HIDBoot<USB_HID_PROTOCOL_MOUSE>    HidMouse(&Usb);

MouseRptParser                               Prs;

//czujnik odległości
#define trigPin 12
#define echoPin 11
//

//diody
#define czerwona 18
#define zielona 17
#define niebieska 19
//

//ekran
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu nowego wyświetlacza
//

// enkoder
#include <Encoder.h>
Encoder myEnc(15, 16);
//

int akcja = 0;
unsigned long previousMillis = 0; 
const long interval = 500; 

void setup() {

  Serial.begin( 115200 );
  
  lcd.begin(16, 2); //ekran
  lcd.clear();
  lcd.setCursor(0, 0); //Ustawienie kursora
  lcd.print("Dystans  Rotacja");
  lcd.setCursor(0,1);
  pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
  pinMode(echoPin, INPUT); //a echo, jako wejście
  pinMode(czerwona, OUTPUT);
  pinMode(zielona, OUTPUT);
  pinMode(niebieska, OUTPUT);

#if !defined(__MIPSEL__)
    while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
    Serial.println("Start");

    if (Usb.Init() ==-1)
        Serial.println("OSC did not start.");

    delay( 200 );

    HidMouse.SetReportParser(0, &Prs);
  
}
// enkoder
long oldPosition  = -999;
//

void loop() {  
    Usb.Task();
  unsigned long currentMillis = millis();
   if (currentMillis - previousMillis >= interval) {
    // save the last time
    previousMillis = currentMillis;
  Serial.print(zmierzOdleglosc());
  Serial.println(" cm");  
  lcd.setCursor(0, 1); //Ustawienie kursora w odpowiednim momencie
  lcd.print(zmierzOdleglosc()); //Wyświetlenie tekstu
  lcd.print(" cm  ");
  zakres(1, 25); //Włącz alarm, jeśli w odległości od 10 do 25 cm od czujnika jest przeszkoda  
  zakres2(26, 200);
  reakcja();
  }

  // enkoder
  long newPosition = myEnc.read();
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    Serial.println(newPosition);
     lcd.setCursor(10, 1); //Ustawienie kursora w odpowiednim momencie
     lcd.print(newPosition); //Wyświetlenie tekstu
     lcd.print(" ");
  }
  //
}

int zmierzOdleglosc() {
  long czas, dystans;

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  czas = pulseIn(echoPin, HIGH);
  dystans = czas / 58;

  return dystans;
}

void zakres(int a, int b) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko > a) && (jakDaleko < b)) {
      digitalWrite(czerwona, HIGH);
      akcja = 1;
  } else {
      digitalWrite(czerwona, LOW);
akcja = 0;
  }
}

void zakres2(int a, int b) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko > a) && (jakDaleko < b)) {
      digitalWrite(zielona, HIGH);
  } else {
      digitalWrite(zielona, LOW);
  }
}

void reakcja() {
  if (akcja == 1) {
      digitalWrite(niebieska, HIGH);
  } else {
      digitalWrite(niebieska, LOW);
  }}
 
Odpowiedź
  


Wiadomości w tym wątku
RE: odczyt sensorów + danych z myszki przez usb shield - przez michalm89 - 10-07-2018, 22:18

Skocz do:


Przeglądający: 1 gości