Alleen 3 regels uit p1 poort
Re: Alleen 3 regels uit p1 poort
DeDraak schreef:...of zie ik het gewoon niet?
Ja, dat dus.
Het gaat om dit stukje:
- Code: Alles selecteren
//else if( sscanf_P( buffer, PSTR( "1-0:1.8.2(%ld.%3ld*kWh)"), &tl, &tld) == 2)
else if ( sscanf( buffer, PSTR( "1-0:1.8.2(%ld.%3ld*kWh)"), &tl, &tld) == 2) //esp versie
Serial.println( "test tekst");
{
// 1-0:1.8.2 = Elektra verbruik hoog tarief (DSMR v4.0)
mEVHT = tl * 1000 + tld;
Serial.print( F( "Elektra - meterstand verbruik HOOG tarief (Wh): "));
Serial.println( mEVHT);
}
Als je gewend bent om naar code te kijken, dan kun je gemakkelijker over dingen heen lezen.
De // is commentaar, die laat ik even weg.
De conditie noem ik even "conditie".
De statements onder de "else if" die gecombineerd zijn tussen '{' en '}' noem ik even "hier een stuk of wat statements". Dat mag één regel code zijn, maar ook honderden regels code. Die zijn dus allemaal bij elkaar in een groep gezet tussen de '{' en de '}' onder de "else if".
Dan krijg je dit:
- Code: Alles selecteren
else if ( "conditie" )
{
"hier een stuk of wat statements"
}
Jij voegt het op deze manier toe:
- Code: Alles selecteren
else if ( "conditie" )
Serial.println( "nu breekt mijn klomp");
{
"hier een stuk of wat statements"
}
Na de "else if" komt één statement (of een groep statements tussen '{' en '}'). Jouw enige statement is "Serial.println( "test tekst");", daarmee is dat deel van de "else if" afgesloten. Vervolgens ziet de compiler een '{' die nergens meer bij hoort.
Advertisement
Re: Alleen 3 regels uit p1 poort
ok,
Maar wat er direct achter de esle if staat wordt uitgevoerd en krijg ik te zien in de serial monitor. en niet wat er tussen de accolades staat. Daarom dacht ik dat ik het juist in dat stukje else if moet uitvoeren wat ik wil omdat die waar is.
Als ik de meter aansluit dan wordt dit uitgevoerd:
En dit stukje niet:
Maar wat er direct achter de esle if staat wordt uitgevoerd en krijg ik te zien in de serial monitor. en niet wat er tussen de accolades staat. Daarom dacht ik dat ik het juist in dat stukje else if moet uitvoeren wat ik wil omdat die waar is.
Als ik de meter aansluit dan wordt dit uitgevoerd:
- Code: Alles selecteren
else if ( sscanf( buffer, PSTR( "1-0:1.8.2(%ld.%3ld*kWh)"), &tl, &tld) == 2) //esp versie
En dit stukje niet:
- Code: Alles selecteren
{
// 1-0:1.8.2 = Elektra verbruik hoog tarief (DSMR v4.0)
mEVHT = tl * 1000 + tld;
Serial.print( F( "Elektra - meterstand verbruik HOOG tarief (Wh): "));
Serial.println( mEVHT);
}
Re: Alleen 3 regels uit p1 poort
Ik kan niet duidelijker zijn dan wat ik al eerder schreef en hieronder nog eens herhaal. Als jij iets anders wilt, dan zul je zelf een programmeertaal moeten ontwikkelen die het doet zoals jij wilt
Arduino heeft ook een bladzijde over het if-statement: https://www.arduino.cc/reference/en/language/structure/control-structure/if/.
Arduino heeft ook een bladzijde over het if-statement: https://www.arduino.cc/reference/en/language/structure/control-structure/if/.
Koepel schreef:Een if-statement met veel if-else-if-enzovoorts ziet er zo uit:
cpp codeif( conditie)
statement;
else if( andere conditie)
een ander statement;
else
weer een ander statement;
Bijvoorbeeld:
cpp codeif( paprika == ROOD)
maakPaella();
else if( paprika == GEEL)
eetDePaprika();
else
lustIkNiet();
Er is dus steeds maar ruimte voor één statement. Als je er meerdere wilt, dan groepeer je die bij elkaar met de accolades:
cpp codeif( paprika == ROOD)
{
koopZeevruchten();
maakPaella();
}
else if( paprika == GEEL)
{
snijDePaprikaInStukjes();
eetDePaprika();
}
else
{
Serial.println("Is deze paprika groen of zo?");
lustIkNiet();
}
Re: Alleen 3 regels uit p1 poort
Als ik de meter aansluit dan wordt dit uitgevoerd:
Code:
Alles selecteren
else if ( sscanf( buffer, PSTR( "1-0:1.8.2(%ld.%3ld*kWh)"), &tl, &tld) == 2) //esp versie
Ik denk dat hierin je misverstand zit.
Met deze instructies gaat er niets naar de seriële monitor.
Hier worden de velden tl en tld gevuld met een waarde.
De if controleert of er daadwerkelijk 2 waardes gevonden zijn d.m.v. de == 2.
Als dat zo is wordt de instructie die volgt op de ) uitgevoerd. Eventueel een groep instructie zoals Koepel schreef maar dan tussen { }.
De compiler waarschuwt in dit geval dus niet als je zowel een enkele instructie als een groep instructies op de ) laat volgen.
Zoals je gemerkt hebt wordt dan alleen de eerste uitgevoerd.
Wie is er online?
Gebruikers in dit forum: eteopopu en 30 gasten