BMP180 barometer
7 berichten
• Pagina 1 van 1
Advertisement
Re: BMP180 barometer
Het is niet nodig om te wachten na een Wire.requestFrom().
Je code heb ik bekeken en in readBytes() zag ik een wacht-lus na de Wire.requestFrom().
De Wire.requestFrom() doet een volledige I2C transaction en wacht tot de I2C transaction helemaal voorbij en afgerond is. De ontvangen data zit dan in een buffer in de Wire library. De return waarde is het aantal ontvangen bytes.
De hardware van de I2C bus hoort natuurlijk altijd goed te zijn, maar als er iets mis gaat op de bus, dan kun je een kleinere waarde terug krijgen (op dit moment is de waarde nul bij een bus error). Ook Wire.available() geeft dan datzelfde getal terug. Met jouw while-loop zou de sketch daar altijd in blijven hangen.
Je zou dit kunnen doen:
Of je kunt toch Wire.available() gebruiken:
In de Stream class zit ook een readBytes(). Die gebruik ik om I2C data te lezen. Dat is toevallig dezelfde naam als jij hebt voor die functie. Misschien is die Wire.readBytes() toch niet zo handig, daar zit een timeout in met millis(), terwijl die voor de Wire library niet nodig is. Een paar apart Wire.read() is misschien beter.
Stream::readBytes() : https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Stream.cpp
Je code heb ik bekeken en in readBytes() zag ik een wacht-lus na de Wire.requestFrom().
De Wire.requestFrom() doet een volledige I2C transaction en wacht tot de I2C transaction helemaal voorbij en afgerond is. De ontvangen data zit dan in een buffer in de Wire library. De return waarde is het aantal ontvangen bytes.
De hardware van de I2C bus hoort natuurlijk altijd goed te zijn, maar als er iets mis gaat op de bus, dan kun je een kleinere waarde terug krijgen (op dit moment is de waarde nul bij een bus error). Ook Wire.available() geeft dan datzelfde getal terug. Met jouw while-loop zou de sketch daar altijd in blijven hangen.
Je zou dit kunnen doen:
- Code: Alles selecteren
Wire.beginTransmission(BMP180_ADDR);
Wire.write(values[0]);
_error = Wire.endTransmission();
if (_error == 0)
{
int n = Wire.requestFrom(BMP180_ADDR,length);
if (n==length)
{
// goed ontvangen
Wire.readBytes( values, n);
}
else
{
// niet goed ontvangen
}
....
Of je kunt toch Wire.available() gebruiken:
- Code: Alles selecteren
Wire.requestFrom(BMP180_ADDR,length);
int n = Wire.available();
if (n==length)
In de Stream class zit ook een readBytes(). Die gebruik ik om I2C data te lezen. Dat is toevallig dezelfde naam als jij hebt voor die functie. Misschien is die Wire.readBytes() toch niet zo handig, daar zit een timeout in met millis(), terwijl die voor de Wire library niet nodig is. Een paar apart Wire.read() is misschien beter.
Stream::readBytes() : https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Stream.cpp
Laatst gewijzigd door Koepel op 31 Dec 2016, 16:00, in totaal 1 keer gewijzigd.
Re: BMP180 barometer
Hallo,
Ach, zoals gewoonlijk zijn er altijd meerdere wegen die naar Rome leiden...
Groet,
Henk Siewert
Ach, zoals gewoonlijk zijn er altijd meerdere wegen die naar Rome leiden...
Groet,
Henk Siewert
Laatst gewijzigd door hmjswt op 31 Dec 2016, 16:08, in totaal 1 keer gewijzigd.
Re: BMP180 barometer
Ik probeer alleen maar de helpen om je code te verbeteren hoor. Die while-loop is totaal overbodig en kan je sketch stoppen. Maar het staat je vrij om foute code te schrijven.
Re: BMP180 barometer
@hmjswt, Sorry, als je door mij niet meer reageert
De website http://www.swtcomp.com is ook weer leeg
De bedoeling van dit forum lijkt me om samen iets moois te maken.
hmjswt, come back ! https://www.youtube.com/watch?v=z8l-ERmiQjY&start=49
Soms lijkt het wel alsof ik een missie heb om de Wire library goed te gebruiken. Google maar op: github koepel
Doordat het vaak van elkaar wordt overgeschreven worden de fouten ook overgeschreven. Als ik er iets van zeg, dan zijn sommigen blij dat een onnodige I2C transactie op de bus verdwijnt of dat een onnodige wachtlus verwijdert kan worden.
En dat terwijl ik de Wire library helemaal geen goede library vind. De Wire library voor de Teensy gaat gelukkig wel in de goede richting op met non-blocking functies.
Het wachten na een Wire.requestFrom() ziet er voor mij hetzelfde uit als dit:

De website http://www.swtcomp.com is ook weer leeg

De bedoeling van dit forum lijkt me om samen iets moois te maken.
hmjswt, come back ! https://www.youtube.com/watch?v=z8l-ERmiQjY&start=49
Soms lijkt het wel alsof ik een missie heb om de Wire library goed te gebruiken. Google maar op: github koepel
Doordat het vaak van elkaar wordt overgeschreven worden de fouten ook overgeschreven. Als ik er iets van zeg, dan zijn sommigen blij dat een onnodige I2C transactie op de bus verdwijnt of dat een onnodige wachtlus verwijdert kan worden.
En dat terwijl ik de Wire library helemaal geen goede library vind. De Wire library voor de Teensy gaat gelukkig wel in de goede richting op met non-blocking functies.
Het wachten na een Wire.requestFrom() ziet er voor mij hetzelfde uit als dit:
- Code: Alles selecteren
void myFunction()
{
char buffer[10];
while( sizeof( buffer) < 10); // wait until buffer is created on the stack.
...
}
Re: BMP180 barometer
kenny says i kill you.
wel leuk ja die jeff.
en ach jullie allebei hebben een punt, ik zou zeggen ga eens bij elkaar koffie drinken in rome.
geintje,
hou de lol erin het is maar een hobby hoor,
wel leuk ja die jeff.
en ach jullie allebei hebben een punt, ik zou zeggen ga eens bij elkaar koffie drinken in rome.
geintje,
hou de lol erin het is maar een hobby hoor,
paul deelen
shooter@home.nl
shooter@home.nl
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast