# OOPic

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/OOPic
> Markdown URL: https://mediated.wiki/source/OOPic.md
> Source: https://en.wikipedia.org/wiki/OOPic
> Source revision: 1335535819
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

The '''OOPic''' is an '''Object Oriented Programmable Integrated Circuit'''. Created by [Savage Innovations](/source/Savage_Innovations), this [PIC microcontroller](/source/PIC_microcontroller) comes with an IDE ([Integrated Development Environment](/source/Integrated_Development_Environment)) that supports programming in syntaxes based on the [BASIC](/source/BASIC_programming_language), [Java](/source/Java_(programming_language)) and [C](/source/C_(programming_language)) programming languages.

The last three versions released to market were the OOPic-R, the OOPic-S and the OOPic-C, which is a miniature version of the former. The oldest model is the OOPic I, which uses the A.2 version of the firmware.

==Architecture==

The OOPic firmware defines numerous built-in "objects," which can provide custom methods and properties. The objects may be wrappers for hardware, such as an external infrared sensor or a built-in LED, or logic helpers, such as dividers or logic gates.

The OOPic also makes use of "virtual circuits," where the programmer can create links between object properties.

==Example program==
The following is an example piece of code written in the BASIC syntax, which links a built-in clock that cycles every 1&nbsp;Hz to an LED.

<syntaxhighlight lang="vbscript">
' The LED is defined as a single I/O line
Dim Red As New oDio1

' Here we create a virtual wire. Wires are
' used to link output or flag values to
' input values.
Dim W As New oWire

' All OOPic programs need to define a "main" sub-routine.
' This is what will be run when the OOPic is turned on.
Sub Main()
  ' Here we specify the pin number for the I/O line.
  ' The onboard red LED is on pin 7.
  Red.IOLine = 7

  ' The LED can also be used for a button, so we need
  ' to specify whether we wish to read from or write to
  ' the pin.
  ' (cvOutput is a constant value)
  Red.Direction = cvOutput

  ' Now we can set up the wire link!
  ' For the wire's input, we wish to use the built-in
  ' 1Hz timer.
  W.Input.Link(OOPic.Hz1)

  ' Now we send the output of the wire to the LED.
  ' Note that we actually send it to the "Value"
  ' property of the LED, as this is what determines
  ' whether the LED is lit.
  W.Output.Link(Red.Value)

  ' All that's left to do is to tell the wire to
  ' operate, and the OOPic will do the rest!
  ' (cvTrue is a constant value)
  W.Operate = cvTrue

End Sub
</syntaxhighlight>

This virtual circuit behaviour gives the programmer considerable control and flexibility, and allows for better reaction to real-time behaviours thanks to "Events". The OOPic actually spends the majority of its time updating the virtual circuits, compared to looping through a user's code, so it's in the programmers best interest to use virtual circuits over traditional programming techniques as often as possible.

==Other meanings==
<!-- There should be a disambiguation page for this! -->
'''OOPIC''' also refers to '''Object Oriented Particle In Cell''' which is an object-oriented implementation, written at Berkeley, of a specific method of plasma physics simulation known as [particle in cell](/source/Particle-in-cell).

== See also ==
* [Arduino](/source/Arduino)
* [BASIC Stamp](/source/BASIC_Stamp)
* [PICAXE](/source/PICAXE)

== External links ==
*{{cite web|url=http://www.oopic.com/ |title=OOPic: The "Hardware Object" |accessdate=August 2, 2004 |url-status=dead |archiveurl=https://web.archive.org/web/19991012123909/http://oopic.com/ |archivedate=October 12, 1999}}—The site made by the company that sells the OOPic. 
*[https://archive.today/20130209200423/http://groups.yahoo.com/group/oopic The OOPic Yahoo group]—This is where most discussion takes place about the OOPic. - Obsolete
*[http://groups.google.com/group/oopic_micro The OOPic Google group]—This is the new discussion / user support group for the ooPic. As of September 2008
*[https://web.archive.org/web/20060803052155/http://ptsg.eecs.berkeley.edu/ The PTSG group]—This is the website of Berkeley's Plasma Theory and Simulation Group, the authors of the OOPIC plasma simulation code.

{{Microchip Technology}}

Category:Microcontrollers
Category:Microchip Technology hardware

---
Adapted from the Wikipedia article [OOPic](https://en.wikipedia.org/wiki/OOPic) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/OOPic?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
