<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.opensourceecology.org/index.php?action=history&amp;feed=atom&amp;title=CEB_Press%2FManufacturing_Instructions%2FController_Box%2FSource_Code%2Fv5.15.10</id>
	<title>CEB Press/Manufacturing Instructions/Controller Box/Source Code/v5.15.10 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.opensourceecology.org/index.php?action=history&amp;feed=atom&amp;title=CEB_Press%2FManufacturing_Instructions%2FController_Box%2FSource_Code%2Fv5.15.10"/>
	<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=CEB_Press/Manufacturing_Instructions/Controller_Box/Source_Code/v5.15.10&amp;action=history"/>
	<updated>2026-05-16T12:34:34Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=CEB_Press/Manufacturing_Instructions/Controller_Box/Source_Code/v5.15.10&amp;diff=157923&amp;oldid=prev</id>
		<title>Dorkmo: Created page with &quot;*Code from 2010   &lt;nowiki&gt;//Notes: Orientation is defined by machine user //facing the control panel. 3 magnets (sensor actuators) are used  //for main cylinder, 3 magnets for...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=CEB_Press/Manufacturing_Instructions/Controller_Box/Source_Code/v5.15.10&amp;diff=157923&amp;oldid=prev"/>
		<updated>2017-08-19T23:23:02Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;*Code from 2010   &amp;lt;nowiki&amp;gt;//Notes: Orientation is defined by machine user //facing the control panel. 3 magnets (sensor actuators) are used  //for main cylinder, 3 magnets for...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*Code from 2010&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;//Notes: Orientation is defined by machine user&lt;br /&gt;
//facing the control panel. 3 magnets (sensor actuators) are used &lt;br /&gt;
//for main cylinder, 3 magnets for soil drawer, and 2 magnets are&lt;br /&gt;
//are used for soil grate shaker. Copyright April 2010, Creative &lt;br /&gt;
//Commons CC-BY-SA-compatible Open Source Ecology (OSE) License,&lt;br /&gt;
//by Marcin Jakubowski, Ph.D., for OSE. This code and other &lt;br /&gt;
//documentation is available at the Open+Pario project management &lt;br /&gt;
//site under the CEB Project, under Documents - Liberator Beta 2.0 &lt;br /&gt;
//Control Code, http://openpario.net/projects/OSE&lt;br /&gt;
&lt;br /&gt;
//Complete code including simultaneous motion of 2 cylinders:&lt;br /&gt;
&lt;br /&gt;
int val; //main cylinder&lt;br /&gt;
int val2; //secondary cylinder&lt;br /&gt;
int val3; //shaker&lt;br /&gt;
int toggle1;//main cylinder toggle&lt;br /&gt;
int toggle2;//secondary cylinder toggle&lt;br /&gt;
unsigned long startcounter1;&lt;br /&gt;
unsigned long counter1;&lt;br /&gt;
unsigned long startcounter2;&lt;br /&gt;
unsigned long counter2;&lt;br /&gt;
unsigned long counter;&lt;br /&gt;
&lt;br /&gt;
//0. Initialization.&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  pinMode(19,INPUT);//Digital 19 is Analog 5.&lt;br /&gt;
  pinMode(18,INPUT);//Digital 18 is Analog 4.&lt;br /&gt;
  pinMode(17,INPUT);//Digital 17 is Analog 3.&lt;br /&gt;
  pinMode(3,OUTPUT);//Pins 3 and 6 are up and down motion,&lt;br /&gt;
  pinMode(6,OUTPUT);//respectively.&lt;br /&gt;
  pinMode(9,OUTPUT);//Pins 9 and 10 are right and left,&lt;br /&gt;
  pinMode(10,OUTPUT);//respectively.&lt;br /&gt;
  pinMode(11,OUTPUT);//Hopper shaker motor.&lt;br /&gt;
  counter1=0;&lt;br /&gt;
  counter2=0;&lt;br /&gt;
  counter=0;&lt;br /&gt;
  val=analogRead(5);//Read the sensor.\&lt;br /&gt;
  val2=analogRead(4);&lt;br /&gt;
  Serial.println(&amp;quot;Main cylinder state:&amp;quot;);&lt;br /&gt;
  Serial.println(val);&lt;br /&gt;
  Serial.println(&amp;quot;Drawer cylinder state:&amp;quot;);&lt;br /&gt;
  Serial.println(val2);&lt;br /&gt;
