Arduino / ESP8266 Serial.ReadByte

Hi,

Ik heb onlangs programeren van microchip etc weer eens opgepakt, waar ik in het verleden mat bascom AVR werkte, ben ik nu aan het kijken om met een esp8266 mijn roomba aan te sturen. Vroeger al wel eens gedaan met nodemcu lua, maar nu besloten eens te kijken of ik naar arduino wat meer onder de knie kan krijgen omdat ik werken met AVR's ook weer wil oppakken.

Nu loop ik tegen het volgende aan:

Om mijn roomba te starten met schoonmaken stuur ik serieel de volgende sequence:

c code:


void startCleaning()
{
  Serial.write(128);
  delay(50);
  Serial.write(131);
  delay(50);
  Serial.write(135);
  client.publish("roomba/status", "Cleaning");
}

Dit werkt prima, niks aan de hand. Echter nu komt het volgende, omdat het een ouder type is en het docking station het ooit begeven heeft en het laten vervangen van het moederplaat niet meer waard is laden we hem op via een gewone kabel. Reden om te checken of hij aan het laden is voordat hij op pad wordt gestuurd of niet.

Gelukkig kun je een hoop uitlezen aan sensor data, echter loop ik tegen een probleem aan, om de data terug te krijgen stuur je de volgende sequence:

c code:

  Serial.write(128);
  delay(50);
  Serial.write(142);
  delay(50);
  Serial.write(3);
  delay(50);

Sofar so good, nu krijgen we 10 bytes terug welke verdeeld zijn als volgt:

byte unsigned
word unsigned
word signed
byte signed
word unsigned
word unsigned

Dus ik denk prima ik doe de volgende data setup:

c code:

byte chargestate = 6; // byte unsigned 21
word voltage = 0; // word unsigned 22
int16_t  current = 0; // word signed 23
int8_t temp = 0; // byte signed 24
word batchargemah = 0; //word unsigned 25
word batcapmah = 0; //word unsigned 26

en na het versturen van de sequence om het datapakket op te halen doe ik het volgende:

c code:

  
  Serial.readBytes(chargestate, 1);
  Serial.readBytes(voltage, 2);
  Serial.readBytes(current, 2);
  Serial.readBytes(temp, 1);
  Serial.readBytes(batchargemah, 2);
  Serial.readBytes(batcapmah, 2);

Ik krijg dan echter een stapel foutmeldingen (eigenlijk voor elke declare)

Roomba:139:34: error: call of overloaded 'readBytes(byte&, int)' is ambiguous

Serial.readBytes(chargestate, 1);

Doe ik na de sequence dit:

c code:


uint8_t tempBuf[10];
.
.
.
.
Serial.readBytes(tempBuf, 10);

Dan krijg ik een prima dit gaat werken verify.

Echter hoe ga ik van deze tempBuf naar de diverse signed en unsigned bytes en words?

Of is er een andere mogelijkheid om de readBytes in te zetten om het direct in te lezen?

Ja ik weet dat er een roomba lib is maar die wil niet werken om een 1 of andere reden dus ik denk ik doe het zo dan leer ik er tenminste nog wat van.

An amplifier is just a modulator for a power supply |Toffe Gebruiker

Ik zou dat gewoon zo doen

c code:


Charstate = Tempbuf[1]
Voltage = Tempbuf[2]
Voltage <<8
Voltage = voltage + Tempbuf[3]

Enz

Of je moet aan de schrijvende kant iets aanpassen dat je wel per variabele kan schrijven want nu schrijft het blijkbaar 1 blok van 10 bytes in 1 keer.

Ja daar was ik al bang voor dat het zoiets zou worden.
Ja ik kan ze apart krijgen maar dan moet ik voor elke sensor 3 bytes schrijven om er 1 of 2 terug te krijgen (en blijven we met het zelfde zitten dat er af toe 2 terug komen :))

Ik ga het bitshiften eens proberen :) thanks!

An amplifier is just a modulator for a power supply |Toffe Gebruiker