From 6ac0c51e72f857963d2121c247458e9af95ce295 Mon Sep 17 00:00:00 2001 From: Toby Date: Sun, 30 Jun 2013 16:26:13 +0100 Subject: [PATCH] Added read ADC function --- arduino/arduino.py | 5 ++ prototype.pde | 122 +++++++++++++++++++++++++++++++++------------ 2 files changed, 94 insertions(+), 33 deletions(-) diff --git a/arduino/arduino.py b/arduino/arduino.py index 58f3890..51355e5 100644 --- a/arduino/arduino.py +++ b/arduino/arduino.py @@ -48,6 +48,11 @@ def analogRead(self, pin): self.__sendData(pin) return self.__getData() + def readADC(self,pin): + self.__sendData('5') + self.__sendData(pin) + return self.__getData() + def turnOff(self): for each_pin in self.__OUTPUT_PINS: self.setLow(each_pin) diff --git a/prototype.pde b/prototype.pde index 524d5ae..f9819e4 100644 --- a/prototype.pde +++ b/prototype.pde @@ -7,45 +7,101 @@ #define SERIAL_TIMEOUT 5 #endif +#define SELPIN 10 //Selection Pin +#define DATAOUT 11//MOSI +#define DATAIN 12//MISO +#define SPICLOCK 13//Clock +int readvalue; + void setup() { - Serial.begin(SERIAL_RATE); - Serial.setTimeout(SERIAL_TIMEOUT); + Serial.begin(SERIAL_RATE); + Serial.setTimeout(SERIAL_TIMEOUT); + + int cmd = readData(); + for (int i = 0; i < cmd; i++) { + pinMode(readData(), OUTPUT); + } + //set pin modes + pinMode(SELPIN, OUTPUT); + pinMode(DATAOUT, OUTPUT); + pinMode(DATAIN, INPUT); + pinMode(SPICLOCK, OUTPUT); + //disable device to start with + digitalWrite(SELPIN,HIGH); + digitalWrite(DATAOUT,LOW); + digitalWrite(SPICLOCK,LOW); - int cmd = readData(); - for (int i = 0; i < cmd; i++) { - pinMode(readData(), OUTPUT); - } + Serial.begin(9600); } void loop() { - switch (readData()) { - case 0 : - //set digital low - digitalWrite(readData(), LOW); break; - case 1 : - //set digital high - digitalWrite(readData(), HIGH); break; - case 2 : - //get digital value - Serial.println(digitalRead(readData())); break; - case 3 : - // set analog value - analogWrite(readData(), readData()); break; - case 4 : - //read analog value - Serial.println(analogRead(readData())); break; - case 99: - //just dummy to cancel the current read, needed to prevent lock - //when the PC side dropped the "w" that we sent - break; - } + switch (readData()) { + case 0 : + //set digital low + digitalWrite(readData(), LOW); break; + case 1 : + //set digital high + digitalWrite(readData(), HIGH); break; + case 2 : + //get digital value + Serial.println(digitalRead(readData())); break; + case 3 : + // set analog value + analogWrite(readData(), readData()); break; + case 4 : + //read analog value + Serial.println(analogRead(readData())); break; + case 5 : + //read MCP3208 value + Serial.println(readADC(readData())); break; + + + + case 99: + //just dummy to cancel the current read, needed to prevent lock + //when the PC side dropped the "w" that we sent + break; + } } char readData() { - Serial.println("w"); - while(1) { - if(Serial.available() > 0) { - return Serial.parseInt(); - } - } + Serial.println("w"); + while(1) { + if(Serial.available() > 0) { + return Serial.parseInt(); + } + } +} + +int readADC(int channel) { + int adcvalue = 0; + byte commandbits = B11000000; //command bits - start, mode, chn (3), dont care (3) + + //allow channel selection + commandbits|=((channel-1)<<3); + + digitalWrite(SELPIN,LOW); //Select adc + // setup bits to be written + for (int i=7; i>=3; i--){ + digitalWrite(DATAOUT,commandbits&1<=0; i--){ + adcvalue+=digitalRead(DATAIN)<