Lus programmeren

TI LaunchPad specifieke Software.
Berichten: 1
Geregistreerd: 04 Dec 2021, 22:22

Lus programmeren

Berichtdoor Rne1972 » 04 Dec 2021, 22:32

Beste bezoekers,

Kan iemand mij helpen bij het opstellen van een programmalus die een aantal keren herhaald, ben nieuw in de wereld van Arduino maar leer snel.

Dit stukje van een sketch wil ik 5 keer herhalen waarbij het nummer van de sensor automatisch wordt opgehoogd:

Serial.print("Sensor 1(*C): ");
Serial.print(sensors.getTempC(sensor1));
Serial.print(" Sensor 1(*F): ");
Serial.println(sensors.getTempF(sensor1));


Dus NIET door dit stukje code 5 keer te kopiëren zoals hieronder:

Serial.print("Sensor 1(*C): ");
Serial.print(sensors.getTempC(sensor1));
Serial.print(" Sensor 1(*F): ");
Serial.println(sensors.getTempF(sensor1));

Serial.print("Sensor 2(*C): ");
Serial.print(sensors.getTempC(sensor2));
Serial.print(" Sensor 2(*F): ");
Serial.println(sensors.getTempF(sensor2));

Serial.print("Sensor 3(*C): ");
Serial.print(sensors.getTempC(sensor3));
Serial.print(" Sensor 3(*F): ");
Serial.println(sensors.getTempF(sensor3));

Serial.print("Sensor 4(*C): ");
Serial.print(sensors.getTempC(sensor4));
Serial.print(" Sensor 4(*F): ");
Serial.println(sensors.getTempF(sensor4));

Serial.print("Sensor 5(*C): ");
Serial.print(sensors.getTempC(sensor5));
Serial.print(" Sensor 5(*F): ");
Serial.println(sensors.getTempF(sensor5));


Bovenstaande werkt wel, maar wil ik anders kunnen programmeren. Hoe doe je dit met een WHILE-DO of FOR-NEXT?

Alvast bedankt voor jullie suggesties.

Advertisement

Berichten: 3864
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Lus programmeren

Berichtdoor shooter » 06 Dec 2021, 21:03

dan kun je dat oplossen met een array dus tekst[0]="sensor0"
dan kun je dus bijvoorbeeld stand=0
dan kun je serial.print tekst[stand]
zo ook natuurlijk sensors.getTempC(sensor[stand])
dan wordt stand=stand+1
en dan doe je de loop gewoon nog een keer dat kan met een FOR stand = 0 ;stand<5;stand++ next lus, maar ook met een while stand<5 en als stand>5 dan wordt stand=0
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 604
Geregistreerd: 15 Nov 2015, 11:54

Re: Lus programmeren

Berichtdoor Gij Kieken » 06 Dec 2021, 21:07

Shooter was net iets rapper.
Hier een voorzetje,
Code: Alles selecteren
int Sensor[6] = {-5, 16, 18, 20, 21, 22};

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (uint8_t thisSensor = 1; thisSensor < 6; thisSensor++) {
    Serial.print("Sensor ");
    Serial.print(thisSensor);
    Serial.print(" "); 
    Serial.print(Sensor[thisSensor]);             
    Serial.println(" (*C): ");
    delay (1500);
   // Serial.println(sensors.getTempC(Sensor[thisSensor]));
  }
 while(1);
}

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Lus programmeren

Berichtdoor ctunes » 20 Dec 2021, 01:03

Rne1972 schreef:Beste bezoekers,

Kan iemand mij helpen bij het opstellen van een programmalus die een aantal keren herhaalt, ben nieuw in de wereld van Arduino maar leer snel.

Dit stukje van een sketch wil ik 5 keer herhalen waarbij het nummer van de sensor automatisch wordt opgehoogd:



Code: Alles selecteren
x = beginwaarde;
while (x< uiterstewaardemineen) {
function(x);
x++;
}
return();


Code: Alles selecteren
for ( x = beginwaarde ; x < uiterstewaardemineen; x++) {
function(x);
}
return();


Maar waarom zou je dat doen?

Ik zie niets mis in jouw code.

Gecompileerd is ze waarschijnlijk nog sneller ook.

(Vooropgesteld dat je compiler niet doet aan "loop_unrolling")

Pas op het moment dat jij vindt dat het voor jouw ongemakkelijk wordt, zou ik pas gaan beginnen met while() en for() loops.

En niet voor een "esthetisch" argument.

Op dit moment is je code voor iedereen duidelijk en begrijpelijk.

(Voor de processor maakt het uiteindelijk toch niets uit, of je "mooie" code schrijft of niet.)

Veel programmeerplezier!

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Lus programmeren

Berichtdoor ctunes » 20 Dec 2021, 01:12

zijn sensor1, sensor2, sensor3, sensor-n, verschillende sensoren?

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Lus programmeren

Berichtdoor ctunes » 20 Dec 2021, 01:18

ctunes schreef:zijn sensor1, sensor2, sensor3, sensor-n, verschillende sensoren?
Dan wordt het iets lastiger:

Als jij bijvoorbeeld hebt:"

sensor1::Sensor;
sensor2::Sensor;
sensor3::Sensor;
sensor4::Sensor;
sensor5::Sensor;

Dan valt dat niet eenvoudig in een for(;;) of while() loop te vatten.

De sensoren zijn dan inviduele entiteiten.

Wellicht met &sensor, &sensor+1, &sensor+2, benaderbaar, maar dat is puur hardwareafhankelijk.
Laatst gewijzigd door ctunes op 20 Dec 2021, 01:28, in totaal 1 keer gewijzigd.

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Lus programmeren

Berichtdoor ctunes » 20 Dec 2021, 01:23

Code: Alles selecteren
#define MAXSENSOR 5

sensor[MAXSENSOR]::Sensor;

for ( int x = 0; x < 5; x++) {

char line[] = sprintf(F("Sensor %d = %d\n\r"), x, sensor[x].Value);
Serial.print(&line);
}


Mits Sensor een object is, wat ik uit:
Code: Alles selecteren
sensors.getTempC()

wel kan opmaken.

(Let wel op, sensor1 bestaat niet meer, dat is sensor[0] geworden.)

Terug naar Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast