Go Down

Topic: Kritiek gevraagd (Read 521 times) previous topic - next topic

RS81

Hier is hij dan mijn eerste stuk(je) C...... Sommige dingen waren gelijk duidelijk omdat ik die bij andere talen ook gezien en gebruikt heb.
Het verhaal met String doe ik volgens mij nog niet goed. Bij andere talen kon ik 2 strings met een koppelteken bijvoorbeeld +=, ., + aan elkaar plakken. Bij C kreeg ik daar problemen en daarom gebruik ik nu naar mijn gevoel een totaal verkeerde manier om strings aan elkaar te plakken.

Het stukje C laat via een 433Mhz zender op de Arduino Nano 3.0 een klik aan klik uit zender schakelen. De code kijkt naar de waarde van een fotocel om te bepalen of in en uitschakelen nodig is.

Graag een mening over de code opbouw. Wat kan netter, beter, economischer, enz.

Code: [Select]


#include <NewRemoteTransmitter.h>

// Create a transmitter on address 123, using digital pin 11 to transmit,
// with a period duration of 260ms (default), repeating the transmitted
// code 2^3=8 times.

int transmitterId = 12254842;
int transmitterPin = 7;

int photocellPin = 0;     // Fotocell verbonden met 10k aan massa
int switchOnValue = 450;  // Inschakelgrens
int switchOffValue = 550; // Uitschakelgrens, moet hoger liggen omdat de verlichting aan gaat
int switchDelay = 10;       // Aantal meting dat onder of boven de schakelgrens moet liggen
int switchFreeze = 400;     // De tijd dat de er geen schakeling wordt gedaan na het in of uit schakelen
bool debugging = true;    // Berichten in serial monitor bekijken
// ======= End of settings =======

int ticks = 0;             // De duur dat de Arduino online is
int photocellReading;     // Waarde van de fotocell
int lightState = 0;       // Huidige staat van de verlichting 0 = uit, 1 = aan
int currentDelay = 0;      //Teller voor de in/uitschakelvertraging
NewRemoteTransmitter transmitter(12254842, 7, 260, 3); //Object aanmaken



void setup() {
  Serial.begin(115200);
  transmitter.sendUnit(0, false);
  debugdata("Lamp uit");
 
}

void loop()
{
  //Waarde uitlezen
  photocellReading = analogRead(photocellPin); 
  //Debug info
  String msg = "Fotocel waarde:";
  msg += photocellReading;
  debugdata(msg);

   if(photocellReading < switchOnValue && lightState == 0) //Waarde kleiner dan inschakelgrens en lamp status is uit
   {
     //Vertraging optellen
     currentDelay++;
     //Debug info
     String msg = "Aantal keer waarde in inschakelbereik:";
     msg += currentDelay;
     debugdata(msg);
     
     if(currentDelay > switchDelay) //Vertragingsgrens bereikt > verlichting inschakelen
     {
       transmitter.sendUnit(0, true);
       debugdata("Lamp aan");
       lightState = 1;
       currentDelay = 0;
     }
   }
   //Zelfde verhaal als hierboven maar dan andersom: Verlichting uitschakelen
   else if (photocellReading > switchOffValue && lightState == 1)
   {
       currentDelay++;
       String msg = "Aantal keer waarde in uitschakelbereik:";
       msg += currentDelay;
       debugdata(msg);
     if(currentDelay > switchDelay)
     {
      transmitter.sendUnit(0, false);
      debugdata("Lamp uit");
      lightState = 0;
      currentDelay = 0;
     }
  }
 else //Vertragingsteller resetten naar 0 als de waarde niet constant onder een schakelgrens valt
  {
    if (currentDelay != 0)
    {
      debugdata("reset currentDelay");
      currentDelay = 0;
    }
  }
  delay(1000);
}

void debugdata(String msg)
{
  if(debugging == true)
  {
    Serial.println(msg);
  }
 
}



Go Up