Bar riadený Arduinom

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.

Kód: Vybrat vše

#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: 290
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: P. Q. M.

Odpovědět

Kdo je online

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