Change state of boolean?

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 12
Geregistreerd: 27 Feb 2016, 01:21

Change state of boolean?

Berichtdoor nielsnathaniel » 10 Mrt 2019, 17:17

Hi allen,

Dankzij youtube, dit forum en andere website kan ik inmiddels de meeste projecten(die ik wil) Maken.
Echter zit ik nu met een probleem waarvan ik de oplossing niet kan vinden, wellicht omdat ik de juiste benaming niet weet. Ik hoop dat jullie kunnen helpen

De situatie

Een laser sensor zorgt voor het schakelen van een relais, deze laser sensor wordt gebruikt in een Escape Room
Dat werkt super goed, echter willen we het wat makkelijker maken.
nu is het zo dat wij tijdens het resetten/klaar maken van de kamer allerlei kranen moeten open/dicht draaien (de sensor zit in een kraan, hierdoor lijkt het alsof je het water bediend )

Wat ons makkelijk lijkt is dat de arduino alleen kijkt of de sensorwaarde veranderd.
Anders uit gelegd, na het drukken op de reset knop start de arduino opnieuw op
De arduino krijgt nu dan bijvoorbeeld binnen
LaserSensor 1 HIGH
LaserSensor 2 LOW
etc etc
Daardoor gaat Relay1 aan en blijft Relay2 uit.

Wat wij willen creëren is dat de arduino vanaf het begin het volgende doet
LaserSensor 1 HIGH
LaserSensor 2 LOW
etc etc
Relay1 OFF
Rela2 OFF

Pas wanneer de waarde veranderd, dus van HIGH naar LOW of van LOW naar high schakelt de RELAY
Het is daardoor niet meer van belang of de lasersensor wel/geen signaal ontvangt maar alleen van belang of er een verschil is met de op start.
Hierdoor is het zo dat het zo kan zijn dat de ene keer de kraan open staat en de relay aan, maar bij een ander spel de kraan dicht staat en de relay aan.
Dit zou voor ons enorm veel werk schelen.

Ik hoop dat jullie begrijpen wat ik bedoel en wellicht hebben jullie een oplossing.

onderstaand heb ik geprobeerd, maar dat werkt niet.



#define Relay1 8
#define sensor1 2

int LaserState = 0;
int lastLaserState = 0;
int LaserCount =0;

void setup() {
Serial.begin(9600);
pinMode(sensor1, INPUT);//define detect input pin
pinMode(Relay1, OUTPUT);//define ACTION output pin


}
void loop() {
sens1();
sens2();
sens3();
sens4();
delay(100);
}

void sens1() {

LaserState = digitalRead(sensor1);
if (LaserState != lastLaserState)
{
if (LaserState == LOW)
{
LaserCount++;
delay(10);
}
lastLaserState == LaserState;

if (LaserCount % 4==0) {
digitalWrite(Relay1, HIGH);
} else {
digitalWrite(Relay1, LOW);
}
}
}

}

Advertisement

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

Re: Change state of boolean?

Berichtdoor Koepel » 11 Mrt 2019, 00:14

Dat is de StateChangeDetection : https://www.arduino.cc/en/Tutorial/StateChangeDetection
Met een uitbreiding, dat de huidige waarde van de ingang in de lastButtonState wordt gezet. Dat betekend in setup() even die ingang lezen en in de lastButtonState zetten.

Ik kom dan op het volgende uit:
cpp code
const int pinRelay1  = 8;
const int pinSensor1 = 2;

int lastLaserState = 0;
int laserCount =0;

void setup()
{
Serial.begin(9600);
pinMode( pinSensor1, INPUT); //define detect input pin
pinMode( pinRelay1, OUTPUT); //define ACTION output pin

// Initialiseer de lastLaserState op de huidige waarde
lastLaserState = digitalRead( pinSensor1);
}

void loop()
{
sens1();
}

void sens1()
{
int laserState = digitalRead( pinSensor1);

if( laserState != lastLaserState) // iets veranderd ?
{
if( laserState == LOW) // van HIGH naar LOW ?
{
laserCount++;
delay(10);
}

lastLaserState = laserState; // remember this new state


// Als teller 0, 4, 8, 12 enzo is, dan Relay1 HIGH
if( laserCount % 4==0)
{
digitalWrite( pinRelay1, HIGH);
}
else
{
digitalWrite( pinRelay1, LOW);
}
}
}

Berichten: 12
Geregistreerd: 27 Feb 2016, 01:21

Re: Change state of boolean?

Berichtdoor nielsnathaniel » 13 Mrt 2019, 00:54

Hi,

Bedankt voor je reactie, helaas werkt dit net niet.
In dit geval schakelt hij alleen zodra de laser wordt onderbroken
Dus even simpel
HIGH=Relay OFF
LOW=Relay on
HIGH=(geen verandering)
LOW=Relay off
HIGH=(geen verandering)
LOW=Relay on


Wellicht dat er ergens een regel verschoven moet worden maar ik weet (nog) te weinig af van state change.
Wellicht met bovenstaande info dat we(jullie ) verder komen.
In ieder geval geweldig dat je antwoord.

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

Re: Change state of boolean?

Berichtdoor Koepel » 13 Mrt 2019, 07:44

Helaas begrijp ik niet goed wat je wilt.
Ik dacht dat je wilde voorkomen dat er meteen een relais actief werd na het resetten.

De regel "if( laserCount % 4==0)" heb ik van jouw sketch overgenomen. Ik dacht dat je iets speciaals wilde doen door de kraan een paar keer open en dicht te doen. Omdat ik daar aan twijfelde heb ik voor de zekerheid nog de tekst "// Als teller 0, 4, 8, 12 enzo is, dan Relay1 HIGH" er boven gezet.

Berichten: 12
Geregistreerd: 27 Feb 2016, 01:21

Re: Change state of boolean?

Berichtdoor nielsnathaniel » 16 Mrt 2019, 14:16

Koepel schreef:Helaas begrijp ik niet goed wat je wilt.
Ik dacht dat je wilde voorkomen dat er meteen een relais actief werd na het resetten.

De regel "if( laserCount % 4==0)" heb ik van jouw sketch overgenomen. Ik dacht dat je iets speciaals wilde doen door de kraan een paar keer open en dicht te doen. Omdat ik daar aan twijfelde heb ik voor de zekerheid nog de tekst "// Als teller 0, 4, 8, 12 enzo is, dan Relay1 HIGH" er boven gezet.



Hi Bedankt voor je reactie, ik dacht dat die nodig was voor de count function. Dus wellicht ligt daar de verwarring.
Wat de wens is, is dat het niet uitmaakt hoe de kraan staat. De arduino checkt de status bij de opstart, dat is dan de begin positie, begin=dicht. Bij verandering van de lasersensor schakelt de relais.

Ik ga nog even uit vogelen, door jouw opmerking begrijp ik nu dat die modulo eigenlijk niet nodig is.

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

Re: Change state of boolean?

Berichtdoor shooter » 17 Mrt 2019, 23:36

in de setup kun je relais ook uit of aanzetten. Een aantal relais gaat aan als je er LOW naar toe zend.
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten