Skocz do zawartości

Czy można podłączyć drugi żyroskop DFRobot SEN0386 w jednym arduino UNO


Pomocna odpowiedź


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega

SoftwareSerial portTwo(8, 9);
//Use software serial port RX:10,TX:11


DFRobot_WT61PC sensor_1(&mySerial);
DFRobot_WT61PC sensor_2(&portTwo);

void setup()
{
   //Use Serial as debugging serial port 
  Serial.begin(115200);
  //Use software serial port mySerial as communication seiral port 
  mySerial.begin(9600);
  //Revise the data output data frequncy of sensor FREQUENCY_0_1HZ for 0.1Hz, FREQUENCY_0_5HZ for 0.5Hz, FREQUENCY_1HZ for 1Hz, FREQUENCY_2HZ for 2Hz, 
  //                        FREQUENCY_5HZ for 5Hz, FREQUENCY_10HZ for 10Hz, FREQUENCY_20HZ for 20Hz, FREQUENCY_50HZ for 50Hz, 
  //                        FREQUENCY_100HZ for 100Hz, FREQUENCY_125HZ for 125Hz, FREQUENCY_200HZ for 200Hz.
  portTwo.begin(9600);
  sensor_1.modifyFrequency(FREQUENCY_50HZ);
sensor_2.modifyFrequency(FREQUENCY_50HZ);
}

