Bar riadený Arduinom

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
ArduinoAmater
Příspěvky: 1
Registrován: 03 kvě 2019, 12:27
Reputation: 0

Bar riadený Arduinom

Příspěvek od ArduinoAmater » 03 kvě 2019, 12:44

Zdravím, pracujem na Bare ktorý je riadený cez Arduino pomocou Bluetooth komunikácie. V smartfóne mám Bluetooth Terminál v ktorom mám vytvorené tlačidlá. Mám 3 tlačidlá a každé posiela inú informáciu pri zatlačení, sú to tlačidlá s jednou stabilnou polohou (button). Tlačidlo 1. po zatlačení posiela '1', Tlačidlo 2. posiela '2', Tlačidlo 3. posiela '3'. Problém nastáva keď stlačím tlačidlo 2 alebo viac krát za sebou, akoby sa doradu do pamäte nahrali znaky čo odošlem a potom to robí to že mi pumpy napumpujú drink a po dokončení programu začnú znovu podľa toho čo som zatlačil predtým. Čiže ak zatlačím za sebou tlačidlá 1, 2, 3 tak sa za sebou 3x pustí program a pohár mi už tým pádom prepĺňa. Je nejaký spôsob na vymazanie bluetooth buffera/pamäte alebo dá sa to nejak jednoducho ošetriť ? Za odpovede vopred ďakujem. Prikladám aj program.

#include <SoftwareSerial.h> // knižnica pre sériovú komunikáciu
#include <Servo.h> // knižnica pre servo
SoftwareSerial BT(10, 11); // 10 - RX, 11 - TX
int BluetoothData; // premenná pre BluetoothData
const int motorPin1 = 2; // zadefinovanie pumpy1
const int motorPin2 = 3; // zadefinovanie pumpy2
const int motorPin3 = 4; // zadefinovanie pumpy3
const int piezo = 5; // zadefinovanie piezo reproduktora
const int servoPin = 6; // zadefinovanie pinu pre servo

//------------------ SETUP -----------------------------------------------------------------------

void setup() {
Serial.begin(9600);
BT.begin(9600);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(piezo, OUTPUT);
}

//-----------------LOOP---------------------------------------------------------------------------
void loop() {


if (BT.available()){
BluetoothData=BT.read();
//--------------------DRINK 1---------------------------------------------------------------------

if(BluetoothData=='1'){ // ak sú prijaté dáta od bluetooth '1', začne robiť drink číslo 1.


Serial.println("Robím drink číslo 1.");
delay(1000);
digitalWrite(motorPin1, HIGH);
delay(2000);
digitalWrite(motorPin1, LOW);
delay(1000);
digitalWrite(motorPin2, HIGH);
delay(2000);
digitalWrite(motorPin2, LOW);
delay(1000);
digitalWrite(motorPin3, HIGH);
delay(2000);
digitalWrite(motorPin3, LOW);
delay(1000);
Serial.println("Drink číslo 1. dokončený");

}

//--------------------DRINK 2---------------------------------------------------------------------
if (BluetoothData=='2'){ // ak sú prijaté dáta od bluetooth '2', začne robiť drink číslo 2.
Serial.println("Robím drink číslo 2.");
delay(1000);
digitalWrite(motorPin3, HIGH);
delay(2000);
digitalWrite(motorPin3, LOW);
delay(1000);
digitalWrite(motorPin2, HIGH);
delay(2000);
digitalWrite(motorPin2, LOW);
delay(1000);
digitalWrite(motorPin1, HIGH);
delay(2000);
digitalWrite(motorPin1, LOW);
delay(1000);
Serial.println("Drink číslo 2. dokončený");
}
//--------------------DRINK 3---------------------------------------------------------------------
if(BluetoothData=='3'){ // ak sú prijaté dáta od bluetooth '3', začne robiť drink číslo 3.
Serial.println("Robím drink číslo 3.");
delay(1000);
digitalWrite(motorPin2, HIGH);
delay(2000);
digitalWrite(motorPin2, LOW);
delay(1000);
digitalWrite(motorPin1, HIGH);
delay(2000);
digitalWrite(motorPin1, LOW);
delay(1000);
digitalWrite(motorPin3, HIGH);
delay(2000);
digitalWrite(motorPin3, LOW);
delay(1000);
Serial.println("Drink číslo 3. dokončený");
}
}

}

Uživatelský avatar
SkullKeep
Příspěvky: 205
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Bar riadený Arduinom

Příspěvek od SkullKeep » 03 kvě 2019, 13:05

Co takhle udělat v posílacím programu další charakter např. "D" jako hotovo. A pri cteni buferu cist jako jen po "D" a ostatni vynechat.
Ja to řeším takhle, protože čtu až 6 hodnot z BT modulu:

Kód: Vybrat vše

void serialEvent() //čtení z BT modulu
{
  String dataS;
  while (BTs.available()) {
    dataS = BTs.readString();
  }
  BTs.println("Acces.");
  if (dataS[0] == 'N') {
    for ( byte i = 1; i < dataS.length() + 1 ; i++) {
      data[i - 1] = byte(dataS[i]);
    }
    BTs.println("Hotovo");
    nastav = true;
  } else nastav = false;
}
:twisted: :?: :arrow: :geek:

Odpovědět

Kdo je online

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