&lt;br /&gt;
//3=up&lt;br /&gt;
//6=down&lt;br /&gt;
//9=right&lt;br /&gt;
//10=left&lt;br /&gt;
//analog5=main cylinder&lt;br /&gt;
//analog4=secondary cylinder&lt;br /&gt;
&lt;br /&gt;
//1. Move main cylinder down 1/2 sec.&lt;br /&gt;
digitalWrite(6,HIGH);&lt;br /&gt;
delay(500);&lt;br /&gt;
digitalWrite(6,LOW);&lt;br /&gt;
//2. Move secondary cylinder left 1/2 sec.&lt;br /&gt;
digitalWrite(10,HIGH);&lt;br /&gt;
delay(500);&lt;br /&gt;
digitalWrite(10,LOW);&lt;br /&gt;
//3. Zero main cylinder.&lt;br /&gt;
while (analogRead(5) &amp;lt; 500){&lt;br /&gt;
  digitalWrite(6, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(6, LOW);&lt;br /&gt;
//4. Zero secondary cylinder.&lt;br /&gt;
while(analogRead(4) &amp;lt; 500){&lt;br /&gt;
  digitalWrite(10, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(10, LOW);&lt;br /&gt;
//5. Eject soil from chamber with main cylinder. (Go up to mid, &lt;br /&gt;
//then go up to top.)&lt;br /&gt;
while (analogRead(5) &amp;gt; 500){&lt;br /&gt;
  digitalWrite(3, HIGH);&lt;br /&gt;
}&lt;br /&gt;
while (analogRead(5) &amp;lt; 500){&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(3, LOW);&lt;br /&gt;
//6. Push soil out of way with secondary cylinder by moving right&lt;br /&gt;
//and stop in closed compression chamber position.&lt;br /&gt;
while(analogRead(4)&amp;gt;500){&lt;br /&gt;
  digitalWrite(9, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(9, LOW);&lt;br /&gt;
//7. Initialize secondary cylinder.&lt;br /&gt;
while(analogRead(4)&amp;lt;500){&lt;br /&gt;
  digitalWrite(10, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(10, LOW);&lt;br /&gt;
//8. Calibrate main cylinder (move from top to bottom and measure t)&lt;br /&gt;
//Move down to -, measuring down motion time T1&lt;br /&gt;
startcounter1=millis();&lt;br /&gt;
digitalWrite(6, HIGH);&lt;br /&gt;
while (analogRead(5)&amp;gt;500){}&lt;br /&gt;
counter1=millis()-startcounter1;&lt;br /&gt;
//7. Move down to +, measuring T2&lt;br /&gt;
startcounter2=millis();&lt;br /&gt;
while (analogRead(5)&amp;lt;500){}&lt;br /&gt;
counter2=millis()-startcounter2;&lt;br /&gt;
digitalWrite(6, LOW);&lt;br /&gt;
//8. Add T1 and T2 to get total time of down travel.&lt;br /&gt;
counter=counter1+counter2;&lt;br /&gt;
//9. Move main cylinder to terminal position.&lt;br /&gt;
while (analogRead(5)&amp;gt;500){&lt;br /&gt;
  digitalWrite(3, HIGH);&lt;br /&gt;
}&lt;br /&gt;
while (analogRead(5)&amp;lt;500){}&lt;br /&gt;
digitalWrite(3, LOW);&lt;br /&gt;
&lt;br /&gt;
//3. Wait 5 seconds. If stopped and not zeroed, cycle controller.&lt;br /&gt;
delay(5000);&lt;br /&gt;
&lt;br /&gt;
//At this point, secondary cylinder is in initial position and main &lt;br /&gt;
//cylinder is in terminal position.&lt;br /&gt;
&lt;br /&gt;
}//**************************** END OF INITIALIZATION&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  &lt;br /&gt;
digitalWrite(9, HIGH);&lt;br /&gt;
delay(200);&lt;br /&gt;
digitalWrite(6, HIGH);&lt;br /&gt;
toggle1=0;&lt;br /&gt;
toggle2=0;&lt;br /&gt;
//C2 motion from left to middle.&lt;br /&gt;
while(analogRead(4)&amp;gt;500){&lt;br /&gt;
  if (analogRead(5)&amp;lt;500){&lt;br /&gt;
    toggle1=1;&lt;br /&gt;
  }&lt;br /&gt;
  if (toggle1=1 &amp;amp;&amp;amp; analogRead(5)&amp;gt;500){&lt;br /&gt;
    digitalWrite(6, LOW);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//C2 motion from middle to right.&lt;br /&gt;
while(analogRead(4)&amp;lt;500){&lt;br /&gt;
  if (analogRead(5)&amp;lt;500){&lt;br /&gt;
    toggle1=1;&lt;br /&gt;
  }&lt;br /&gt;
  if (toggle1=1 &amp;amp;&amp;amp; analogRead(5)&amp;gt;500){&lt;br /&gt;
    digitalWrite(6, LOW);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//Stop C2.&lt;br /&gt;
digitalWrite(9, LOW);&lt;br /&gt;
//Complete down motion of C1. This allows for continuation of &lt;br /&gt;
//motion. This works if motion is completed already.&lt;br /&gt;
&lt;br /&gt;
for (int x=0; x&amp;lt;1 ; x=x+0){&lt;br /&gt;
  if (analogRead(5)&amp;lt;500){&lt;br /&gt;
    toggle1=1;&lt;br /&gt;
  }&lt;br /&gt;
  if (analogRead(5)&amp;gt;500 &amp;amp;&amp;amp; toggle1==1){&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
digitalWrite(6, LOW);//Stops C1.&lt;br /&gt;
delay(200);//Last nuggets drop. Soil loading cycle complete.&lt;br /&gt;
&lt;br /&gt;
//Close drawer by moving C2 left.&lt;br /&gt;
while(analogRead(4)&amp;gt;500){&lt;br /&gt;
  digitalWrite(10, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(10, LOW);&lt;br /&gt;
&lt;br /&gt;
//Press.&lt;br /&gt;
while (analogRead(5)&amp;gt;500){&lt;br /&gt;
  digitalWrite(3, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(3, LOW);&lt;br /&gt;
&lt;br /&gt;
//Release.&lt;br /&gt;
digitalWrite(6, HIGH);&lt;br /&gt;
delay(counter/32);&lt;br /&gt;
digitalWrite(6, LOW);&lt;br /&gt;
&lt;br /&gt;
//Open drawer by moving C2 left.&lt;br /&gt;
while(analogRead(4)&amp;lt;500){&lt;br /&gt;
  digitalWrite(10, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(10, LOW);&lt;br /&gt;
&lt;br /&gt;
//Eject.&lt;br /&gt;
while (analogRead(5)&amp;lt;500){&lt;br /&gt;
  digitalWrite(3, HIGH);&lt;br /&gt;
}&lt;br /&gt;
digitalWrite(3, LOW);&lt;br /&gt;
&lt;br /&gt;
}//final loop closure.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: CEB Press]]&lt;/div&gt;</summary>
		<author><name>Dorkmo</name></author>
	</entry>
</feed>