void loop()
{
  if (sensor_1.available());(sensor_2.available()); {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z
    Serial.print("Angle\t"); Serial.print(sensor_2.Angle.X); Serial.print("\t"); Serial.print(sensor_2.Angle.Y); Serial.print("\t"); Serial.println(sensor_2.Angle.Z); //angle information of X, Y, Z 
    Serial.println(" ");
  }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor_1.Angle.X); lcd.print(sensor_2.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor_1.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor_1.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

Racja już mam portTwo ale teraz są dane z drugiego czujnika a nie ma z pierwszego. Co jeszcze poprawić?

monitor portu 2.jpg

1 minutę temu, MKopec napisał:

Racja już mam portTwo ale teraz są dane z drugiego czujnika a nie ma z pierwszego. Co jeszcze poprawić?

Z drugiego bo podczas uruchomienia ".begin()" nasluchyjesz wlasnie z tego uarta...musisz sie przelaczac pomiedzy nimi...tak jak pisalem "listen()"..nie wiem jak to dziala, te zyroskopy, ale jak to nie problem to np. nasluchuj jeden uart pol sekundy a pozniej drugi pol sekundy...i ten dziwny zapis "available()" w jednym if rozpisz na dwa...(no ja tak jeszcze nie widzialem)

  • Lubię! 1
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega

SoftwareSerial portTwo(8, 9);
//Use software serial port RX:10,TX:11


DFRobot_WT61PC sensor_1(&mySerial);
DFRobot_WT61PC sensor_2(&portTwo);

void setup()
{
   //Use Serial as debugging serial port 
  Serial.begin(115200);
  //Use software serial port mySerial as communication seiral port 
  mySerial.begin(9600);
  //Revise the data output data frequncy of sensor FREQUENCY_0_1HZ for 0.1Hz, FREQUENCY_0_5HZ for 0.5Hz, FREQUENCY_1HZ for 1Hz, FREQUENCY_2HZ for 2Hz, 
  //                        FREQUENCY_5HZ for 5Hz, FREQUENCY_10HZ for 10Hz, FREQUENCY_20HZ for 20Hz, FREQUENCY_50HZ for 50Hz, 
  //                        FREQUENCY_100HZ for 100Hz, FREQUENCY_125HZ for 125Hz, FREQUENCY_200HZ for 200Hz.
  portTwo.begin(9600);
  sensor_1.modifyFrequency(FREQUENCY_50HZ);
sensor_2.modifyFrequency(FREQUENCY_50HZ);
}

void loop()
{
  if (sensor_1.available()); {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z
   
    Serial.println(" ");
    listen(500)
   if (sensor_2.available());
    Serial.print("Angle\t"); Serial.print(sensor_2.Angle.X); Serial.print("\t"); Serial.print(sensor_2.Angle.Y); Serial.print("\t"); Serial.println(sensor_2.Angle.Z); //angle information of X, Y, Z 
   Serial.println(" ");
   listen(500)
  }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor_1.Angle.X); lcd.print(sensor_2.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor_1.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor_1.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

A więc znów coś poprawiłem ale znów nie jest dobrze. Tak jak pisałem jestem zielony. Co mam dopisać żeby działało?

  • Lubię! 1

 


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega

SoftwareSerial portTwo(8, 9);
//Use software serial port RX:10,TX:11


DFRobot_WT61PC sensor_1(&mySerial);
DFRobot_WT61PC sensor_2(&portTwo);

void setup()
{
   //Use Serial as debugging serial port 
  Serial.begin(115200);
  //Use software serial port mySerial as communication seiral port 
  mySerial.begin(9600);
  listen(500);
  //Revise the data output data frequncy of sensor FREQUENCY_0_1HZ for 0.1Hz, FREQUENCY_0_5HZ for 0.5Hz, FREQUENCY_1HZ for 1Hz, FREQUENCY_2HZ for 2Hz, 
  //                        FREQUENCY_5HZ for 5Hz, FREQUENCY_10HZ for 10Hz, FREQUENCY_20HZ for 20Hz, FREQUENCY_50HZ for 50Hz, 
  //                        FREQUENCY_100HZ for 100Hz, FREQUENCY_125HZ for 125Hz, FREQUENCY_200HZ for 200Hz.
  portTwo.begin(9600);
  listen(500);
  sensor_1.modifyFrequency(FREQUENCY_50HZ);
sensor_2.modifyFrequency(FREQUENCY_50HZ);
}

void loop()
{
  if (sensor_1.available()); {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z
   
    Serial.println(" ");
    
   if (sensor_2.available());
    Serial.print("Angle\t"); Serial.print(sensor_2.Angle.X); Serial.print("\t"); Serial.print(sensor_2.Angle.Y); Serial.print("\t"); Serial.println(sensor_2.Angle.Z); //angle information of X, Y, Z 
   Serial.println(" ");
  
  }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor_1.Angle.X); lcd.print(sensor_2.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor_1.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor_1.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

Tak też nie działa. Jak używać listen()  ?

 listen(500);
   ^~~~~~
   system
exit status 1
'listen' was not declared in this scope

Spróbuj jeszcze tak:

if (sensor_1.available()) {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); 		       Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z
 Serial.println(" ");
}    
   if (sensor_2.available()) {
    Serial.print("Angle\t"); Serial.print(sensor_2.Angle.X); Serial.print("\t"); Serial.print(sensor_2.Angle.Y); Serial.print("\t"); Serial.println(sensor_2.Angle.Z); //angle information of X, Y, Z 
   Serial.println(" ");
  
  }

 

(edytowany)
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
  
SoftwareSerial mySerial(10, 11);
SoftwareSerial portTwo(8, 9);

DFRobot_WT61PC sensor_1(&mySerial);
DFRobot_WT61PC sensor_2(&portTwo);

uint8_t stan = 0;
uint32_t last = 0;

void setup()
{
   
  Serial.begin(115200);
  mySerial.begin(9600);
  portTwo.begin(9600);
  
  sensor_1.modifyFrequency(FREQUENCY_50HZ);
sensor_2.modifyFrequency(FREQUENCY_50HZ);
}

void loop()
{
  if (millis() - last > 1000UL && stan == 0) { 
    mySerial.listen();
    stan = 1;
    last = millis();
   }
  if (millis() - last > 1000UL && stan == 1) { 
    portTwo.listen();
    last = millis();
    stan = 0;
    }
  
  
  if (sensor_1.available())  {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z
    }
   
    Serial.println(" ");
   
   if (sensor_2.available())  {
    Serial.print("Angle\t"); Serial.print(sensor_2.Angle.X); Serial.print("\t"); Serial.print(sensor_2.Angle.Y); Serial.print("\t"); Serial.println(sensor_2.Angle.Z); //angle information of X, Y, Z 
   Serial.println(" ");
   }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor_1.Angle.X); lcd.print(sensor_2.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor_1.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor_1.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

Spruboj tego...

bo "listen()" to nie "delay()" a komenda ktora powoduje nasluchiwanie jednego uarta

Edytowano przez farmaceuta
  • Pomogłeś! 1

Program Farmaceuty

Serdeczne podziękowania dla WAS WSZYSTKICH.

DZIAŁA!!!!

Pozostały drobne szlify z wyświetlaniem lcd.

Jest super.

Dziękuje

  • Lubię! 1
2 minuty temu, MKopec napisał:

Co jestem wam winien za pomoc?

Spoko😉 po to to forum tu jest zeby pomoc...zmieniajac "1000UL" na inna liczbe zmienisz odswiezanie...poprostu po 1000 ms zmieniaja sie teraz uarty...jak dasz 500 to beda zmieniac sie co pol sekundy

Zapamiętam tą lekcje. Może kiedyś spotkamy się przy piwie.

Jeszcze raz dziękuje i pozdrawiam.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
  
SoftwareSerial mySerial(10, 11);
SoftwareSerial portTwo(8, 9);

DFRobot_WT61PC sensor_1(&mySerial);
DFRobot_WT61PC sensor_2(&portTwo);

uint8_t stan = 0;
uint32_t last = 0;

void setup()
{
   
  Serial.begin(115200);
  mySerial.begin(9600);
  portTwo.begin(9600);
  
  sensor_1.modifyFrequency(FREQUENCY_50HZ);
sensor_2.modifyFrequency(FREQUENCY_50HZ);
}

void loop()
{
  if (millis() - last > 1000UL && stan == 0) { 
    mySerial.listen();
    stan = 1;
    last = millis();
   }
  if (millis() - last > 1000UL && stan == 1) { 
    portTwo.listen();
    last = millis();
    stan = 0;
    }
  
  
  if (sensor_1.available())  {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z
    }
   
    Serial.println(" ");
   
   if (sensor_2.available())  {
    Serial.print("Angle\t"); Serial.print(sensor_2.Angle.X); Serial.print("\t"); Serial.print(sensor_2.Angle.Y); Serial.print("\t"); Serial.println(sensor_2.Angle.Z); //angle information of X, Y, Z 
   Serial.println(" ");
   }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor_1.Angle.X); lcd.print(" X1 "); lcd.print(sensor_2.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor_1.Angle.Y); lcd.print(" Y1 "); lcd.print(sensor_2.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor_1.Angle.Z); lcd.print(" Z1 "); lcd.print(sensor_2.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

 

20210504_215419.jpg

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...