Snippets

Peter Scargill Nano peripheral

Created by Peter Scargill last modified
// This update May 2018 Peter Scargill
//
// So this is a relatively simple,cheap peripheral using a £1.50 NANO board from China.
// It is supported by my ESP8266 software but as it is an I2c slave you could run it
// from anything able to handle I2c. For example I have found that some of the NanoPi SBCs
// are not too keen on even a bright LED on their IO pins and from an operating
// system like Linux, getting PWM on several pins is just not on... so - plug in this device
// (default ID 9) with pullups (always needed for I2c) and you can gain PWM, ADC
// and general IO for very little money or better, use with ESP-GO to add veryu inexpensive funtionality to the ESP8266.
//
//
// As a guide you could use 3,5,6 and 9, 10 and 11 for PWM (unless you use these pins for general IO)
// you can use 2, 4, 7, 8, 12 and 13 as input/output (I tried using 0 and 1 for GPIO - no go - 0 flashes
// on power up - 1 has pullup - best just avoid using these two for general IO - use for serial IO).
// remember 13 probably has a LED attached on the board so best used for output.
//
// You could use A0 (14), A1 (15), A2 (16) and A3 (17) as analog or digital inputs - possibly
// A6 (20) and A7 (21) if available on your board. Set to 1.1v full scale.
// A4 and A5 are used for the I2c where A4 is SDA and A5 is SCL.
//
// On the blog at https://tech.scargill.net you'll see several examples of using I2c.
//
// Late addition - servos - any of the pins 2-13 can be a servo. command is 11 - so device, command, pin, value
// Send value 255 to disconnect a servo and note if ANY pin is set up as a servo you lose PWM options on pins 9 and 10.
// Just disconnect all individually to get the PWM back (normally all disconnected at power up).
// Values 0-180 but this varies with different servos. Mine buzzed at 0 !! See Arduino Servo library
//
// The board becomes a simple i2c SLAVE - default (programmable) device number 9 - reads instructions from
// master and either sets outputs or returns inputs accordingly.
//
// There is also now a soft fade option for PWM, a tone generator and Dallas temperature chip support for up to 2 chips.
// Here I use a simplified version of my DS18B20 code from years back. This starts the conversion at the END
// of the code - so the first value is rubbish - read the blog as this is hidden - and there are no delays. On the assumption of one chip
// per pin, no need for search either!

// This version returns 6 bytes - the LAST one is a status byte - 1 if busy. I'm using serial for debug right now - so can't use 
// serial command - simply scrap that if you want to use serial out.

//
#include <EEPROM.h>
#include <Wire.h>
#include <Servo.h> /// note that if you use ANY servo, you lose PWM on pins 9 and 10.
#include <avr/pgmspace.h>
#include <OneWire.h>
#define MAXPORTS 21

#define SET_OUTPUT  1
#define READ_INPUT  2
#define READ_INPUT_PULLUP 3
#define SET_PWM     4
#define READ_ANALOG 5
#define SET_ADDRESS 6
#define PORTSET 7
#define PORTOUT 8
#define PORTIN 9
#define SEROUT 10
#define SERVO 11   /// value 255 disconnects.... - normally use 0-180
#define FADE 12
#define TONE 13
#define NOTONE 14
#define DALLAS1 15
#define DALLAS2 16
#define SETSERIAL 20 // 0 means turn serial off, by default on. Other values- 1=300, 2=1200, 3=2400, 4=9600, 5=28800, 6=57600, 7=115200 baud

#define STRUCTBASE 0

byte busy=0;
struct STORAGE{
byte chsm;
byte device;
byte t1;
byte t2;
};

int tr1=255;
int tr2=255;

STORAGE stored;

byte ports[MAXPORTS];
byte params[128];
byte retparams[3];
byte paramp;

long mymillis;


const PROGMEM  uint8_t ledTable[256] = // Nano is so pathetically short of RAM I have to do this!
{
  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4,
  4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, 18,
  18, 19, 19, 20, 20, 21, 22, 22, 23, 23, 24, 25, 25, 26, 26, 27, 28, 28, 29, 30, 30, 31, 32, 33, 33, 34, 35, 36, 36, 37, 38, 39, 40, 40, 41,
  42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77,
  78, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 93, 94, 95, 97, 98, 99, 101, 102, 104, 105, 107, 108, 110, 111, 113, 114, 116, 117, 119, 121,
  122, 124, 125, 127, 129, 130, 132, 134, 135, 137, 139, 141, 142, 144, 146, 148, 150, 151, 153, 155, 157, 159, 161, 163, 165, 166, 168, 170,
  172, 174, 176, 178, 180, 182, 184, 186, 189, 191, 193, 195, 197, 199, 201, 204, 206, 208, 210, 212, 215, 217, 219, 221, 224, 226, 228, 231,
  233, 235, 238, 240, 243, 245, 248, 250, 253, 255
};

byte fade[12][3];
Servo myservos[14]; // just for ease - so use any pin from 3 to 13... bit of waste but so what.

// Here's the Dallas code - end user need to spot negative values...see https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
int16_t dallas (int x)
{
  OneWire ds(x);
  byte i;
  byte data[2];
  int16_t result;
      ds.reset();
      ds.write(0xCC);
      ds.write(0xBE);
      for (i=0;i<2; i++) data[i]=ds.read();
      result=(data[1]<<8)|data[0];
 
      ds.reset();
      ds.write(0xCC);
      ds.write(0x44,1);
      return result;
}


void setup(void) {
  // NO serial if using using 0-7 as port expansion (I'm not)
  // If you want serial - set the speed in the setup routine, if not, comment out
  int a;
  uint16_t time = millis();
  byte eeprom1,eeprom2;
  analogReference(INTERNAL);  // 1.1v
  Serial.begin(115200);
 // get info out of EEPROM
 EEPROM.get(STRUCTBASE,stored);
 
 // first check if EEPROM info is valid?
 if (stored.chsm!=0x3d)
   {
    stored.chsm=0x3d;
    stored.device=9;
    stored.t1=255;
    stored.t2=155;
    EEPROM.put(STRUCTBASE,stored);
   }

  for (a=0;a<MAXPORTS;a++) ports[a]=0; // all inputs
  Wire.begin(stored.device);           // join i2c bus with address #9 by default
  Wire.onReceive(receiveEvent);
  Wire.onRequest(requestEvent); 
  
  paramp=0;
  Serial.begin(115200);
  mymillis=0;
  for (a=0;a<12;a++){ fade[a][0]=0; fade[a][2]=0; }
  for (a=0;a<128;a++) params[a]=0;

  delay(100);
  
  if (stored.t1!=255) tr1=dallas(stored.t1);
  if (stored.t2!=255) tr2=dallas(stored.t2);  

  tr1=85*16;
  tr2=85*16;

}

void loop() {

if (mymillis<millis())
    {
      mymillis=millis()+10;
      for (int a=0; a<12; a++)
        {
          if (fade[a][0])
            {
              if (fade[a][1]<fade[a][2]) { if (++fade[a][1]==fade[a][2]) fade[a][0]=0; analogWrite(a,pgm_read_word_near(ledTable+fade[a][1])); }
              if (fade[a][1]>fade[a][2]) { if (--fade[a][1]==fade[a][2]) fade[a][0]=0; analogWrite(a,pgm_read_word_near(ledTable+fade[a][1])); }
            }
        }
    }  

}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
      retparams[2]=busy;
      Wire.write(retparams,3); 
}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void receiveEvent(int count) {
busy=1;
int a;
int tcount;
tcount=count;
paramp=0;
for (a=0;a<6;a++) params[a]=0; 
  // Nothing time consuming or visual debugging in here if a RETURN VALUE is expected or the routine to send a byte back could be missed.
  while ((tcount--)&&(paramp<128))
   {
    params[paramp++]=Wire.read(); 
   }
  switch (params[0])
    {
    case SET_OUTPUT:
          if (ports[params[1]]!=1) { ports[params[1]]=1; pinMode(params[1],OUTPUT); } 
          digitalWrite(params[1],params[2]? HIGH : LOW); 
          break;
    case READ_INPUT:
          if (ports[params[1]]!=2) { ports[params[1]]=2; pinMode(params[1],INPUT); } 
          retparams[0]=0; retparams[1]=digitalRead(params[1]); 
          break;
    case READ_INPUT_PULLUP:
          if (ports[params[1]]!=3) { ports[params[1]]=3; pinMode(params[1],INPUT_PULLUP); } 
          retparams[0]=0; retparams[1]=digitalRead(params[1]); 
          break;          
    case SET_PWM:
          if (ports[params[1]]!=4) { ports[params[1]]=4; pinMode(params[1],OUTPUT); } 
          analogWrite(params[1],params[2]); 
          break;
    case READ_ANALOG:
          if (ports[params[1]]!=2) { ports[params[1]]=2; pinMode(params[1],INPUT); } 
          uint16_t anback; anback=analogRead(params[1]); retparams[0]=anback>>8; retparams[1]=anback&255;
          break;    
    case SET_ADDRESS:
          stored.device=params[1]; EEPROM.put(STRUCTBASE,stored);
          // update address - will take effect on next powerup of the device as you 
          // can only call "begin" once
          break;
    case SEROUT: char *m;
                 m=(char *)&params[1];
                 Serial.print(m);
                 break;
    case SERVO : if (ports[params[1]]!=5) { ports[params[1]]=5; myservos[params[1]].attach(params[1]); }  
                 if (params[2]==255) { myservos[params[1]].detach(); ports[params[1]]=0; break; }
                 myservos[params[1]].write(params[2]);
                 break; 
    case FADE:
          if (ports[params[1]]!=4) { ports[params[1]]=4; pinMode(params[1],OUTPUT);  } 
          fade[params[1]][0]=1; fade[params[1]][2]=params[2];
          break;  

    case TONE:  // can't do PWM on pins 2 and 11 while doing this... only one pin at a time...use NOTONE when finished
          if ((params[4]|params[5])==0) tone(params[1],(params[2]<<8)+params[3]); else tone(params[1],(params[2]<<8)+params[3],(params[4]<<8)+params[5]); 
          ports[params[1]]=0;
          break;
             
    case NOTONE:  // can't do PWM on pins 3 and 11 while doing TONE...
          noTone(params[1]); ports[params[1]]=0; 
          break;

    case DALLAS1:
          tr1=dallas(params[1]); 
          if (params[1]!=stored.t1) { stored.t1=params[1];  EEPROM.put(STRUCTBASE,stored); } // no delay hence first value crap
          retparams[1]=tr1&255; retparams[0]=tr1>>8; 
          break;

    case DALLAS2:
          tr2=dallas(params[1]); 
          if (params[1]!=stored.t2) { stored.t2=params[1]; EEPROM.put(STRUCTBASE,stored); }   // no delay hence first value crap
          retparams[1]=tr2&255; retparams[0]=tr2>>8;
          break;  

    case SETSERIAL:
          switch (params[1]) {
            case 0 : Serial.end(); break;
            case 1 : Serial.begin(300); break;
            case 2 : Serial.begin(1200); break;
            case 3 : Serial.begin(2400); break;
            case 4 : Serial.begin(9600); break;
            case 5 : Serial.begin(28800); break;
            case 6 : Serial.begin(57600); break;
            case 7 : Serial.begin(115200); break;
            default: break;            
          }
          break;
                                 
   default: break;  
    }
    busy=0;
}

Comments (1)

  1. uzanti hesap

    rssfeeds.usatoday.com/~/t/0/0/mmajunkie/~https:/agariounblocked.org/www.researchgate.net/deref/http://agariounblocked.orghobby.idnes.cz/peruanske-palive-papricky-rocoto-dlz-/redir.aspx?url=http%3A%2F%2Fagariounblocked.orgoptimize.viglink.com/page/pmv?url=https://agariounblocked.orgtrello.com/add-card?source=mode=popup&name=click%2Bhere&desc=http%3A%2F%2Fagariounblocked.orgsound2sense.archiveweb.mus.cam.ac.uk/?URL=agariounblocked.orgfeeds.businessinsider.com.au/~/t/0/0/businessinsideraustralia/~https:/agariounblocked.org/www.astro.wisc.edu/?URL=https%3A%2F%2Fagariounblocked.orgimages.google.com/url?sa=t&url=https%3A%2F%2Fagariounblocked.orgm.odnoklassniki.ru/dk?st.cmd=outLinkWarning&st.rfn=https%3A%2F%2Fagariounblocked.org%2Fwww.jobzone.ny.gov/views/jobzone/leaving_site.jsf?id=304&url=https%3A%2F%2Fagariounblocked.orgtvtropes.org/pmwiki/no_outbounds.php?o=https%3A%2F%2Fagariounblocked.org%2Frssfeeds.freep.com/~/t/0/_/freep/home/~/https:/agariounblocked.org/community.acer.com/en/home/leaving/agariounblocked.orgredirects.tradedoubler.com/utm/td_redirect.php?td_keep_old_utm_value=1&tduid=991a03343b6089cca9cbe799f011b89c&url=https%3A%2F%2Fagariounblocked.orgfcaw.library.umass.edu/goto/https:/agariounblocked.org/guru.sanook.com/?URL=https%3A%2F%2Fagariounblocked.org%2Fblog.ss-blog.jp/_pages/mobile/step/index?u=https://agariounblocked.orgold.post-gazette.com/pets/redir.asp?url=https%3A%2F%2Fagariounblocked.org%2Faccounts.cancer.org/login?redirectURL=https://agariounblocked.orgwww.fhwa.dot.gov/reauthorization/reauexit.cfm?link=https%3A%2F%2Fagariounblocked.orgsitereport.netcraft.com/?URL=https%3A%2F%2Fagariounblocked.org%2Fgo.onelink.me/v1xd?pid=Patch&c=Mobile%20Footer&af_web_dp=https%3A%2F%2Fagariounblocked.org%2Fprofiles.newsmax.com/sso/signup.aspx?ReturnURL=https%3A%2F%2Fagariounblocked.org%2Fdomain.opendns.com/agariounblocked.orgapp.feedblitz.com/f/f.fbz?track=https%3A%2F%2Fagariounblocked.orgjump.5ch.net/?agariounblocked.orgdol.deliver.ifeng.com/c?z=ifeng&la=0&si=2&cg=1&c=1&ci=2&or=7549&l=28704&bg=28703&b=37275&u=https%3A%2F%2Fagariounblocked.orgfeeds.gizmodo.com.au/~/t/0/0/gizmodoaustralia/~/https:/agariounblocked.org/www.etis.ford.com/externalURL.do?url=https%3A%2F%2Fagariounblocked.org%2Fid.telstra.com.au/register/crowdsupport?gotoURL=https%3A%2F%2Fagariounblocked.org%2Ffeeds.hanselman.com/~/t/0/0/scotthanselman/~https:/agariounblocked.org/bbs.pku.edu.cn/v2/jump-to.php?url=https%3A%2F%2Fagariounblocked.org%2Fdaemon.indapass.hu/http/session_request?redirect_to=https%3A%2F%2Fagariounblocked.org&partner_id=bloghuuk.advfn.com/ct.php?ct=OTk1OTg=&redir=https%3A%2F%2Fagariounblocked.org%2Fimages-fames.b-cdn.net/spai/w_1920+q_lossy+ret_img/https:/agariounblocked.org/rssfeeds.wfaa.com/~/t/0/0/wfaa/local/~https:/agariounblocked.org/rssfeeds.khou.com/~/t/0/0/khou/sports/~https:/agariounblocked.org/extras.seattlepi.com/redirect.php?url=https%3A%2F%2Fagariounblocked.org%2Fmember.yam.com/EDM_CLICK.aspx?EDMID=7948&EMAIL=qqbuyme.cosmo925@blogger.com&CID=103443&EDMURL=https%3A%2F%2Fagariounblocked.org%2Fgleam.io/zyxKd-INoWr2EMzH?l=http%3A%2F%2Fagariounblocked.orgwww.justjaredjr.com/flagcomment.php?cl=10842755&el=https%3A%2F%2Fagariounblocked.orgwww.edaily.co.kr/_template/popup/t_popup_click.asp?Mrseq=830&MrT=https%3A%2F%2Fagariounblocked.org%2Fssl.cosme.net/cosme/asp/buy/buy0002.asp?rurl=https%3A%2F%2Fagariounblocked.org%2Fwww.google.tn/url?sa=t&url=https%3A%2F%2Fagariounblocked.orgrssfeeds.wkyc.com/~/t/0/0/wkyc/news/~https:/agariounblocked.org/www2.ogs.state.ny.us/help/urlstatusgo.html?url=https://agariounblocked.orgfeeds.kotaku.com.au/~/t/0/0/kotakuaustralia/~/https:/agariounblocked.org/aquaculture.seagrant.uaf.edu/click-thru.html?id=151&url=https%3A%2F%2Fagariounblocked.org%2Fscanmail.trustwave.com/?c=8510&d=4qa02KqxZJadHuhFUvy7ZCUfI_2L10yeH0EeBz7FGQ&u=https%3A%2F%2Fagariounblocked.orgrssfeeds.13newsnow.com/~/t/0/0/wvec/local/~https:/agariounblocked.org/scribd.page.link/?amv=9.1.0&apn=com.scribd.app.reader0&ibi=com.scribd.iscribd&imv=9.1.1&isi=542557212&link=https%3A%2F%2Fagariounblocked.org%2Fforums.thesims.com/en_uS/home/leaving/agariounblocked.orgposts.google.com/url?sa=t&url=https%3A%2F%2Fagariounblocked.org%2Fxat.com/web_gear/chat/linkvalidator.php?link=https%3A%2F%2Fagariounblocked.orgadvisor.wmtransfer.com/SiteDetails.aspx?url=agariounblocked.orgwww.nordbayern.de/logoutservlet?logout_referer=https%3A%2F%2Fagariounblocked.org%2Fwww.bad.org.uk/for-the-public/patient-information-leaflets/androgenetic-alopecia/?showmore=1&returnlink=https%3A%2F%2Fagariounblocked.org%2Frssfeeds.kens5.com/~/t/0/0/business/~https:/agariounblocked.org/%2Fwww.winnipegfreepress.com/s?action=doLogout&rurl=http%3A%2F%2Fagariounblocked.orgfjb.kaskus.co.id/redirect?url=https%3A%2F%2Fagariounblocked.org%2Fpantip.com/l/https:%E0%B8%AF%E0%B9%91%E0%B8%AF%E0%B8%AF%E0%B9%91%E0%B8%AFagariounblocked.org%2F/3918rssfeeds.wbir.com/~/t/0/0/wbir/local_news/~https:/agariounblocked.org/innuityweb.myregisteredsite.com/admin/membership_agreement.php?partnerID=3185&domain=agariounblocked.orgfeeds.lifehacker.com.au/~/t/0/0/lifehackeraustralia/~/https:/agariounblocked.org/www.london.umb.edu/?URL=https%3A%2F%2Fagariounblocked.org%2Fwww.fito.nnov.ru/go.php?url=https%3A%2F%2Fagariounblocked.orgwww.vreddiehgdl.cucsh.udg.mx/sites/all/modules/pubdlcnt/pubdlcnt.php?file=https%3A%2F%2Fagariounblocked.org%2F&nid=126passport-us.bignox.com/sso/logout?service=https%3A%2F%2Fagariounblocked.org%2Fwww.talgov.com/Main/exit.aspx?url=https%3A%2F%2Fagariounblocked.orgf5.glitch.me/proxy/https%3A%2F%2Fagariounblocked.org%2Fsc.hkexnews.hk/TuniS/agariounblocked.org/www.curseforge.com/linkout?remoteUrl=https%3A%2F%2Fagariounblocked.org%2Fclient.paltalk.com/client/webapp/client/External.wmt?url=http%3A%2F%2Fagariounblocked.orgtools.folha.com.br/print?url=https%3A%2F%2Fagariounblocked.orges.catholic.net/ligas/ligasframe.phtml?liga=https%3A%2F%2Fagariounblocked.org%2Fwww.interempresas.net/estadisticas/r.asp?idsector=129&e=221083&c=195&d=https%3A%2F%2Fagariounblocked.org%2Fsinp.msu.ru/ru/ext_link?url=https%3A%2F%2Fagariounblocked.org%2Frssfeeds.mycentraljersey.com/~/t/0/0/bridgewater/home/~https:/agariounblocked.org/sherlock.scribblelive.com/r?u=agariounblocked.orggeomorphology.irpi.cnr.it/map-services/android-guide/@@reset-optout?came_from=https%3A%2F%2Fagariounblocked.org%2Fceskapozice.lidovky.cz/redir.aspx?url=http%3A%2F%2Fagariounblocked.orgtrack.effiliation.com/servlet/effi.redir?id_compteur=22157233&effi_id=leparfroid244&url=https%3A%2F%2Fagariounblocked.org%2Fwww.spiritfanfiction.com/link?l=https%3A%2F%2Fagariounblocked.orgfeeds.osce.org/~/t/0/0/oscelatestnews/~https:/agariounblocked.org/%2Fwww.omnigroup.com/omnifocus/?URL=agariounblocked.orgreelgood.com/https:/agariounblocked.org/www.triathlon.org/?URL=agariounblocked.org/stmassey.f2s.com/?URL=https%3A%2F%2Fagariounblocked.org%2Fmisc.symbaloo.com/redirect.php?network=tradetracker&campaignID=480&url=https%3A%2F%2Fagariounblocked.org%2Frd.alice.it/r3/redir.asp?URL=https%3A%2F%2Fagariounblocked.org%2Farctic.nyheter24.se/rdb/nyheter24_eed6ad4b451f2fb8193922f832bc91ed/5?url=https%3A%2F%2Fagariounblocked.org%2Fams.ceu.edu/optimal/optimal.php?url=https%3A%2F%2Fagariounblocked.org%2Fwww.meetme.com/apps/redirect/?url=agariounblocked.org/clients1.google.tk/url?q=https%3A%2F%2Fagariounblocked.orgwww.aaronsw.com/2002/display.cgi?t=%3Ca+href=https%3A%2F%2Fagariounblocked.orgwww.kichink.com/home/issafari?uri=https%3A%2F%2Fagariounblocked.org%2Flaw.spbu.ru/aboutfaculty/teachers/teacherdetails/a7fb1dbb-e9f3-4fe9-91e9-d77a53b8312c.aspx?returnurl=https%3A%2F%2Fagariounblocked.orgenseignants.flammarion.com/Banners_Click.cfm?ID=86&URL=agariounblocked.org/odmp.org/link?url=https%3A%2F%2Fagariounblocked.org%2Fwww.swrve.com/?URL=agariounblocked.orgsc.hkex.com.hk/TuniS/agariounblocked.org/redir.speedbit.com/redir.asp?id=8030&urldirect=https%3A%2F%2Fagariounblocked.orgmitsui-shopping-park.com/lalaport/iwata/redirect.html?url=https%3A%2F%2Fagariounblocked.org%2Fmarketplace.salisburypost.com/AdHunter/salisburypost/Home/EmailFriend?url=https%3A%2F%2Fagariounblocked.org%2Fwww.popcouncil.org/scripts/leaving.asp?URL=http%3A%2F%2Fagariounblocked.orgnou-rau.uem.br/nou-rau/zeus/auth.php?back=https%3A%2F%2Fagariounblocked.org%2F&go=x&code=x&unit=xredirect.camfrog.com/redirect/?url=https%3A%2F%2Fagariounblocked.org%2Fdavidbyrne.com/?URL=agariounblocked.orgfeeds.ligonier.org/~/t/0/0/ligonierministriesblog/~/https:/agariounblocked.org/feeds.gty.org/~/t/0/0/gtyblog/~/https:/agariounblocked.org/foro.infojardin.com/proxy.php?link=https%3A%2F%2Fagariounblocked.orgwww.ppa.com/?URL=agariounblocked.orgimaginingourselves.globalfundforwomen.org/pb/External.aspx?url=https%3A%2F%2Fagariounblocked.org%2Fshorefire.com/?URL=agariounblocked.orgtimberlinelodge.com/?URL=agariounblocked.orgwww.earth-policy.org/?URL=agariounblocked.org/chtbl.com/track/118167/agariounblocked.org/wfc2.wiredforchange.com/dia/track.jsp?v=2&c=hdorrh%2BHcDlQ%2BzUEnZU5qlfKZ1Cl53X6&url=https%3A%2F%2Fagariounblocked.orgwww.cheapassgamer.com/redirect.php?url=https%3A%2F%2Fagariounblocked.orgregister.scotland.org/Subscribe/WidgetSignup?url=http%3A%2F%2Fagariounblocked.orginterpals.net/url_redirect.php?href=https%3A%2F%2Fagariounblocked.org%2Fmyemma.com/?URL=agariounblocked.orgintellectualventures.com/?URL=agariounblocked.orgfooyoh.com/wcn.php?url=https%3A%2F%2Fagariounblocked.org%2Flinabanner.jobstreet.com/redirect.asp?bid=23996&track=0&uid=&url=https%3A%2F%2Fagariounblocked.org%2Fwww.usich.gov/?URL=agariounblocked.orgwww.sunvalley.com/?URL=agariounblocked.orgipb.ac.id/lang/s/ID?url=https%3A%2F%2Fagariounblocked.org%2Fmoshtix.com.au/v2/ForceDesktopView?callingURL=https%3A%2F%2Fagariounblocked.org%2Ftapestry.tapad.com/tapestry/1?ta_partner_id=950&ta_redirect=https%3A%2F%2Fagariounblocked.org%2Fwww.chuys.com/?URL=agariounblocked.organalytics.bluekai.com/site/16231?phint=event=click&phint=campaign=BRAND-TAB&phint=platform=search&done=agariounblocked.orgshop.wki.it/shared/sso/sso.aspx?sso=G7OBN320AS3T48U0ANSN3KMN22&url=https%3A%2F%2Fagariounblocked.org%2Fwww.kunstsammlung.de/?URL=agariounblocked.orgwww.malcolmturnbull.com.au/?URL=agariounblocked.orgsc.sie.gov.hk/TuniS/agariounblocked.org/ref.webhostinghub.com/scripts/click.php?ref_id=nichol54&desturl=https%3A%2F%2Fagariounblocked.org%2Fthewomens.org.au/?URL=agariounblocked.orgwww.hockney.com/?URL=agariounblocked.orgwww.ch7.com/?URL=agariounblocked.orgwww.asma.org/impakredirect.aspx?url=agariounblocked.org/www.venez.fr/error.fr.html?id=1&uri=https%3A%2F%2Fagariounblocked.org%2Fwww.octranspo.com/en/about-us/confederation-line-1-website?URL=agariounblocked.orglogin.mephi.ru/login?allow_anonymous=true&service=https%3A%2F%2Fagariounblocked.org%2Fww4.cef.es/trk/r.emt?h=agariounblocked.org/cientec.or.cr/ligas-externas/redir.phtml?link=agariounblocked.org/fr.grepolis.com/start/redirect?url=https%3A%2F%2Fagariounblocked.org%2Farchives.midweek.com/?URL=https%253A%252F%252Fagariounblocked.org/www.ahewar.org/links/dform.asp?url=https%3A%2F%2Fagariounblocked.org%2Flogin.aup.edu/cas/login?service=https%3A%2F%2Fagariounblocked.org%2F/&gateway=truewww.sitesimilar.net/agariounblocked.orgyumi.rgr.jp/puku-board/kboard.cgi?mode=res_html&owner=proscar&url=agariounblocked.org/intranet.canadabusiness.ca/?URL=agariounblocked.org/sc.devb.gov.hk/TuniS/agariounblocked.org/anonym.to/?http%3A%2F%2Fagariounblocked.org/www.ait.ie/?URL=agariounblocked.orgnews.url.google.com/url?q=https%3A%2F%2Fagariounblocked.orgm.ok.ru/dk?st.cmd=outLinkWarning&st.rfn=https%3A%2F%2Fagariounblocked.org%2F  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.