Bluetooth přijímá jiné hodnoty, než posílám z telefonu
-
- Příspěvky: 1030
- 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
Stejně vůbec nechápu, proč dvě Arduina a dva BT moduly.
Re: Bluetooth přijímá jiné hodnoty, než posílám z telefonu
Potřebuju vynulovat proměnou speedk v případě, že její hodnota se například tři vteřiny nezměnila. Pokud tedy speedk bude mít hodnotu 60 celé tři vteřiny, potřebuji, aby se vynulovala...
Proč dvě Arduina - testujeme v práci princip ovládání ventilátoru na dálku. Pro tyto testy jsme využili právě Arduino...
-
- Příspěvky: 1030
- 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
Tady je odzkoušený Master:
Zapojení je
MEGA - HC5
TX1 - RX
RX1 - TX
GND - GND
3V3 - Vcc
Program funguje tak, že měří dobu otáčky a z ní (netuším proč) vypočítá rychlost bicyklovýho kola. Tuto rychlost odesílá přes sériový port na Slave.
Po resetu začne nejprve odesílat 0 a odesílá data každých 0,1 sekundy.
Slave je tady:
Zapojen je takto:
UNO - HC5
10 - TX
11 - RX
GND - GND
3V3 - Vcc
Po resetu odesílá na PWM hodnotu 0, pokud začne dostávat od Master data, pak je přeposílá na PWM. Pokud dostane 20x po sobě od Master stejná data (tj. po dobu 2 sekund), pak odešle na PWM 0 a dělá to tak dlouho dokud nedojde ke změně příchozích dat. Pokud přestane dostávat od Master data déle než 2,5s , tak odešle na PWM hodnotu nula.
Ty programy jsem zhruba odzkoušel, měl jsem propojeno Mega a UNO přes uvedené piny, ovšem ne přes BT, ale přímo přes dráty. Pokud ti to nebude fungovat, tak hledej chybu v špatném propojení nebo chybné konfiguraci BT modulů (master/slave atp.)
Druhá věc je, že nejsi schopen ani rozumně specifikovat otáčky, aby bylo možné udělat scaling z otáček na PWM. Tak to holt bude na tobě.
Kód: Vybrat vše
//Master
#define PIN_IRQ 2
long start;
long elapsed;
float circMetric = 2.093; // wheel circumference (in meters)
volatile int speedk;
void setup() {
Serial1.begin(38400); // Default communication rate of the Bluetooth module
Serial.begin(38400);
pinMode(PIN_IRQ,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_IRQ), 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 = (int)((3600.0 * circMetric) / (float)elapsed);
}
void loop() {
Serial.print("Odesilam na Slave : ");
Serial.println(speedk);
Serial1.write(speedk);
delay(100);
}
MEGA - HC5
TX1 - RX
RX1 - TX
GND - GND
3V3 - Vcc
Program funguje tak, že měří dobu otáčky a z ní (netuším proč) vypočítá rychlost bicyklovýho kola. Tuto rychlost odesílá přes sériový port na Slave.
Po resetu začne nejprve odesílat 0 a odesílá data každých 0,1 sekundy.
Slave je tady:
Kód: Vybrat vše
//Slave
#include <SoftwareSerial.h>
#define Aura 3
#define TIMEOUT 2500 // doba cekani na data od Master v ms
int State = 0; // Vyctena hodnota z bluetooth
int OldState = 0;
int CountTheSame = 0;
unsigned long LastTime;
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
pinMode(Aura, OUTPUT);
mySerial.begin(38400);
Serial.begin(38400);
analogWrite(Aura, 0);
LastTime = millis();
}
void loop() {
if (mySerial.available() > 0) {
LastTime = millis();
State = mySerial.read();
Serial.print("Prijato z Master : " );
Serial.println(State);
// pokud prijdou po sobe dva stejne udaje zvysi se citac CountTheSame
if (OldState == State) CountTheSame++; else CountTheSame = 0;
OldState = State;
// pokud prijdou 20x po sobe stejne udaje nebo budou mimo rozsah 0-255, nastavi se na vystup PWM 0
if (State < 0 || State > 255 || CountTheSame > 20)State = 0;
analogWrite(Aura, State);
Serial.print("Odeslano na PWM : ");
Serial.println(State);
}
// Nulovani, pokud prestanou prichazet data od Master
if (millis() - LastTime > TIMEOUT) {
State = 0;
analogWrite(Aura, State);
LastTime=millis();
Serial.println("Nedostavam Data !");
Serial.print("Odeslano na PWM : ");
Serial.println(State);
}
}
UNO - HC5
10 - TX
11 - RX
GND - GND
3V3 - Vcc
Po resetu odesílá na PWM hodnotu 0, pokud začne dostávat od Master data, pak je přeposílá na PWM. Pokud dostane 20x po sobě od Master stejná data (tj. po dobu 2 sekund), pak odešle na PWM 0 a dělá to tak dlouho dokud nedojde ke změně příchozích dat. Pokud přestane dostávat od Master data déle než 2,5s , tak odešle na PWM hodnotu nula.
Ty programy jsem zhruba odzkoušel, měl jsem propojeno Mega a UNO přes uvedené piny, ovšem ne přes BT, ale přímo přes dráty. Pokud ti to nebude fungovat, tak hledej chybu v špatném propojení nebo chybné konfiguraci BT modulů (master/slave atp.)
Druhá věc je, že nejsi schopen ani rozumně specifikovat otáčky, aby bylo možné udělat scaling z otáček na PWM. Tak to holt bude na tobě.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 14 hostů