"Body"opnieuw starten zodra ingang veranderd.

algemene C code
Berichten: 4
Geregistreerd: 08 Apr 2020, 17:48
Woonplaats: Sprang Capelle

"Body"opnieuw starten zodra ingang veranderd.

Berichtdoor JandeBoer80 » 08 Mrt 2021, 18:30

Hallo allemaal.

Ik ben op zoek hoe het volgende kan programmeren:

switch A = low

er gebeurd niks

switch A = high

start body 1

weer terug naar begin

dat is niet zo moeilijk te maken. Maar ik wil graag dat tijdens de uitvoer van body als dan switch A weer high wordt dat dan body 1 opnieuw begint.

Wie kan mij daarbij helpen ?

mvg
Jan

Advertisement

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

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor shooter » 08 Mrt 2021, 20:48

if !A reset body
if A run body
paul deelen
shooter@home.nl

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

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor shooter » 08 Mrt 2021, 20:49

je mag ook best wel de body vertellen hoor, dan kunnen we ook gerichter antwoord geven
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 08 Apr 2020, 17:48
Woonplaats: Sprang Capelle

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor JandeBoer80 » 08 Mrt 2021, 22:17

Hierbij de code.
Ik ben in bezit van een zgn spoorsein en een overweglamp + bel.

Als er nu iemand bij mij het erf oprijdt dan zit er een sensor die dat detecteert. Dan wil ik dat de overweglamp en bel afgaan. Daarna laat het dwergsein diverse seinbeelden zien.
Nu wil ik erin hebben dat bij het tonen van de seinbeelden en er komt weer iemand het erf op terwijl het programma loopt wil ik graag dat de eerst de bel weer afgaat en dan programma verder afloopt.

int Rood = 8;
int Geel = 9;
int Groen = 10;
volatile int Lamp1 = 3;
volatile int Lamp2 = 4;
volatile int Bel = 5;
int sensor = 2;
int switchState = LOW;


// Voer uit bij de start van programma
void setup() {
pinMode(Rood, OUTPUT);
pinMode(Geel, OUTPUT);
pinMode(Groen, OUTPUT);
pinMode(Lamp1, OUTPUT);
pinMode(Lamp2, OUTPUT);
pinMode(Bel, OUTPUT);
pinMode(sensor, INPUT);


digitalWrite(Rood, LOW);
digitalWrite(Geel, LOW);
digitalWrite(Groen, LOW);
digitalWrite(Lamp1, LOW);
digitalWrite(Lamp2, LOW);
digitalWrite(Bel, LOW);

}
void loop()
{
switchState = digitalRead(sensor);
if (switchState == LOW) {


}
else{
int i=0;
digitalWrite(Rood, LOW);
digitalWrite(Geel, LOW);
digitalWrite(Groen, LOW);
while (i<5) {
digitalWrite(Bel, HIGH);
digitalWrite(Lamp1, HIGH);
delay(500);
digitalWrite(Lamp1, LOW);
digitalWrite(Lamp2, HIGH);
delay(500);
digitalWrite(Lamp2, LOW);
digitalWrite(Bel,LOW);
i++;}
delay(1000);

int i1=0;
while (i1<2) {
digitalWrite(Rood, HIGH);
delay(200);
digitalWrite(Rood, LOW);
digitalWrite(Geel, HIGH);
delay(200);
digitalWrite(Geel,LOW);
digitalWrite(Groen, HIGH);
delay(200);
digitalWrite(Groen, LOW);
i1++;}
delay(500);

int ii=0;
while (ii<3) {
digitalWrite(Rood, HIGH);
digitalWrite(Geel, HIGH);
digitalWrite(Groen, HIGH);
delay(500);
digitalWrite(Rood, LOW);
digitalWrite(Geel, LOW);
digitalWrite(Groen, LOW);
delay(500);
ii++;}
delay(500);

int i2=0;
while (i2<3) {
digitalWrite(Rood, HIGH);
digitalWrite(Geel, LOW);
digitalWrite(Groen, LOW);
delay(500);
digitalWrite(Rood, LOW);
digitalWrite(Geel, HIGH);
digitalWrite(Groen, LOW);
delay(500);
i2++;}
delay(500);

int i3=0;
while (i3<3) {
digitalWrite(Rood, LOW);
digitalWrite(Geel, LOW);
digitalWrite(Groen, HIGH);
delay(500);
digitalWrite(Rood, LOW);
digitalWrite(Geel, HIGH);
digitalWrite(Groen, LOW);
delay(500);
i3++;}
delay(500);


}
}

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

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor shooter » 09 Mrt 2021, 19:26

ik zie nu wat je met bodie bedoeld, alles staat in een lange reeks.
zorg ervoor dat de i een naam krijgt dat is handig.
verder kun je dus met state veel meer zoals springen naar een andere etc. zeker als je ze telkens 10 laat verspringen zoals vroeger met basic gedaan werd.
Ik zie dat je ook nog heel veel delay gebruikt, Kijkk eerst naar blink without delay dan kun je ineens heel veel tegelijk doen.
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 08 Apr 2020, 17:48
Woonplaats: Sprang Capelle

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor JandeBoer80 » 10 Mrt 2021, 19:23

Ok bedankt. Hoe zou ik dit programma om kunnen zetten naar blink ipv delay ? Kan iemand me helpen aan een voorbeeld ?

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

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor shooter » 11 Mrt 2021, 20:58

elke situatie is een switch state, ofwel gewoon een int die aangeeft weke situatie aan de gang is.
in de loop zet je dan een timer neer die bijvoorbeeld een tijd aftelt van 1000 msec. met if (millis-starttimer)>wachttijd dan status veranderen in bijvoorbeeld 300




in een ander stuk zeg je dan if 300 dan lampA rood, etc.
ofwel een andereeen lamp of zo.
omdat de loop dan heel snel gaat kun je testen op veel meer tijden of situaties.
paul deelen
shooter@home.nl

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

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor shooter » 11 Mrt 2021, 20:58

als je een schema maakt met hoe de states zijn en alle verbindingen dan is er vast wel iemand die een begin schrijft
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 08 Apr 2020, 17:48
Woonplaats: Sprang Capelle

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor JandeBoer80 » 19 Mrt 2021, 19:59

flowchart.png
flowchart.png (13.78 KiB) 11227 keer bekeken


Bij deze.

De ingang "poort" wil ik graag zodra deze actief wordt dan het programma Seinbeeld stopt en het programma meteen doorgaat naar bel + lampen

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

Re: "Body"opnieuw starten zodra ingang veranderd.

Berichtdoor shooter » 20 Mrt 2021, 14:51

prima diagram makkelijk te vertalen , Nu ervoor zorgen dat je het vertaalt, zoals waar zet je de timer aan, en beter is als je >= schrijft dan heb je altijd raak. 30 min is trouwens 30*60000 milliseconden en dat moet in een unsigned long integer. Het blok seinbeeld uitbreiden naar een state machine switch case als een timer gedaan is dan de state veranderen van 10 naar 20 waardoor andere leds aangaan.
die 2e poort actief kan weg, als het programma doorloopt. dat betekent dus ook gelijk dat zodra poort actief is er gelijk naar de bel gesprongen wordt. Dan moet je wel gaan nadenken over wat er gebeurt als de poort nogmaals aangaat ook daar moet een timer komen.
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast