#include #include #include #include extern "C" { #include "user_interface.h" } void incoming (unsigned char * buf, short unsigned int type) { Serial.println(type); } uint8_t curchan[] = { 0 }; // we have sizeof curchan modules connected (at most four) bool ready[sizeof curchan] = { false }; IRAM_ATTR void rdy0 () { ready[0] = true; } ADS1115_WE adc[] = { ADS1115_WE(0x49) }; // VDD void (*rdyfuncs[])() = { rdy0 }; int rdypins[] = { D7 }; uint16_t adcval[sizeof curchan][4]; bool upload = false; void setup () { Wire.begin(); Wire.setClock(400000L); Serial.begin(MONITOR_SPEED); Serial.println("setupstart"); for (unsigned i = 0; i < sizeof curchan; i++) { Serial.println("nastavljam ADC " + String(i)); if (!adc[i].init()) Serial.println("ADS1115 " + String(i) + " not connected!"); pinMode(rdypins[i], INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(rdypins[i]), rdyfuncs[i], RISING); adc[i].setVoltageRange_mV(ADS1115_RANGE_4096); adc[i].setSingleChannel(curchan[i]); adc[i].setConvRate(ADS1115_32_SPS); adc[i].setMeasureMode(ADS1115_CONTINOUS); adc[i].setAlertPinMode(ADS1115_ASSERT_AFTER_1); adc[i].setAlertPinToConversionReady(); adc[i].skip_delays = true; } Serial.println("nastavljam wifi"); WiFi.setOutputPower(20.5); wifi_set_opmode(STATION_MODE); wifi_station_disconnect(); wifi_promiscuous_enable(1); wifi_set_promiscuous_rx_cb(incoming); wifi_set_channel(13); Serial.println("nastavil"); } uint8_t packet[] = { 0x08, 0x00, 0x00, 0x00, 'K', '@', '4', 'A', '.', 'S', 'I', ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void loop () { for (unsigned i = 0; i < sizeof curchan; i++) { if (!ready[i]) continue; uint16_t val = adc[i].getRawResult(); if (val != adcval[i][curchan[i]]) { adcval[i][curchan[i]] = val; packet[12+i*8+curchan[i]*2] = val >> 8; packet[12+i*8+curchan[i]*2+1] = val & 0xff; upload = true; } adc[i].setSingleChannel((curchan[i] = (curchan[i]+1) % 4)); // XXX kaj če dobim ready signal še preden naprava dejansko zamenja naslov? za vsak slučaj ready=false nastavim tukaj spodaj, ampak vseeno zna biti kaj težav, še posebej glede na to, da izvorna knjižnica za ads1115 za chansel da nekaj delaya ready[i] = false; } if (upload) { upload = false; wifi_send_pkt_freedom(packet, sizeof packet, 0); } }