Hallo,
Ik ben niet bepaald een pro als het aan komt op programmeren. Nu heb ik voor een schoolproject een app gemaakt op mit app inventor 2, waar ik met een switch kan wisselen tussen auto modus en manual modus (het project is een zelf rijdende robot, maar ingrijpen moet een optie zijn voor het geval hij vasthangt) en een button om de runstatus te sturen. Dit heb ik geprogrammeerd in ai2 dat als de run button in geklikt wordt de bool naar true gaat en dus run actief is, dan zal hij een 1 sturen en stuurt voor de manual modus 1 als de switch niet actief is en 0 als deze wel actief is.
Kortom ik stuur 2 bytes.
Nu heb ik een klein test programmatje gemaakt die de connectiviteit moet testen (dus nog niks met de robot zelf)
dit is de code ervoor:
#include <AltSoftSerial.h>
AltSoftSerial Bluetooth;
int data[4];
byte i = 0;
unsigned long HuidigMillis, StartMillis, VerlopenMillis, minuten, seconden, milliseconden; // Tijds variabelen
float snelheid;
float topspeed = 0;
float Verbruikt = 0;
byte Run = 0;
byte manual = 0;
byte x_as = 0;
byte y_as = 0;
void stopwatch(void) {
HuidigMillis = millis();
VerlopenMillis = (HuidigMillis - StartMillis);
milliseconden = (VerlopenMillis % 1000);
seconden = ((VerlopenMillis / 1000) % 60);
minuten = ((VerlopenMillis / 60000) % 60);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Bluetooth.begin(9600);
Serial.println("Welkom bij de AGV, dit is een kleine demo van de wireless communicatie");
Serial.println("Ik wacht op het inklikken van de run button...");
while (Bluetooth.available() < 2) {
data[i] = Bluetooth.read();
i++;
}
Run = data[0];
manual = data[1];
i = 0;
Serial.println("Mijn status is als volgt:");
Serial.print("Run: ");
Serial.print(Run);
Serial.print(" manual: ");
Serial.print(manual);
Serial.println();
Serial.println();
StartMillis = millis();
}
void loop() {
switch (Run) {
case 0: // Robot wordt gestopt
StartMillis = millis();
while (Bluetooth.available() >= 2) {
data[i] = Bluetooth.read();
i++;
}
Run = data[0];
manual = data[1];
i = 0;
break;
case 1: // Robot is gestart
stopwatch();
Verbruikt = Verbruikt + random(10,30);
while (Bluetooth.available() >= 2) {
data[i] = Bluetooth.read();
i++;
}
Run = data[0];
manual = data[1];
i = 0;
switch (manual) {
case 0: // Robot staat in auto modus
snelheid = random(1.0,15.0);
if (snelheid > topspeed) {
topspeed = snelheid;
}
Bluetooth.print(topspeed);
Bluetooth.print(" m/s");
Bluetooth.print("|");
Bluetooth.print(minuten);
Bluetooth.print(":");
Bluetooth.print(seconden);
Bluetooth.print(".");
Bluetooth.print(milliseconden);
Bluetooth.print("|");
Bluetooth.print(Verbruikt);
Bluetooth.print(" W");
Bluetooth.println();
break;
case 1: // Robot staat in manual modus
if (Bluetooth.available() > 0) {
data[i] = Bluetooth.read();
i++;
}
Run = data[0];
manual = data[1];
x_as = data[2];
y_as = data[3];
if (i == 4) {
i = 0;
}
if (manual == 1 && Run == 1) {
Serial.print(Run);
Serial.print(", ");
Serial.print(manual);
Serial.print(", ");
Serial.print(x_as);
Serial.print(", ");
Serial.print(y_as);
Serial.println();
}
break;
}
break;
}
}
Er staat wat extra in zoals de snelheid etc. dit wil ik sturen en bepalen als de robot in automodus staat. Ook heb ik wat getest met switch cases, nog nooit gebruikt dus proberen kan geen kwaad denk ik.
Terug naar mijn punt, in de setup wacht ik op het indrukken van die run button en dan zendt hij 2 bytes. Nu heb ik geen flauw benul hoe ik dit ga uitlezen en aan mijn juiste variabel koppel, ik heb wel het een en ander rond gekeken maar daar snapte ik buiten dit concept niet fantastisch veel van.
Mijn vraag is dus hoe moet ik die bytes goed aflezen zodat ik überhaupt in mijn loop kom, want op het moment kom ik niet uit mijn setup.
Aan de hand van deze hulp kan ik dan ook alles in de loop voor het aflezen van de statussen goed maken want het is nogal wat. Misschien heeft iemand daar sowieso een betere suggestie voor, maar dat komt dan nog wel. Voor nu zou ik graag antwoord willen op mijn bovenste vraag en weten wat ik sowieso al fout doe.
groetjes,
Brum