Alleen 3 regels uit p1 poort

Arduino specifieke Software
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Alleen 3 regels uit p1 poort

Berichtdoor Koepel » 13 Mrt 2020, 12:02

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

Berichten: 247
Geregistreerd: 03 Okt 2015, 13:39

Re: Alleen 3 regels uit p1 poort

Berichtdoor DeDraak » 13 Mrt 2020, 12:18

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:
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);
      }

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Alleen 3 regels uit p1 poort

Berichtdoor Koepel » 14 Mrt 2020, 03:59

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/.

Koepel schreef:Een if-statement met veel if-else-if-enzovoorts ziet er zo uit:
cpp code
if( conditie)
statement;
else if( andere conditie)
een ander statement;
else
weer een ander statement;


Bijvoorbeeld:
cpp code
if( 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 code
if( paprika == ROOD)
{
koopZeevruchten();
maakPaella();
}
else if( paprika == GEEL)
{
snijDePaprikaInStukjes();
eetDePaprika();
}
else
{
Serial.println("Is deze paprika groen of zo?");
lustIkNiet();
}


Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Alleen 3 regels uit p1 poort

Berichtdoor zuid » 14 Mrt 2020, 09:29

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.

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ayaanoplreeva, KeithGam en 23 gasten