#define SELPIN 10 //Selection Pin #define DATAOUT 11//MOSI #define DATAIN 12//MISO #define SPICLOCK 13//Clock //int readvalue; void setup(){ //set pin modes pinMode(SELPIN, OUTPUT); pinMode(DATAOUT, OUTPUT); pinMode(DATAIN, INPUT); pinMode(SPICLOCK, OUTPUT); digitalWrite(SELPIN,HIGH); digitalWrite(DATAOUT,LOW); digitalWrite(SPICLOCK,HIGH); Serial.begin(9600); } int read_adc(int channel){ unsigned int zeroBytes = 0; unsigned int adcvalue = 0; byte commandbits = B10100001; //see AD7887 datasheet digitalWrite(SELPIN,LOW); //Select adc digitalWrite(SPICLOCK,HIGH); // extra delay and init PIN digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,LOW); //cycle clock 1 at rising edge, the rest at falling adge digitalWrite(SPICLOCK,LOW); digitalWrite(DATAOUT,1); digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); if (digitalRead(DATAIN)) zeroBytes++; //chech if DATAIN==1 then zerobytes=zerobytes+1 //Serial.print(digitalRead(DATAIN),DEC); digitalWrite(DATAOUT,0); digitalWrite(SPICLOCK,LOW); //cycle clock 1-4 digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); if (digitalRead(DATAIN)) zeroBytes++; //Serial.print(digitalRead(DATAIN),DEC); digitalWrite(DATAOUT,1); digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); if (digitalRead(DATAIN)) zeroBytes++; //Serial.print(digitalRead(DATAIN),DEC); digitalWrite(DATAOUT,0); digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); if (digitalRead(DATAIN)) zeroBytes++; //Serial.print(digitalRead(DATAIN),DEC); for (int i=3; i>0; i--){ // setup bits to be written digitalWrite(DATAOUT,0);//commandbits&1<=0; i--){ digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,LOW);//test digitalWrite(SPICLOCK,LOW);//test digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,HIGH); adcvalue += digitalRead(DATAIN); // last 8 bits (MSB first) if (i) adcvalue <<= 1; // dont shift the 8th bit , when i == 0 //Serial.print(digitalRead(DATAIN),DEC); digitalWrite(SPICLOCK,LOW); } digitalWrite(SELPIN, HIGH); if (zeroBytes) adcvalue = -1; // set a non valid value so to check later return adcvalue; } void loop() { long readvalue = 0; int k = 0; int Fores_Koula = 100; while(k < Fores_Koula) { long Temp = read_adc(1); if(Temp != -1) { readvalue += Temp; k++; } delay(10); } readvalue /= Fores_Koula; if (readvalue != -1) //if the value is valid { Serial.println(readvalue,DEC); float vread = readvalue * (2.5 / 4095.0); Serial.print(vread,4); Serial.println(" Volts"); float dBm = (1000*vread-2100)/(-25.0)-65.0; Serial.print(dBm,4); Serial.println(" dBm"); } delay(1000); //Read Analogue Temperature sensor from AD8318, connect to A0 // pinMode(A0, INPUT); int sensorPin = A0; int vtemp = 0; vtemp = analogRead(sensorPin); float volt = vtemp * (5000.0 / 1023.0); Serial.print(volt,1); Serial.println(" TempmilliVolts"); float a = 1.0; float TempC = 1.0; //this has a 2mV per degree C slope and 600mV means 27C if(volt >= 600.0) { a = (volt - 600.0) / 2.0; TempC = 27.0 + a; } else { a = (600.0 - volt) / 2.0; TempC = 27.0 - a; } Serial.print(TempC,2); Serial.println(" degrees C"); float tempF = (TempC * 9.0 / 5.0) + 32.0; Serial.print(tempF,2); Serial.println(" degrees F"); Serial.println("\t"); delay (1000); // add display driver //add calibrate routine }