|
|
- /*
- DigitalReadSerial
- Reads a digital input on pin 2, prints the result to the serial monitor
-
- This example code is in the public domain.
- */
-
-
- //NOTE: we are using 1.1V VRef, so keep ADC input low.
-
- //current
- int ADC_VAL0 = A1;
- //
- int ADC_VAL1 = A4;
-
-
-
- //smoothing
- const int numReadings = 100;
-
- int readings[numReadings]; // the readings from the analog input
- int readIndex = 0; // the index of the current reading
- int total = 0; // the running total
- int average = 0; // the average
-
- int readings2[numReadings]; // the readings from the analog input
- int readIndex2 = 0; // the index of the current reading
- double total2 = 0; // the running total
- int average2 = 0; // the average
-
- int start = 0;
- int ADCVAL0_State = 0;
- int ADCVAL1_State = 0;
- int writeresult = 0;
-
- // the setup routine runs once when you press reset:
- void setup() {
-
- for (int thisReading = 0; thisReading < numReadings; thisReading++) {
- readings[thisReading] = 0;
- readings2[thisReading] = 0;
- }
-
-
-
- // initialize serial communication at 9600 bits per second:
- Serial.begin(9600);
- // make the ADC_VAL0's pin an input:
- //pinMode(ADC_VAL0, INPUT);
-
- analogReference(INTERNAL);
- //to find where arduino does this, grep -r analogReference in Arduino install folder
- //cryptic shit though
- //so instead, just fprint the register before and after the change. much more intuitive.
-
- //do it manually...
-
-
-
- //this doesn't work
- //ADMUX = (0 << REFS1) | (0 << REFS0) ;
-
- //this doesn't work
- //ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX0);
-
- //this doesn't work
- //ADMUX = ADMUX | 0b11001110;
-
- //this doesn't work
- //ADMUX = (1 << REFS1) | (1 << REFS0) ;
-
- //this also doesn't work
- //ADMUX |= (1 << REFS0);
- //ADMUX |= (1 << REFS1);
-
- //search engines have been fucked over with endless forum debates, hopeless. a blog post guide would suffice.
-
- //even this doesn't work. why... it should work. must be wiring code breaking things. give up for now.
- //ADMUX = ADMUX | 0b11000000;
-
-
-
-
-
-
- }
-
- // the loop routine runs over and over again forever:
- void loop() {
-
- // subtract the last reading:
- total = total - readings[readIndex];
- total2 = total2 - readings2[readIndex];
- // read from the sensor:
- readings[readIndex] = analogRead(ADC_VAL0);
- readings2[readIndex] = analogRead(ADC_VAL1);
- // add the reading to the total:
- total = total + readings[readIndex];
- total2 = total2 + readings2[readIndex];
- // advance to the next position in the array:
- readIndex = readIndex + 1;
-
- // if we're at the end of the array...
- if (readIndex >= numReadings) {
- // ...wrap around to the beginning:
- readIndex = 0;
- start = 1;
- writeresult = 1;
- }
-
- // calculate the average:
- average = total / numReadings;
- average2 = total2 / numReadings;
-
- // send it to the computer as ASCII digits
- if(start){
- ADCVAL0_State = average;
- ADCVAL1_State = average2;
- }
-
-
- // read the input pin:
- //int ADCVAL0_State = analogRead(ADC_VAL0);
- if (writeresult){
- //int ADCVAL1_State = analogRead(ADC_VAL1);
-
- // print out the state of the button:
- Serial.print(" ADCVAL0 Current in mA, ");
- Serial.print(ADCVAL0_State);
- Serial.print(",");
- Serial.print(" ADCVAL1 Battery Voltage divby 10, ");
- Serial.println(ADCVAL1_State);
- delay(5000); // delay in between reads for stability
-
- writeresult = 0;
- }
-
- //Trying to debug why I cant change a bit in a register. fucking wiring. fuck search engines.
- //int dog = ADMUX;
- //Serial.println(ADMUX,BIN);
- }
-
-
-
|