Traplooplicht 2.0

Arduino specifieke Software
Berichten: 6
Geregistreerd: 03 Feb 2018, 17:04

Traplooplicht 2.0

Berichtdoor Vinnie78 » 13 Feb 2018, 13:58

Op aanraden van Koepel uit deze thread

viewtopic.php?f=8&t=2523&start=20

ben ik een nieuw onderwerp begonnen zodat ik misschien op deze manier aan het juiste antwoord kan komen.

Ik heb vorig jaar een Arduino uno gekocht tezamen met de PCA9685 16-kanaals PWM shield, 12 LED strips en 2 ultrasoon sensoren. Het idee was om een trapverlichting te maken die, afhankelijk van de richting, de traptreden 1-voor-1 zou laten oplichten en daarna weer langzaam zichzelf liet uitdoven. Samen met iemand anders waren we begonnen en was de code geschreven. Als triggers voor de looplichtcode (boven/onderaan de trap) gebruikten we ultrasoonsensoren, waarvoor ook een code geschreven was. Het signaal werd hoog indien de afstand, die door de sensor continu gemeten werd, kleiner werd (voet komt voorbij gelopen) dan een instelwaarde (overkant van de vrije traptrede).

Voor de test haalt de Arduino+shield zijn spanning uit de USB stekker. De shield heeft voor het schakelen van groot-vermogen trekkende LEDs-strips zijn eigen voeding bovenop de print (zie foto), maar voor deze test (en deze kleine ledjes) haal ik de spanning direct van de +5V en de GND pin bovenop de shield (2x gele draad bovenop). Ik heb de werking van de LEDs en PWM-shield eerst getest door een Knight-rider sketch te laden. Dat was gelukt dus alles was goed verbonden
Uiteindelijk bleek het schakelen met ultrasoonsensoren niet zo lekker te verlopen. We denken dat valse echo’s de sensoren op willekeurige moment leek te storen zodat het looplicht vervolgens som ook in de war raakte. Daarom leek het mij een mogelijk alternatief als ik PIR-sensoren gebruik in plaats van de ultrasoon. Het leek mij goed mogelijk dat deze sensoren minder vals-positieven geven en de gevoeligheid is op het PIR-printje ook nog eens aan te passen. De PIR print geeft gedurende een paar seconden een HOOG +5V signaal indien er bewegende warmte gevoeld wordt. Dat signaal wil ik nu graag gebruiken als nieuwe trigger voor het aansturen van de looplichtcode

Er is dus een looplicht code, gemaakt voor het herkennen van een trigger uit ultrasoonsensoren en daar in wil ik nu graag de code voor het herkennen van een hoog PIR-signaal hiervoor verwisselen. Ik heb 2 PIR sensoren die dus fysiek en softwarematig moeten worden verwisseld met de “ongewenste ultrasoon” sensoren/code.
Ik heb als test even een PIR sensor aangesloten op Pin2 en getest of deze ook goed werkt. Met een code van deze site

