Wie kan me het duwtje in de juiste richting geven
46 berichten
• Pagina 1 van 5 • 1, 2, 3, 4, 5
Wie kan me het duwtje in de juiste richting geven
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);
}
}
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
Re: Wie kan me het duwtje in de juiste richting geven
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
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);
}
}
Re: Wie kan me het duwtje in de juiste richting geven
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
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);
}
Re: Wie kan me het duwtje in de juiste richting geven
Wellicht is dit de oplosssing:
Uit het hoofdstukje 'Gebruik variabelen '.
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 '.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Wie kan me het duwtje in de juiste richting geven
of gewoon defines gebruiken
cpp code
Gaat ie ook als een tierelier.
cpp code
#define MERKER1 6
Gaat ie ook als een tierelier.
Re: Wie kan me het duwtje in de juiste richting geven
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.
dus array merker[1......100] mag.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Wie kan me het duwtje in de juiste richting geven
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);
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);
Re: Wie kan me het duwtje in de juiste richting geven
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.
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
shooter@home.nl
Re: Wie kan me het duwtje in de juiste richting geven
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.
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.
Re: Wie kan me het duwtje in de juiste richting geven
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.
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) 330 keer gedownload
paul deelen
shooter@home.nl
shooter@home.nl
46 berichten
• Pagina 1 van 5 • 1, 2, 3, 4, 5
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten