Programvelger for valg av underprogram

Nu er en Atmel chip ikke en Ohm-måler, men spænding, men jeg forstår hvad du mener at gøre :slight_smile: Hvis 12 modstande har 2% nøjagtighed, så kan en worst case være 24% forkert ... ehr... jeg har ikke tænkt det igennem, men det kan du sikkert. Jeg har ikke kigget på Atiny85 spec sheet hvad område/nøjagtighed dens analog indgang er.

Nåh, til programmering som jeg til gengæld ved mere om. 8) Jeg vil nok skrive det som

void loop() {
 val = analogRead(pin) ;
 // delay debug print og andet sjov
 if      ( val <  86 ) func1() ;
 else if ( val < 170 ) func2() ;
 else if ( val < 260 ) func3() ;
  :
 else if ( val < 937 ) func11() ;
 else                  func12() ;
}

Her er man garanteret at en, og kun en, af funktionerne bliver brugt, og man skal kun angive skifteværdierne een (1) gang. Den anden metode kan man nemmere lave et overlap eller have en værdi der ikke matcher nogen if. (Hvad sker ved værdien 300 i det forrige eksempel?)

Og bare for at blære mig :stuck_out_tongue: (undskyld, det er ikke ment sådan ) så er

val>301&val<400

ikke helt rigtigt - det virker men det er ikke det du beder om. Et enkelt "&" er BitWise-AND som virker hvis de to udtryk er logiske. Det vil være mere korrekt at bruge "&&" som er en logisk operation AND. Det gør ingen forskel i dette eksempel, men hvis udtrykket er mere komplekst kan compileren optimere det logiske udtryk, det kan den ikke når der er bit-wise operatører i midten.

Jeg fortrækker at skrive "between" som

301 <= val && val <= 400

jeg synes det ser smukkere ud (smag og behag) og viser mere tydeligt at val ligger "mellem 301 og 400".