(https://learn.adafruit.com/pir-passive- ... -w-arduino)

kon ik dat bevestigen. De testschakelaar in de ene foto en de PIR sensor op de andere foto zijn een testopstelling om Pin2 HOOG te krijgen.
Nu moet ik dus in de nieuwe looplichtcode beschrijven dat er bvb een inputPin 2 is en dat als deze HOOG is, dat dan de looplicht subroutine gaan draaien als vanouds. Hetzelfde geldt dan natuurlijk ook voor de 2e PIR sensor aan de andere kant van de trap. Op zich hoeft er aan de grootste gedeelte van de code niks te veranderen. Op dit moment loopt die led-routine pas als de echoUpPin of echoDownPin hoog zijn. Pin 2 en 4 wilde ik gebruiken voor het meten van de toekomsttige boven- en ondersensor.
Ik zou dus het onnodige ultrasoon-proximity-triggergedeelte uit mijn huidige code willen slopen en deze vervangen door de PIR subroutine/code (echoUpPin 5 en echoDownPin 3 moet worden omgebouwd tot PIR HOOG signalen) zodat het triggeren correct beschreven wordt. Ik heb zelf echter nog niet genoeg verstand van het programmeren om deze verwisseling toe te passen. Hieronder staat de code voor zover die had kunnen werken met de ultrasoonsensoren.
Ik zou graag van iemand willen horen hoe ik deze code moet aanpassen zodat ik uiteindelijk de 2 PIR sensoren aan de praat krijg.


///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////// User settings, U may edit!! /////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////

#define SpeedOn 7 //Time speed leds turning on in mili seconds
#define SpeedOff 25 //Time speed leds turning off in mili seconds
#define AmoundLed 16 //Amound of leds you use, max 16
#define DetectdistanceUp 15 //Distance pingsensor upstairs can detect ( in CM! )
#define DetectdistanceDown 15 //Distance pingsensor downstairs can detect ( in CM! )
#define LedLevelSteps 10 //Number of steps to increase LED level.
#define LedLevelStepSize 20 //Step size to increase LED level.
#define MaxTimeLedsOn 1000 //Max number of runs the lights should stay on.
#define MinDelayBetweenTriggers 10 // Minimum number of runs between 2 triggers of the same sensor.

///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////// Start program do not edit!! /////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////

#define trigUpPin 3 //Sensor upstairs
#define echoUpPin 2 //Sensor upstairs
#define trigDownPin 5 //Sensor downstairs
#define echoDownPin 4 //Sensor downstairs
#define ledDown 8 //Sensor downstairs indication ( not required )
#define ledUp 9 //Sensor upstairs indication ( not required )

#define UPPER_SENSOR true // Used to make the code better readable
#define LOWER_SENSOR false // Used to make the code better readable

#include <Wire.h>
#include <PCA9685.h>

PCA9685 ledDriver;

// Parameters to keep the state
long counter = 0;
boolean directionUp = false;
boolean ledswitchedOn = false;

// Check whether the LEDs must be on.
boolean ledOn() {
if (counter > 0) {
--counter;
}
return counter > 0;
}

// Check whether the LEDs must be on, given a sensor was triggered.
boolean ledOn(boolean upperSensor) {
if (counter == 0) {
// Start cycle.
counter = MaxTimeLedsOn;
directionUp = !upperSensor;
} else {
// cycle is already running
if (directionUp == upperSensor) {
// End has been reached.
counter = 0;
} else {
// Another trigger at start, thus reset counter.
counter = MaxTimeLedsOn;
}
}
return ledOn();
}

long get_distance(boolean upperSensor)
{
int triggerPin = upperSensor ? trigUpPin : trigDownPin;
int echoPin = upperSensor ? echoUpPin : echoDownPin;

// Send reset trigger to the triggerPin, with pulse of 10 msec high.
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// Measure ping duration
long echoduration = pulseIn(echoPin, HIGH);
// Compute distance in cm. Devide by 2 because it is a 2-way travel.
// Devide by 29.1, which is number of microseconds per cm for the speed of sound. (sound-speed is 343 m/s)
return (echoduration / 2) / 29.1;
}

/// Get sensor status
boolean sensorIsTriggered(boolean upperSensor)
{
boolean detectDistance = upperSensor ? DetectdistanceUp : DetectdistanceDown;
boolean sensorActive = get_distance(upperSensor) < detectDistance;
return sensorActive;
}

void setup()
{
pinMode(trigUpPin, OUTPUT);
pinMode(echoUpPin, INPUT); //sonar upstairs
pinMode(trigDownPin, OUTPUT);
pinMode(echoDownPin, INPUT); //sonar downstairs
pinMode(ledDown, OUTPUT);
pinMode(ledUp, OUTPUT);

Wire.begin(); // Wire must be started!
ledDriver.begin(B101000); // Address pins A5-A0 set to B111000
ledDriver.init();
}

void loop()
{
// First check both sensors to make sure no event is missed.
boolean upperSensorTriggered = sensorIsTriggered(UPPER_SENSOR);
boolean lowerSensorTriggered = sensorIsTriggered(LOWER_SENSOR);
boolean ledNewState = ledswitchedOn;
if (upperSensorTriggered || lowerSensorTriggered) {
// At least one sensor is active, prefer upperSensor when both active
ledNewState = ledOn(upperSensorTriggered);
} else {
// No sensor triggered, just update the counters.
ledNewState = ledOn();
}
if (ledswitchedOn != ledNewState) {
// We must do something, since current state differs from new state

// Geen idee of de richting omhoog hetzelfde is als wat jullie "inverted" noemden.
// Desnoods veranderen in:
// boolean inverted = directionUp;
boolean inverted = !directionUp;
driveLeds(ledNewState, inverted);
}
}

// Test to show distance of the sensors on the LEDs
void showDistance()
{
long distUp = get_distance(true);
long distLow = get_distance(false);

if (distUp < distLow) {
// Show distance up
vuLeds(distUp, true);
}else {
vuLeds(distLow, false);
}
}

// On a scale from 0..100
void vuLeds(long value, boolean inverted)
{
int nrLedsOn = AmoundLed;
long maxDistance = 100;
if (value < maxDistance) {
nrLedsOn = static_cast<int>((AmoundLed * value) / maxDistance);
}
for (int i = 0; i < AmoundLed; ++i) {
int lednr = inverted ? (AmoundLed - 1 - i) : i;
int ledLevel = i > nrLedsOn ? 0 : 255;
ledDriver.setLEDDimmed(lednr, ledLevel);
}
}

void driveLeds(boolean on, boolean inverted)
{
for (int i = 0; i < AmoundLed; ++i) {
int lednr = inverted ? (AmoundLed - 1 - i) : i;
for (int level = 0; level < LedLevelSteps; ++level) {
int ledLevel = on ? level : (LedLevelSteps - 1 - level);
ledLevel = LedLevelStepSize * ledLevel;
if (ledLevel > 255) {
ledLevel = 255;
}else if (ledLevel < 0) {
ledLevel = 0;
}
ledDriver.setLEDDimmed(lednr, ledLevel);
delay(on ? SpeedOn : SpeedOff);
}
}
}
Bijlagen
20180213_092735.jpg
20180213_092735.jpg (145.02 KiB) 162 keer bekeken
20180213_115627.jpg
20180213_115627.jpg (77.94 KiB) 162 keer bekeken
20180213_092518.jpg
20180213_092518.jpg (100.85 KiB) 162 keer bekeken

Advertisement

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

Re: Traplooplicht 2.0

Berichtdoor Koepel » 14 Feb 2018, 10:11

De ultrasoon sensoren kunnen soms in de war raken van iets in de buurt. Dat hangt veel van de opstelling af. Als je een grote ruimte hebt, en ze hangen in de lucht of met de achterkant tegen een muur, dan gaat het wel goed.

De code voor de twee ultrasoon sensoren zit elkaar niet in de weg. Dus dat heb je goed gedaan. Ze worden echter wel meteen achter elkaar uitgevoerd. Misschien heeft de ene nog last van echo's van de andere. Dat geldt voor allebei, de loop() wordt opnieuw uitgevoerd en ook de eerste kan nog last hebben van de vorige tijdens de vorige loop().
Je zou een delay(100) kunnen zetten onderin de functie get_distance() om te kijken of dat iets uitmaakt.

Zou je voortaan code-tags willen gebruiken ?
Dat is de knop "Code" of de drop-down list "Select a Syntac" en dan "C++".

De setup() en loop() zitten halverwege. Kun je alle andere functies er onder zetten (of eventueel er boven) ?

Als je alleen maar "sensorIsTriggered()" en "ledOn()" en "driveLeds()" gaat gebruiken, komt dan het volgende te vervallen ?
- get_distance()
- showDistance()
- vuLeds()

Je kunt die functies even uit het zicht parkeren, of deze sketch zo houden en een nieuwe sketch maken.
Om die functies te even het zicht te zetten, kun je een nieuw tabblad erbij maken (met het drop-down-menu knopje rechtsboven), en daar die functies tussen een #ifdef zetten. Zet ook "sensorIsTriggered()" daar bij, en maak daarvoor een nieuwe.

Code: Alles selecteren
#ifdef MET_DE_ULTRASOON_SENSOREN
get_distance(
  ...
showDistance(
  ...
vuLeds(
  ...
sensorIsTriggered(
  ...
#endif


Een nieuwe sketch maken heeft echter mijn voorkeur, want ik wil je graag een bepaalde richting op duwen waardoor de sketch gaat veranderen :geek:

Het Adafruit voorbeeld gebruikt de StateChangeDetection: https://www.arduino.cc/en/Tutorial/StateChangeDetection.
Door met een variabele de vorige 'state' te onthouden, weet je of de status gewijzigd is.
Dat is handig als je precies het enkele moment wilt weten waarop het actief wordt.
Door alleen te kijken naar het moment dat de sensor actief wordt (en niet het moment dat hij weer niet-actief wordt) wordt de tijdschakelaar van de PIR sensor niet meer gebruikt. Je kunt die tijd laag zetten om snel klaar te staan om weer iets te detecteren.

De structuur van de code is niet helemaal logisch. Er zijn een paar mogelijkheden:
(1) Eén variabele die de status heeft: UIT, NAAR_BOVEN, NAAR_BENEDEN
(2) Twee variabelen, eentje voor omhoog en eentje voor omlaag, die beide kunnen zijn: UIT of AKTIEF
(3) Twee variabelen, één voor aktief en één voor omhoog of omlaag.
Dat is nu een beetje rommelig met lokale en globale variabelen. Je hebt niet echt een keuze gemaakt, en dat zou de sketch wel ten goede komen.

Die dubbele ledOn() functie is nogal onduidelijk voor me. Ik heb nog niet door wat daar gebeurt :roll:

Als die ultrasoon en "vu" functies er uit zijn, hoe wordt dan de snelheid bepaald waarmee de leds gaan lopen ?

Voor de PIR sensors is het nodig om een nieuwe sensorIsTriggered() te schrijven. Mijn voorkeur gaat uit naar die StateChangeDetection. Die werkt niet met 'true' en 'false' maar met de return waarde van digitalRead(), dus met HIGH en LOW.

Code: Alles selecteren
const int pirUpPin = 6;
const int pirDownPin = 7;

int lastPirStateUp = LOW;
int lastPirStateDown = LOW;

boolean sensorIsTriggered( boolean upperSensor)
{
  // set default for return value to false.
  boolean sensorActive = false;
 
  // Gather all the information
  pirStateUp = digitalRead( pirUpPin);
  pirStateDown = digitalRead( pirDownPin);

  if( upperSensor)
  {
    if( pirStateUp != lastPirStateUp)    // did the pin change ?
    {
      if( pirStateUp == HIGH)  // did the pin turn from LOW to HIGH just now ?
      {
        sensorActive = true;  // detected an active sensor.
      }
      lastPirStateUp = pirStateUp;  // remember the current state for the next time.
    }
  }
  else
  {
    if( pirStateDown != lastPirStateDown)
    {
      if( pirStateDown == HIGH)
      {
        sensorActive = true;
      }
      lastPirStateDown = pirStateDown;
    }
  }

  return sensorActive;
}


De code hierboven heb ik niet getest. Het gaat er van uit dat de PIR een hoog signaal afgeeft wanneer hij aktief wordt.

Berichten: 6
Geregistreerd: 03 Feb 2018, 17:04

Re: Traplooplicht 2.0

Berichtdoor Vinnie78 » 14 Feb 2018, 22:50

Beste Koepel,

Bedankt voor je reactie. Van de gehele code zijn volgens mij eigenlijk de onderste 40 regels (vanaf "... // Test to show distance of the sensors on the LEDs...") alleen maar een losstaande test geweest. Als het goed is, wordt deze code onderaan ook helemaal nooit uitgevoerd. Als je deze code in een nieuwe losse sketch plaatst dan kon ik daarmee de functie van de sensoren testen. Er ontstond dan een soort parkeersensor. Hoe dichter je een object naar een sensor bewoog, hoe meer lampjes er gingen branden. Voor de andere sensor geldt dan dat de leds begonnen te branden vanaf de andere kant. Maar goed, dat hele stuk code met die VU-led hoort hier dus eigenlijk niet thuis :-) , ook al was het wel goed om te zien dat de sensoren eigenlijk wel goed werkte.
De sensoren waren geplaatst aan de zijkant van de onderste en de bovenste treden van een trap in de hal. Op de traptreden zit vloerbedekking. De sensoren kijken dus als het ware naar de overkant van de trede (+/- 80cm) waarop men normaal zijn schoen plaatst.
Maar ik merkte dat de sensoren continu een soort high-pitched tsjirpend geluid maakte, zoals een slechte laptop transformator. Dus wilde ik afstappen van de ultrasoon sensor.

De code-tags is nieuw voor mij maar ik ga mij er in verdiepen en het proberen te gebruiken in mijn nieuwe sketches...

Het klopt dat als we de ultrasoonsensoren laten vervallen, dat we dan geen behoefte meer hebben aan de stukken
- get_distance()
- showDistance() , want deze code was onderdeel van een losstaande testcode onderaan de sketch
- vuLeds() , want deze code was onderdeel van een losstaande testcode onderaan de sketch

Ik moet dus nu jouw nieuwe PIR State Change Detection code gaan invoegen in de huidige code vanaf het moment dat er normaal een signaal kwam van de ultrasoonsensor om de looplicht subroutine te laten draaien.
Het klopt dat de PIR een +5V hoog signaal geeft op de pin indien er warmte verandering in het zichtveld optreedt. Die pin (6 en 7 voor boven en onder) "state change" moeten we dan nu koppelen aan het laten starten van de looplicht code.
Maar waar plak ik dat nu in mijn oude code? Ik zie nog niet zo goed waar in de oude de trigger zit om het looplicht te laten starten.

Misschien moet ik eerst de code maar eens opschonen.

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

Re: Traplooplicht 2.0

Berichtdoor Koepel » 14 Feb 2018, 23:27

Ik vervang alleen maar de inhoud van sensorIsTriggered(), die kijkt nu naar de PIR sensoren.

Dat getsjirp kan komen doordat het te snel achter elkaar wordt uitgevoerd. Ze geven een 'klik', meer niet. Dus die test met delay van 100ms, die ik voorstelde, dat zou kunnen helpen.

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

Re: Traplooplicht 2.0

Berichtdoor Koepel » 15 Feb 2018, 08:11


Berichten: 6
Geregistreerd: 03 Feb 2018, 17:04

Re: Traplooplicht 2.0

Berichtdoor Vinnie78 » 15 Feb 2018, 14:55

Bedankt, ik was inderdaad hier vergeten te melden dat ik het daar (zoals geadviseerd werd) ook gevraagd had. Hopelijk zitten er tips bij die voor mij als leek bruikbaar zijn.

Berichten: 6
Geregistreerd: 03 Feb 2018, 17:04

Re: Traplooplicht 2.0

Berichtdoor Vinnie78 » 20 Feb 2018, 17:03

Ik heb de code gevonden waarmee we oorspronkelijk de boel aardig aan de praat kregen, toen er nog geen VU-testmeter ingebouwd in de code was.
Je ziet nu de code waarmee het looplicht gaat lopen. Dat zijn onderaan de 4 void stukjes code driveLeds(+/- Inverted)(On / Off)
Zoals je ziet is het een andere basis dan de code uit mijn eerste post, maar ik heb het idee dat deze code het eigenlijk niet eens zo beroerd doet.
Als ik hier nou de ultrasoon zou kunnen vervangen voor het PIR stuk, dan ben ik eigenlijk ook klaar.
Als iemand mij op weg zou kunnen helpen dan zou dat erg fijn zijn. Ik moet eerst een PIR Pin definieren (bijvoorbeeld de oude echoPin) en daarna de voorwaarden.
Ik weet dat ik zou moeten beginnen bij het vervangen van de regel

if (pinonedistance < DetectdistanceUp) { ////////////// DETECTIE RANGE IN CM //////////////

Dat moet dan iets worden van: "Als het PIR signaal HOOG is, dan " digitalWrite(ledUp,HIGH); "
maar misschien is het hele stuk van Koepel er zo in te plakken?

In de Arduino Web editor ziet de code er trouwens een stuk overzichtelijker uit ( zie bijlage), maar ik denk dat misschien alle tabs en returns niet 100% overkomen als je code plakt?


///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////// User settings, U may edit!! /////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////



#define SpeedOn 7 //Time speed leds turning on in mili seconds
#define SpeedOff 25 //Time speed leds turning off in mili seconds
#define AmoundLed 14 //Amound of leds you use, max 16
#define DetectdistanceUp 6 //Distance pingsensor upstairs can detect ( in CM! )
#define DetectdistanceDown 6 //Distance pingsensor downstairs can detect ( in CM! )



///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////// Start program do not edit!! /////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////




#define trigUpPin 4 //Sensor upstairs
#define echoUpPin 5 //Sensor upstairs
#define trigDownPin 2 //Sensor downstairs
#define echoDownPin 3 //Sensor downstairs
#define ledDown 8 //Sensor downstairs indication ( not required )
#define ledUp 9 //Sensor upstairs indication ( not required )
#include <Wire.h>
#include <PCA9685.h>

long duration, distance;
boolean downSensorSet = false;
boolean upSensorSet = false;

PCA9685 ledDriver;


void setup() {
pinMode(trigUpPin, OUTPUT);
pinMode(echoUpPin, INPUT); //sonar upstairs
pinMode(trigDownPin, OUTPUT);
pinMode(echoDownPin, INPUT);//sonar downstairs
pinMode(ledDown, OUTPUT);
pinMode(ledUp, OUTPUT);

Wire.begin(); // Wire must be started!
ledDriver.begin(B101000); // Address pins A5-A0 set to B111000
ledDriver.init();

}

void loop() {

digitalWrite(trigUpPin, LOW);
delayMicroseconds(2); //dit is onhandig, geen delays gebruiken in code als het niet nodig is
digitalWrite(trigUpPin, HIGH);
delayMicroseconds(10); //dit is onhandig, geen delays gebruiken in code als het niet nodig is
digitalWrite(trigUpPin, LOW);
long pinoneduration = pulseIn(echoUpPin, HIGH); //hier meet hij hoe lang een pulsje hoog is
long pinonedistance = (pinoneduration/2) / 29.1;// de reden dat hier door twee gedeelt wordt is waarschijnlijk heen en terugreis van ping, reden voor 29.1 onbekend (niet van voet naar cm want voet = 30.48cm)
if (pinonedistance < DetectdistanceUp) { ////////////// DETECTIE RANGE IN CM //////////////
//if bottomsensor trigger = true turn off leds bottom up
//set bottomsensor trigger false
//else
//set sensor trigger true
//turn on leds from top down
digitalWrite(ledUp,HIGH);// Hier gebeurt de melding van de ultrasone sensor.
//driveLedsInvertedOff();

if(downSensorSet)
{
driveLedsInvertedOff();
downSensorSet = false;
}
else if(!upSensorSet && !downSensorSet)
{
upSensorSet = true;
driveLedsOn();
}


}
else {
digitalWrite(ledUp,LOW); //Hier kun je eventueel nog een extra stap doen als er niks gemeld wordt

delay(150);
}

digitalWrite(trigDownPin, LOW);
delayMicroseconds(2); //dit is onhandig, geen delays gebruiken in code als het niet nodig is
digitalWrite(trigDownPin, HIGH);
delayMicroseconds(10); //dit is onhandig, geen delays gebruiken in code als het niet nodig is
digitalWrite(trigDownPin, LOW);
duration = pulseIn(echoDownPin, HIGH); //hier meet hij hoe lang een pulsje hoog is
distance = (duration/2) / 29.1; // de reden dat hier door twee gedeelt wordt is waarschijnlijk heen en terugreis van ping, reden voor 29.1 onbekend (niet van voet naar cm want voet = 30.48cm)
if (distance < DetectdistanceDown) { ////////////// DETECTIE RANGE IN CM //////////////
//if topsensor trigger is true turn off leds from top down
//set topsensor trigger false
//else
//set sensor trigger variable true
//turn on leds from bottom up
digitalWrite(ledDown,HIGH);// Hier gebeurt de melding van de ultrasone sensor.

//driveLedsInvertedOn();

if(upSensorSet)
{
driveLedsOff();
upSensorSet = false;
}
else if(!downSensorSet && !upSensorSet)
{
downSensorSet = true;
driveLedsInvertedOn();
}


}
else {
digitalWrite(ledDown,LOW); //Hier kun je eventueel nog een extra stap doen als er niks gemeld wordt
delay(150);
}
}

void driveLedsOn()
{
for(int i=0; i<AmoundLed; i++) {
for(int level=10;level>=0;level--) {
ledDriver.setLEDDimmed(i,level*20);
delay(SpeedOn);
}
}
}

void driveLedsOff()
{

for(int i=0; i<AmoundLed; i++) {
for(int level=0;level<=10;level++) {
ledDriver.setLEDDimmed(i,level*20);
delay(SpeedOff);
}
}
}

void driveLedsInvertedOn()
{
for(int i=AmoundLed; i>=0; i--) {
for(int level=10;level>=0;level--) {
ledDriver.setLEDDimmed(i,level*20);
delay(SpeedOn);
}
}
}

void driveLedsInvertedOff()
{
for(int i=AmoundLed; i>=0; i--) {
for(int level=0;level<=10;level++) {
ledDriver.setLEDDimmed(i,level*20);
delay(SpeedOff);
}
}
}
Bijlagen
arduino web editor.jpg
arduino web editor.jpg (46.54 KiB) 59 keer bekeken

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten