2 servo's aansturen via bluetooth [OPGELOST]

Deel 2:

Hi allen,
het is gelukt om de 2 posities van de servo door te sturen naar arduino.
De arduino ontvangt de posities als 2 aparte bytes, deze worden ingelezen in ‘value’
zie code hieronder.
value bevat dan steeds 2 waardes.
Hoe splits ik ‘value’ nu in 2 aparte waardes van de servo?

Deel 1:
Hi allen,

op het moment stuur ik via bluetooth, app inventor 2 en arduino een servo aan.

Met 1 servo gaat dit prima, via de app kan ik met een slider de servo besturen tussen 0 en 180 graden.

Nu wil ik 2 servos aansturen via de app.

Wat ik niet weet hoe ik dit via bluetooth door moet sturen naar de arduino?

Hoe maak ik aan arduino duidelijk dat het om servo1 of servo2 gaat?

Via app inventor 2 maak ik nu gebruik van “call.bluetoothClient.Send1ByteNumber”
En het nummer is hierbij dan de gewenste positie van de servo tussen 0 en 180

mijn code is arduino is alsvolgt:

int value = -1;
#include <Servo.h>
int servoPin = 9;
Servo servo;

void setup()
{

Serial.begin(9600);
servo.attach(servoPin);
servo.write(90);
}

void loop()
{
while (Serial.available()) // Read while there is data in the buffer
{

value = Serial.read();
Serial.println(value);
if (value >= 0) //If we have meaningful data
{
//Serial.println(value); // Debug
servo.write(value);
value = -1;
}
}
delay(100);
}

bluetoothAppWorkingTesting.ino (495 Bytes)

gedelete vanwege onzin.

ook gedelete vanwege nog meer onzin.

Hi Cartoonist,

Ik heb twee foto’s toegevoegd.
De ene het deel waar de bytes worden verzonden vanuit app inventor 2.
De andere is de serial monitor,
daar worden nu steeds twee waardes weergegeven 80 en 90
dit zijn de waardes van de servo.

Ik kom alsvolgt aan die waardes:
value = Serial.read();
Serial.println(value);

en value is dus:
90
80

Als ik vervolgens de servo aanstuur met servo.write(value)
dan pakt hij alleen 80.

Hoe krijg ik 80 en 90 van value nu in aparte variabele?

zodat ik kan maken:
servo1.write(value1);
servo2.write(value2);

Groeten,
Bob

Sorry voor de rommel die ik er van gemaakt heb :grin:

Maar ik denk dat je de code moet uitbreiden naar dit:

int value1 = -1;
int value2 = -1;
#include <Servo.h>
int servoPin1 = 9;
int servoPin2 = 10;
Servo servo1;
Servo servo2;

void setup()
{
  
  Serial.begin(9600);
  servo1.attach(servoPin1);
  servo2.attach(servoPin2);
  servo1.write(90);
  servo2.write(80);
}

void loop()
{
  while (Serial.available())         // Read while there is data in the buffer
  {

    value1 = Serial.read();
    Serial.println(value1);
    if (value1 >= 0)                   //If we have meaningful data
   {
     //Serial.println(value);           // Debug
     servo1.write(value1);
     value1 = -1;
   }
   delay(100);
   
    value2 = Serial.read();
    Serial.println(value2);
    if (value2 >= 0)                   //If we have meaningful data
   {
     //Serial.println(value);           // Debug
     servo2.write(value2);
     value2 = -1;
   }
  }
  delay(100);
}

Dankjewel cartoonist,

hij werkt perfect!

Mocht iemand ooit hetzelfde soort probleem ondervinden met app inventor 2 en arduino dan kan je altijd pm sturen :smiley:

Bedankt!

Dit werkt schijnbaar, maar je weet niet wat er precies zal gebeuren.
Je vertelt namelijk niet voor welke servo welk signaal bedoeld is, maar je gaat op een gegeven moment waardes ontvangen.
De eerste waarde die je kunt verwerken ga je naar servo 1 sturen, en de volgende stuur je naar servo 2.
Ik weet niet of dat een probleem is, maar eigenlijk doe je maar iets met de waardes die binnenkomen.
Als je een code zou meesturen die vertelt voor welke servo de volgende waarde geldig is, heb je meer zekerheid dat je geen waardes door mekaar gaat halen.
Dat signaal zou dan iets zijn dat buiten de geldige waardes voor je servo valt.
Dus duidelijk hoger als 180 als ik me niet vergis.

Zo te zien stuur je nu alleen cijfers.
Wellicht kun je ook letters zoals A en B sturen.
Dat maakt het maken en verwerken van de data wat ingewikkelder, mar de communicatie word wel betrouwbaarder.
Met andere letters kun je dan ook andere commando's gaan bedenken, zoals start, stop of reset bijvoorbeeld.
Geen idee of je daar behoefte aan gaat hebben.