Wie kan me het duwtje in de juiste richting geven

IDE gerelateerde berichten
Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 16 Sep 2015, 20:51

Hallo ik ben nieuw hier in bezig met de arduino.
De voor beeldjes werken wel, maar als ik iets zelf iets eenvoudigs wil maken werkt de schakeling niet zoals ik gedacht heb.
Ik krijg zelfs een merker niet aan de praat ( binair geheugen plaatsje) Ik zet de code hieronder en ben benieuw wat ik fout doe.
De merker blijft te alle tijde hoog? IK ben benieuwd of iemand mij even een zetje in de goede richting kan geven.

Groet, Norbert

const int fotoceloprit = 7;
const int knop = 5;
const int Signaalhut = 52;
const int srmerker2 = 50;
const int srmerker1 = 48;
const int srmerker = 46;


// Variables will change:

int telmerker ;

unsigned long timersignaaltijd;
unsigned long timer1; // tijd dat de fotocel wordt niet actief is

void setup() {
// initialize the LED pin as an output:
pinMode(Signaalhut, OUTPUT);
pinMode(srmerker, OUTPUT);


// initialize the pushbutton pin as an input:
pinMode(fotoceloprit, INPUT);
pinMode (knop, INPUT);


}

void loop() {


// SR geheugen voor de tijd van het akoustisch signaal
if (digitalRead(fotoceloprit) == HIGH) {
digitalWrite(srmerker, HIGH);
}
if (digitalRead(Signaalhut) == HIGH) {
digitalWrite(srmerker, LOW);
}
// Timer opkom vertraagd
if (digitalRead(srmerker) == LOW) {
timersignaaltijd = millis();
digitalWrite(Signaalhut, LOW);
}
if (millis() - timersignaaltijd >= 1000 ) { // ingestelde tijd
digitalWrite(Signaalhut, HIGH);


}

}

Advertisement

Berichten: 35
Geregistreerd: 19 Dec 2014, 00:06
Woonplaats: Heemskerk

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor McNes » 17 Sep 2015, 00:27

Even wat vraagjes,

Je gebruikt een Arduino Mega, vanwege de hoge pinnummers?

Verder definieer je de pin srmerker als output, maar in regel 40 probeer je hem als input te lezen. Ook op pin Signaalhut gebruik je digitalRead en digitalWrite commando's. Lijkt mij niet de bedoeling.

Gr., Hans

cpp code
const int fotoceloprit = 7;
const int knop = 5;
const int Signaalhut = 52;
const int srmerker2 = 50;
const int srmerker1 = 48;
const int srmerker = 46;


// Variables will change:

int telmerker ;

unsigned long timersignaaltijd;
unsigned long timer1; // tijd dat de fotocel wordt niet actief is

void setup() {
// initialize the LED pin as an output:
pinMode(Signaalhut, OUTPUT);
pinMode(srmerker, OUTPUT);


// initialize the pushbutton pin as an input:
pinMode(fotoceloprit, INPUT);
pinMode (knop, INPUT);


}

void loop() {


// SR geheugen voor de tijd van het akoustisch signaal
if (digitalRead(fotoceloprit) == HIGH) {
digitalWrite(srmerker, HIGH);
}
if (digitalRead(Signaalhut) == HIGH) {
digitalWrite(srmerker, LOW);
}
// Timer opkom vertraagd
if (digitalRead(srmerker) == LOW) {
timersignaaltijd = millis();
digitalWrite(Signaalhut, LOW);
}
if (millis() - timersignaaltijd >= 1000 ) { // ingestelde tijd
digitalWrite(Signaalhut, HIGH);


}

}

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 08 Jan 2016, 00:37

Hallo MCnes

Ik zie nu pas het antwoord
Ik ben al wat verder en gebruik nu PLC lib om te programmeren.
Maar kan nog steeds geen merkers toepassen.
Wat doe ik fout?
Ik moet daarvoor nog steed Physieke uitgangen gebruiken.
Dat wil ik natuurlijk niet.

cpp code
#include <plcLib.h>

int oproepakoustisch = 50;
int fotoceloprit = 4;
int merkerakoustischsignaal = 5; // is opwanneer de fotocel aktief is geweest
int merker1 = 6;
int merker2 = 7;
int merker3 = 8;
int merker4 = 9;

unsigned long TIMER0 = 0;
unsigned long TIMER1 = 0;

void setup()
{
pinMode(fotoceloprit, INPUT);
pinMode(merkerakoustischsignaal, OUTPUT);
pinMode(oproepakoustisch, OUTPUT);
pinMode(merker1, OUTPUT);
pinMode(merker2, OUTPUT);
pinMode(merker3, OUTPUT);
pinMode(merker4, OUTPUT);


}
void loop() {

in(fotoceloprit); // Read switch connected to Input 0 (Set input)
andNotBit(merker2);
set(merkerakoustischsignaal);
in(merker1); // Read switch connected to X1
reset(merkerakoustischsignaal); // Clear Y0 to 0 if X1 = 1, leave Y0 unaltered otherwise

in(merkerakoustischsignaal);
timerOn(TIMER0, 3000); // Tijd van het akoustisch signaal
out(merker1);

in (merkerakoustischsignaal);
set (merker2); // Read Input 0
in (merker3);
reset (merker2);


in(merker2); // Read Input 0
timerOn(TIMER1, 6000); // 2 second delay
out(merker3);

in (merkerakoustischsignaal);
out (oproepakoustisch);


}

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor FPCUser » 08 Jan 2016, 12:40

Wellicht is dit de oplosssing:

Just remember to specify your user defined integer-type variables as either unsigned integer (16-bit) or unsigned long (32-bit) to avoid confusion between user variables and pin names.


Uit het hoofdstukje 'Gebruik variabelen '.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor nicoverduin » 08 Jan 2016, 14:55

of gewoon defines gebruiken

cpp code
#define MERKER1 6

Gaat ie ook als een tierelier.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 08 Jan 2016, 19:11

een merker is gewoon een bitje in het geheugen, net zoals bij echte OLC hoef je geen adres mee te geven, mag wel als deze extern gebruikt wordt.
dus array merker[1......100] mag.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 11 Jan 2016, 23:22

Zo ik zie al wat reacties en kan dat zeker waarderen
Ik kom eigenlijk uit de PLC wereld en kan de link nog niet goed leggen naar arduino.
Ik heb nu een include geinstaleerd PLC liben kan daar aardig mee omgaan.
Nu heb ik ook een stukje on/ off toggle ergens vandaan dat goed werkt. Gebruik ik het gelijk naar de uitgangen dan werkt het wel. maar wil ik een merker als unsigned integer gebruiken dan laat hij het afweten.
In de onderste tweeregels wordt de merker aangeroepen.

Globaal heb ik de merker als volgt aangeroepen wat in andere sketches wel werkt. unsigned int Msignalarm;

Kortom wat doe ik niet goed?


reading3 = digitalRead(alarmaanuit);

// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the tijd1
if (reading3 == HIGH && previous3 == LOW && millis() - tijd3 > debounce3) {
if (state3 == HIGH)
state3 = LOW;
else
state3 = HIGH;
tijd3 = millis();
}
digitalWrite(Msignalarm, state3);
previous3 = reading3;

in(Msignalarm);
out(signalarm);

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

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 12 Jan 2016, 23:08

jouw merkers zijn gewoon in/uitgangen dus je moet ze wel toewijzen aan een pin.
je kunt ook merkers gebruiken hoor, maar dat zijn dan simpele variabelen. een oplossing is een array van merkers gebruiken merker[123] bijvoorbeeld.of zelfs 1.1 zoals siemens doet.
je kunt tegenwoordig codesys gebruiken op een RPi.
plclib werkt wel hoor, hoe ver ben je ondertussen?
kan je er wel mee helpen hoor, als je de vraag duidelijk houdt, de examples zijn talrijk.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 13 Jan 2016, 22:17

Hallo Paul,
Fijn de je me wilt helpen
Hoi ik die array zijn moeten realiseren weet ik nog niet. Waarschijnlijk iets voor later.
Dus dat wil ik even laten. De merkers werkten wel als ik een eenvoudige sketch had met Plclib
Gebruik ik echter het stukje C programma ervoor dan lijkt het niet met elkaar te praten.

digitalWrite(Msignalarm, state3); ............. hier is Msignalarm als unsigned int globaal gedeclareerd als merker.
previous3 = reading3;

in(Msignalarm); ...........hier is de merker die de uitgang zou moeten aansturen.
out(signalarm);

Dit werkt dus niet wat ik niet snap want volgens mij zou dat gewoon moeten werken.

Codesys op een Rpi zou mooi zijn maar dat programma is niet vrij en heb nu eenmaal de arduino wat ik eerst wil behedersen.
Ik hoop dat je wat met mijn vraag kan.
Alvast bedankt.

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

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 14 Jan 2016, 11:59

allereerst , probeer een paar voorbeelden met het beperkte plclib dus met X0 R0 etc.
ik zie ook geen plcsetup in jouw stuk, dus de in en uitgangen zijn default, en daar staan geen merkers in.
ik kan ze ook niet zo snel vinden in de manual
http://www.electronics-micros.com/software-hardware/plclib-arduino-command-reference/

dus je kunt niet zomaar een merker in de plc gebruiken.
dus in(merker) gaat niet, want hij moet dan bestaan in de plcsetup.
wat wel kan is bool merker1=in(X0);
etc.
en ook out(Y0)=merker1
om in de trand te blijven is het beter om zelf even een paar merkers te maken :
bool M0;
bool M1;
etc
zo kun je ook analoog werken met INT zoals
int I0;
....
of zelfs met floats
float F0;

maar je moet natuurlijk wel de variabelen zelfde houden van en naar de plclib routines.
geef je programma maar helemaal in een zipje met de plclib etc.
(mocht je de hele manual als file hebben graag (ik moet nu steeds op de site kijken)


wat ook kan is stukjes C ertussen zetten, maar je moet wel rekening houden met de lib die een aantal keywords gebruikt, en daar dus ook een syntax heeft.

plcsetup verbind Y0 met een bepaalde pin en zet dan ook die pin als output.
Bijlagen
plcLib.zip
(107.35 KiB) 321 keer gedownload
paul deelen
shooter@home.nl

Volgende

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten