Sparky is pretty much functional, and needs making into something good. I’ve re-written the Arduino code with what I’ve learned so far in Learn C the Hard Way, and I’ll use the same board as the Arduino’s on to trigger electronically isolated LEDs, meaning I don’t have to have any outputs, so I can use all the pins for measuring.
The code is as generic as I can make it. Other than the LED pin, none of the pins come pre-named, so you can decide what to plug in where and how, and then output it, as long as you have this program and an Arduino programmer.
/* * * Version 6 of Oxygen is an almost complete re-write. * V6 mounts the LEDs on the in pins, allowing for easy reading, without needing output. Physical output can be provided by buffering LEDs to numbered pins. * V6 has a timing loop of one second, followed by a toggle of the LED on reserved Pin 13. * We do not use pins 0 & 1 (RX/TX). * We scan as many lines as we can find pins for, and store them in an array so we can do good things with them. * The output to Serial Monitor has two possible outputs of human-readable including pin names, or binary string. * * TO DO: binary output function for Serial Monitor * TO DO: use millisecond timing from boot-up rather than a set delay to make the timing loop 1 second * TO DO: Import oscillator code from V5, as separate function applicable to any pin * TO DO: Function to map analogue pins to arbitrary voltage levels (default 5v 2 decimal places). * * May^wDoes contain sarcasm. */ // unchanging constants and annoying variables // #include <stdarg.h> - use for more elegant printing later - Mat to show me how. #includes are not generally needed in Arduino - implicit functions are brought in automatically // Blink stuff int ledState = LOW; int ledPin = 13; // Pin Arrays that I will later resent treating this way // digital (measurement) pins int digitalPinNumbers[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // Leave out Pin13. const int digitalPinCount = sizeof(digitalPinNumbers)/sizeof(int); // const so we have a non-variable for indexing char *digitalPinNames[digitalPinCount] = {"Pin 2", "Pin 3", "Pin 4", "Pin 5", "Pin 6", "Pin 7", "Pin 8", "Pin 9", "Pin 10", "Pin 11", "Pin 12"}; // also leave out pin 13 int digitalPinStates[digitalPinCount] = {HIGH}; // Currently working with pull-up resistors. To be changed. // analogue (measurement) pins int analoguePinNumbers[] = {A0, A1, A2, A3, A4, A5}; // A4 & A5 are hard to get to thus likely to float const int analoguePinCount = sizeof(analoguePinNumbers)/sizeof(int); char *analoguePinNames[analoguePinCount] = {"Pin A0", "Pin A1", "Pin A2", "Pin A3", "Pin A4", "Pin A5"}; int analoguePinStates[analoguePinCount] = {}; // misplaced functions I will later regret // !!! TO DO - add binary output !!! void HumanPrint(){ Serial.println("Digital Pins"); for(int i = 0; i < digitalPinCount; i++){ digitalPinStates[i] = digitalRead(digitalPinNumbers[i]); Serial.print(digitalPinNames[i]); Serial.print(": "); Serial.println(digitalPinStates[i]); } Serial.println("Analogue Pins"); for(int i = 0; i < analoguePinCount; i++){ analoguePinStates[i] = analogRead(analoguePinNumbers[i]); Serial.print(analoguePinNames[i]); Serial.print(": "); Serial.println(analoguePinStates[i]); } } void setup(){ Serial.begin(9600); for(int i = 0; i < digitalPinCount; i++){ pinMode(digitalPinNumbers[i], INPUT_PULLUP); } for(int i = 0; i < analoguePinCount; i++){ pinMode(analoguePinNumbers[i], INPUT); } pinMode(ledPin, OUTPUT); Serial.println("Initialised."); } //Do this later - Mat to demo //void SerialPrint(char *v0, varargs ...) //{ //} void loop() { HumanPrint(); ledState = !ledState; digitalWrite(ledPin, ledState); delay(1000); }
Recent Comments