Vooreerst mijn naam is Ivan, en ben starter in Arduino.
Met mijn leeftijd weet ik waar de mosterd vandaan komt.
Hoe dan ook, ik zit met een vraag:
Ik zou graag, in het kader van domotica, een impuls relais software matig opzetten:
Ik druk op een drukknop en mijn belasting (lamp, stopcontact, ...) gaat aan.
Ik laat de drukknop los, de belasting blijft aan.
Ik druk nogmaals op de drukknop, en mijn lamp gaat uit.
De lamp zou gestuurd worden via een solidstate relais.
Dus ik wel geen fysische of mechanische zaken meer...
Dit was mijn code:
// Pin 13 has an LED connected on most Arduino boards.
int led = 13;
// in test I want to use input 34.
int input_IO = 34;
// Variable to use in impuls switch
int knop1_nieuw;
int knop1_oud;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
// initialize the digital pin as an input.
pinMode(input_IO, INPUT);
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop()
{
knop1_nieuw = input_IO;
if ((knop1_nieuw != knop1_oud) && knop1_nieuw)
{
led = 1;
}
else
{
led = 0;
}
knop1_oud = knop1_nieuw;
digitalWrite(led,digitalRead(input_IO));
}
Ik begr?p je opzet niet goed. Als je een solid state relais gebruikt heb je toch geen Arduino nodig? De impuls rechtstreeks op het relais en klaar.
Of mis ik iets?
Met vriendelijke groet
Jantje
Ivan
Sorry voor de verwarring. Had ik bistabiel en solid state door elkaar gehaald.
Als ik naar je code kijk zou ik vermoeden dat je dit wilt (maar ik kan er naast zitten )
// Pin 13 has an LED connected on most Arduino boards.
#define led 13
// in test I want to use input 34.
#define input_IO 34
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
// initialize the digital pin as an input.
pinMode(input_IO, INPUT);
}
// the loop routine runs over and over again forever:
void loop()
{
digitalWrite(led,digitalRead(input_IO));
delay(100); //as a quick debounce solution but a real debounce would be better
}
Verder deze bedenking
Input IO 34? Heb je een mega?
En wegens de led en weerstand op pin 13 kan je beter een andere pin gebruiken om je solid state relais aan te schakelen.
Met vriendelijke groet
Jantje
oesp
Ik zit nog altijd met bistabiel in men hoofd. De andere opmerkingen blijven geldig.
// Pin 13 has an LED connected on most Arduino boards.
#define led 13
// in test I want to use input 34.
#define input_IO 34
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
// initialize the digital pin as an input.
pinMode(input_IO, INPUT);
}
// the loop routine runs over and over again forever:
void loop()
{
static byte buttonState=LOW;
static byte releasState =LOW;
byte newButtonState=digitalRead(input_IO);
if (newButtonState != buttonState)
{
if (buttonState=HIGH)
{
releasState=!releasState;
}
buttonState=!buttonState;
}
digitalWrite(led,releasState);
delay(100); //as a quick debounce solution but a real debounce would be better
}
Wanneer knop 34 op "nul" staat dan kan ik (mits de delay(100) indachtig te zijn, gebruik maken van de schakeling.
Komt knop34 in de "een" stand, dan blijft mijn led knipperen aan een snelheid van delay(100)
Het is dus best een beetje willekeurig dat de uitgang werkt.
Je moet goed bijhouden wat er allemaal gebeurt.
Daarvoor heb je waarschijnlijk een paar extra variabelen nodig, zoals een die bijhoudt hoe het nu is, en een andere die bijhoud hoe het net was.
Het lijkt er sterk op dat je dat nu niet doet.
Daarom kan het slim zijn er een stuk papier bij te pakken en daarop aantekeningen te maken en een flow diagram te maken.
Dat maakt het veel gemakkelijker om je probleem op te lossen.
Maak ook nu een stukje code dat alleen dat doet wat je nu wil bereiken en laat alle andere zaken die je met je project wil doen nu even voor wat het is.
Dan kun je het later als het werkt zoals je wil weer samenvoegen met je project.
En gooi de delay functie overboord, zeker als je meer dingen wil doen.
Je kunt op een veel intelligenter wijze hetzelfde bereiken en daarmee voorkomen dat alles even stopt (want dat doet delay dus).
100 ms is een halve eeuwigheid.
Die veel intelligenter wijze heeft rikky je al laten zien en de "blink without delay" sketch laat je zien hoe dat werkt.
Als je een code gemaakt hebt die werkt maar niet helemaal, dan kun je die (middels de [ code ] tag, het # knopje in de editor hier) posten en kan er commentaar op gegeven worden.