Optocoupler for input

hi i am playing around with optocoupler to supply input signal to uno.
i am using the blink sketch to output and digiralRead on same board to detect input.
if i Serial.print after digitalRead the digitalRead does not work i.e. input is hi always.
if i put a Serial.print brfore digitalRead the input changes.
i have a copy of sketch and wiring, can someone advice me how to up load documents

yes that's needed (optocouplers require a current limiting resistor, do you have one?)

Read this: 'How to get the best out of this forum' - it's all in there...

Upload, by simply dragging the image file, into the reply window.
For uploading code see How to get the best out of this forum

yes i have a resistor. i also have a led connected to output of optocupler to show device is working. my problem is the sketch and the location of "Serial.println(" low ");"
if i put this line before "Serial.println(digitalRead(ledin));" the print is correct.
if i put "Serial.println(" low ");" after, the print is 1 always

post everything so we can have a look

unable to load attachment as i am classed as a new uder

ah keep posting a bit and you'll be granted the rights :slight_smile:

you should already be able to copy and paste the code here (make sure you use code tags and indent the code before posting here)

this is the code that i am using. take note where *************

int ledin = 2;
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(ledin, INPUT);
  Serial.begin(9600);
  Serial.print(" photo optic test ");
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  //Serial.println(" high ");
  Serial.println(digitalRead(ledin));
  Serial.println(" high ");
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  Serial.println(" low ");         // turn print on digitalRead work*************
  Serial.println(digitalRead(ledin));
  //Serial.println(" low ");
  delay(1000);                       // wait for a second
}

I edited your post and added the code tags and the indentation...

Please do yourself a favour and please read How to get the best out of this forum and post accordingly in the future.

--
can you describe with words what the circuit / power looks like?

output from uno pin 13 though 22o ohm to pin 1 optocoupler and pin 2 to earth.
5v to pin 5 optocoupler and pin 6 though 10k to earth. pin 6 optocoupler to uno pin 2.
also pin 6 optocoupler though 220 ohms and led to GND. led is on when pin 13 led is on, this tells me the optocoupler is working. sketch will work if i put a print in a spot and does not work if i remove the print

what's the reference of your optocoupler?

looks like this ?

4N38

that looks correct. 4N25 is number

Your code is missing

pinMode(13, OUTPUT);

in the setup function.

code is a modified version of blink code from example file.
pinMode(LED_BUILTIN, OUTPUT); i am on the understanding that this is pin 13 by default.
if the led and resistor is connected to pin 13, led will turn on and off at a control rate.
if i try to define this, code will error

That depends on the processor.

What Arduino are you using?

i am using UNO

Which UNO - the R4 is very different from R3 and earlier ...

isn't the typical wiring like this ?

1 Like

i am using arduino UNO R3.
if i wire to match your diagram, i get no input at all.
the way i had it i could get an input.
my question is why does the Serial.println(" low "); line effect the Serial.println(digitalRead(ledin)); line. if print is before read, code works and if print is after read, code does not work.