WeMOS Interrupt
Redigerer WeMOS Interrupt Spring til navigation Spring til søgning
WeMOS WiFi Processor | |
---|---|
WeMOS | Server Connection - Simpel Server - Flere SSID - ESP8266 - Watchdog - Interrupt |
Anvendelse | LED-eksempel - AD-eksempel - Mail - POST metode - Web Publicering |
Interrupt er grundlæggende noget der afbryder den kode der bliver afviklet, for at afvikle en lille stump kode, som servicerer den hændelse der har afbrudt den kørende kode. Det kan kan fx. være at der er modtaget en seriel karakter, hvor interruptet så sørger for at lægge karakteren i en buffer, så harwaren er klar til at modtage en ny karakter.
Anvendelse af interrupt på WeMOS
På WeMOS vil Arduino-systemet håndtere ting som tids-interrupt til at styre millis() og micros() samt den serielle port, så det giver ikke mening at arbejde med disse.
Man kan måske finde ekstra tids-interrupts, hvis man kan finde dokumentation til hvordan man kobler det op.
Der hvor interrupt er særligt relevant er på pins, hvor man kan få softwaren til at reagere på noget der sker elektrisk på en ben.
Interrupt modes på pins
Når man angiver at et ben skal sættes op til interrupt, så skal man samtidigt sætte op hvordan benet skal reagere, og her er der 5 forskellige muligheder, som beskrevet i følgende tabel[1].
Mode | Beskrivelse |
---|---|
RISING | Interruptet sker på en stigende kant på benet |
FALLING | Interruptet sker på en faldende kant på benet |
CHANGE | Interruptet sker på både stigende og faldende kanter på benet |
LOW | Interruptet sker når benet er lavt - kan være farligt, da det kan give mange interrupts |
HIGH | Interruptet sker når benet er højt - kan være farligt, da det kan give mange interrupts
Det er ikke testet om denne mulighed virker i WeMOS |
Pins der kan modtage interrupt
I nedenstående tabel er der angivet hvile ben på WeMOS'en der kan håndtere interrupt.
WeMOS ben | Ben nummer | Særlige forhold |
---|---|---|
D0 | 16 |
Kan ikke håndtere interrupts |
D1 | 5 |
Anvendeligt til interrupt |
D2 | 4 |
Anvendeligt til interrupt |
D3 | 0 |
Kan ikke anbefales til interrupt |
D4 | 2 |
Kan ikke anbefales til interrupt |
D5 | 14 |
Anvendeligt til interrupt |
D6 | 12 |
Anvendeligt til interrupt |
D7 | 13 |
Anvendeligt til interrupt |
D8 | 15 |
Er ikke anvendeligt til interrupt |
A0 | A0 |
Analogt intupt, ikke til interrupt |
TX | 1 |
Serial TX. Anvendes til Serial Monitor |
RX | 3 |
Serial RX. Anvendes til Serial Monitor |
Kode der kan håndtere pin interrupt
Grundlæggende, så er det samme kode man anvender i WeMOS, som man vil anvende i en normal Arduino UNO[2]
En ting der er værd at bemærke er, at det er vigtigt at anvende digitalPinToInterrupt funktionen, da ben-nummeret og interrupt-nummeret ikke er det samme - det sker i den sidste linje i setup() som den ene parameter til attachInterrupt.
Programmet skifter niveauet på en pin forbundet til den indbyggede LED på alle kanter, og tæller en variabel op. I hovedkoden skrives til LED'en og der skivet ud hvor mange kald der har været til interrupt rutinen.
const byte interruptPin = D2;
const byte ledPin = D4;
byte state = LOW;
int intCount = 0;
void setup() {
Serial.begin(9600);
pinMode(interruptPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}
void loop() {
Serial.println(intCount);
digitalWrite(ledPin, state);
delay(300);
}
// https://randomnerdtutorials.com/interrupts-timers-esp8266-arduino-ide-nodemcu/
ICACHE_RAM_ATTR void blink() {
state = !state;
intCount++;
}
Funktionen blink()
er den der kaldes hver gang der kommer et interrupt. I WeMOS skal denne funktion ligge i den statiske RAM for at fungere[3]. Dette sker ved at sætte ICACHE_RAM_ATTR
foran deklarationen af funktionen, som det er vist i koden.
Referencer
- ↑ attachInterrupt i afsnittet Parameters
- ↑ attachInterrupt afsnittet Example code
- ↑ Interrupt på en ESP8266
Resumé: Dette er en mindre ændring Overvåg denne side Bemærk venligst at alle bidrag til Holstebro HTX Wiki er at betragte som udgivne under Creative Commons Attribution-NonCommercial-ShareAlike (se Holstebro HTX Wiki:Ophavsret for detaljer). Hvis du ikke ønsker at din tekst skal udsættes for nådesløse redigeringer og at den kan blive kopieret efter forgodtbefindende, så skal du ikke placere den her. Du lover os også, at du selv har forfattet teksten eller har kopieret den fra en public domain-kilde eller en tilsvarende fri kilde. Læg aldrig materiale her, som er beskyttet af andres ophavsret uden deres tilladelse! Redigeringshjælp (åbner i et nyt vindue)
Skabeloner der er brugt på denne side: Navigationsmenu
Bar Diskussion Indstillinger Overvågningsliste Bidrag Log af
Side Diskussion
Læs Redigér Se historik Fjern overvågning
Mere Sammenfoldet
Søg
Forside Seneste ændringer Tilfældig side Hjælp til MediaWiki
Værktøjer
Hvad henviser hertil Beslægtede ændringer Upload fil Specialsider Sideinformation
Privatlivspolitik Om Holstebro HTX Wiki Forbehold
Creative Commons Attribution-NonCommercial-ShareAlike Powered by MediaWiki