#include "Arduino.h"
constexpr int eocPin = 3; // pin from ADC EOC to UNO//output for ADC0808, but input from Arduino
constexpr int startPin = 2; // pin from UNO to ADC START//input for ADC0808, but output from Arduino
void setup() {
Serial.begin(9600);
// Changed from INPUT to INPUT_PULLUP for Wokwi
// The slide switches have been "modified" in diagram.json not to bounce!
pinMode(13, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(startPin, OUTPUT);
pinMode(eocPin, INPUT);
// Interrupt routine that just reports that data are available
attachInterrupt(digitalPinToInterrupt(eocPin), setDataAvailable, RISING);
}
boolean dataAvailable = false;
void loop() {
startADCCycle();
handleData();
}
void startADCCycle() {
digitalWrite(startPin, HIGH); // set START Pin to High
delayMicroseconds(100);
digitalWrite(startPin, LOW); // set START Pin to LOW again
delayMicroseconds(100);
digitalWrite(startPin, HIGH); // set START Pin to High
}
void handleData() {
if (dataAvailable) {
dataAvailable = false;
printData();
}
}
void setDataAvailable() {
dataAvailable = true;
}
void printData() {
int pin13State = 0;
int pin12State = 0;
int pin11State = 0;
int pin10State = 0;
static int lastpin13State = 1;
static int lastpin12State = 1;
static int lastpin11State = 1;
static int lastpin10State = 1;
pin13State = digitalRead(13);
pin12State = digitalRead(12);
pin11State = digitalRead(11);
pin10State = digitalRead(10);
if (pin13State != lastpin13State || pin12State != lastpin12State || pin11State != lastpin11State || pin10State != lastpin10State)
{
String out = "";
out = (pin13State == HIGH) ? "1" : "0";
out += (pin12State == HIGH) ? "1" : "0";
out += (pin11State == HIGH) ? "1" : "0";
out += (pin10State == HIGH) ? "1" : "0";
Serial.println(out);
lastpin13State = pin13State;
lastpin12State = pin12State;
lastpin11State = pin11State;
lastpin10State = pin10State;
}
}