Bluetooth přijímá jiné hodnoty, než posílám z telefonu

QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od QRocky » 17 kvě 2019, 12:13

Zdravím,

mám ještě jednu potíž, která se týká projektu, který jsem řešil na odkaze níže, ale tento problém je jiného charakteru, proto pro pořádek zakládám nové vlákno.

Někde v tomto kódu zřejmě dělám chybu, protože když se mobil spáruje s Arduinem a pošlu mu z aplikace nějakou hodnotu, Arduino vždy přijme zcela jinou hodnotu (mrkněte na obrázky). Nevíte, prosím, v čem je ten zádrhel?
Screenshot_2019-05-17-10-59-27.png
20190517_105938.jpg

Děkuji

Kód: Vybrat vše

    int Aura = 3;
    int state; // Vyctena hodnota z bluetooth
    int AuraPWM;



    void setup() {
       
      
      pinMode(Aura, OUTPUT);

      Serial.begin(9600);
    }
    void loop() {

  if (Serial.available()>0) {
    state=Serial.read(); //reading the data from the bluetooth module
Serial.println(state);
delay(1000);
analogWrite(Aura, state);
}
      


Serial.println(state);
delay(1000);
analogWrite(Aura, state);


    }
Odkaz k minulému tématu, ale stejnému projektu
( https://www.arduino-forum.cz/viewtopic.php?f=37&t=1739 )

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od pavel1tu » 17 kvě 2019, 12:52

První co bych dal z kodu pryč je to delay() ve smyčce co vyčítáš data ze seriové linky

Kód: Vybrat vše

if (Serial.available()>0) {
state=Serial.read(); //reading the data from the bluetooth module
Serial.println(state);
// delay(1000);
// analogWrite(Aura, state);
}
Já totiž žiji pořád v domění, že pokud do seriové linky pošleš "50", přijde na druhou stranu také "50" ale po jednom znaku. Nejprve "5" pak "0".
Jestlipak se to pak nemusí nějak zpracovat ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od jankop » 17 kvě 2019, 13:05

Může být chybně nastavená rychlost komunikace s BT modulem nebo jeho konfigurace. Ale především Serial.read() čte jeden byte, nikoliv číslo. Tvůj terminál nejspíš odešle číslo 50 jako kódy 53d a 48d a možná přidá ještě CR+LF.
Podívej se na definici funkce Serial.parseInt(), to by asi bylo pro tvoje použití nejjednodušší.

To delay() není hezké, ale na příjem znaků by v tomto případě nemělo mít zásadní vliv.

QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od QRocky » 21 kvě 2019, 08:10

Ahojte, tak jsem aplikaci předělal na komunikaci mezi dvěma Arduiny: Master a Slave.

Master odečítá rychlost z reed senzoru, slave má tyto hodnoty přijímat a ovládat motor pomocí PWM. Čím rychleji se magnet točí kolem jazýčkového relé na reed senzoru, tím rychleji by měl běžet motor na slave. Pokud reed senzor nesnímá žádnou rychlost, pwm by mělo být 0%.

Bohužel tato aplikace mi zatím funguje tak, že na pwm výstupu se objevují zcela náhodné hodnoty a i když neprojíždím magnetem kolem reed, pwm je schopné mít na výstupu 100%. Už jsem z toho bezradný...

Prosím o pomoc... Děkuji

------------------------------------------------------------------------------

Master

Kód: Vybrat vše

float start, finished;
float elapsed, time;
float circMetric=2.093; // wheel circumference (in meters)
float circImperial; // using 1 kilometer = 0.621371192 miles
int speedk, speedm;

float AuraPWM;


    void setup() {
  Serial.begin(9600);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
  circImperial=circMetric*.62137; 

  attachInterrupt(digitalPinToInterrupt(2), speedCalc, RISING); 

  start=millis(); 
}


void speedCalc()
{
  //Function called by the interrupt

  if((millis()-start)>100) // 100 millisec debounce
    {
    //calculate elapsed
    elapsed=millis()-start;

    //reset start
    start=millis();
  
    //calculate speed in km/h
    speedk=(3600*circMetric)/elapsed; 

    //calculate speed in mph
    speedm=(3600*circImperial)/elapsed; 
    }
}
 

      
    
    void loop() {
     Serial.println(speedk);
     Serial.write(speedk);
     delay(100);

AuraPWM = speedk;
     

    }
------------------------------------------------------------------------------

Slave

Kód: Vybrat vše

#define Aura 3
int state = 0; // Vyctena hodnota z bluetooth
int OldState = 0;
int8_t AuraPWM = 0;
long unsigned OldMillis = 0;
long unsigned OldMillis2 = 0;
void setup() {
  pinMode(Aura, OUTPUT);
  Serial.begin(38400);
  Serial.begin(9600);
}
void loop() {
  if (millis() - OldMillis > 500) {
    OldMillis = millis();
    if (state - OldState == 0) {
      state = 0;
    }
    OldState = state;
  }
  if (Serial.available() > 0)
  {
    state = Serial.read();
    AuraPWM = state * 10;
    if (state != OldState) {
      OldMillis = millis();
      OldState = state;
    }
  }
  if (millis() - OldMillis2 > 1000) {
    OldMillis2 = millis();
    Serial.println(state);
    analogWrite(Aura, state);
  }
}
[code]

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od jankop » 21 kvě 2019, 08:54

1. Nauč se vkládat kód pomocí tlačítka na liště. (upravil jsem, admin)
2. Nakresli si schéma zapojení, a dej ho sem, protože děláš neustále se opakující chybu
3. Ta chyba je tohle

Kód: Vybrat vše

Serial.begin(9600);
Serial.begin(38400);
a k tomu tohle

Kód: Vybrat vše

Serial.begin(38400);
Serial.begin(9600);
Pokud si neujasníš ani, jak správně komunikovat na sériových portech, tak můžeš zkoušet do nekonečna. Zbytek programu jsem zatím ani neprohlížel.

QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od QRocky » 21 kvě 2019, 09:21

jankop píše:
21 kvě 2019, 08:54
1. Nauč se vkládat kód pomocí tlačítka na liště.
2. Nakresli si schéma zapojení, a dej ho sem, protože děláš neustále se opakující chybu
3. Ta chyba je tohle

Kód: Vybrat vše

Serial.begin(9600);
Serial.begin(38400);
a k tomu tohle

Kód: Vybrat vše

Serial.begin(38400);
Serial.begin(9600);
Pokud si neujasníš ani, jak správně komunikovat na sériových portech, tak můžeš zkoušet do nekonečna. Zbytek programu jsem zatím ani neprohlížel.

Ahoj, udělal jsem sketch zapojení. Takže mám upřednostnit jednu z rychlostí, jestli chápu správně...
20190521_091619.jpg

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od jankop » 21 kvě 2019, 09:59

Na jednom sériovém portu můžeš nastavit jen jednu rychlost, bude platit ta druhá nastavená, a na jednom portu by neměla komunikovat dvě zařízení. Ty máš na Serial připojeno USB i HC-5. HC-5 na Master připoj na Serial1 u Slave můžeš použít pro HC-5 Software Serial, pokud tam musíš mít výstup na USB. Druhá věc je, jestli máš správně konfiguraci HC-5, v tom ti neporadím, neznám tento obvod a zatím ho studovat nehodlám.

QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od QRocky » 21 kvě 2019, 10:10

jankop píše:
21 kvě 2019, 09:59
Na jednom sériovém portu můžeš nastavit jen jednu rychlost, bude platit ta druhá nastavená, a na jednom portu by neměla komunikovat dvě zařízení. Ty máš na Serial připojeno USB i HC-5. HC-5 na Master připoj na Serial1 u Slave můžeš použít pro HC-5 Software Serial, pokud tam musíš mít výstup na USB. Druhá věc je, jestli máš správně konfiguraci HC-5, v tom ti neporadím, neznám tento obvod a zatím ho studovat nehodlám.
Ok, s rychlostí to dává smysl. Dávám mu příkaz na určitou rychlost a pak jej měním. Chápu. Bluetooth by mělo být nastaveno správně, slave poslouchá mastera. Problém je spíše ve znacích, které chodí... A že si to celkově dělá, co chce.

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od kiRRow » 21 kvě 2019, 10:16

Pokud bude každé z těch dvou zařízení komunikovat jinou rychlostí. Nic víc než nesmysly ti z toho lézt nemůžou ...

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu

Příspěvek od jankop » 21 kvě 2019, 10:30

Hodnota speedk v Master může nabývat až cca 75 a ty ji násobíš ještě AuraPWM = state * 10;
Jaké otáčky, respektive jakou frekvenci hodláš vlastně snímat?
S ohledem na pochybnou konverzi float integer to pochopitelně bude dělat problémy i když opravíš komunikační rychlosti.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host