Gesimuleerde analoog/digitaal-converter voor RaspberryPi (3 / 3 stap)

Stap 3: Het programma


De RCtime() functie doet de lezing van de sensoren. Ik probeerde om het te schrijven als generieke mogelijk zodat het kan worden opgeheven uit en gebruikt in andere programma's. Misschien vindt u soms waar enkele aanpassingen zullen moeten worden gemaakt voor het kalibreren. In de functie van de lus in deze lijn bijvoorbeeld "if(toggle) pwmWrite (ledPin, photocellReading * 4);" Ik vermenigvuldigen de fotocel lezen door 4. Uw resultaten kunnen verschillen, ik heb twee van de dezelfde fotocellen en ze zich anders gedragen.

Toen ik begon te werken aan het project heb ik mijn eerste experimenteren op een Arduino. Toen ik het werkt ik het overgedragen aan de RaspberryPi en het werkte niet. Het kostte me een lange tijd om erachter te komen wat er mis was. De RaspberryPi is geen hot rod, maar het is vele malen sneller dan een Arduino. De oplossing was om toe te voegen van de "delay(2)" in de functie van de RCtime() tijd te geven de condensator te lozen.

Omdat de hele program stopt uitgevoerd tijdens een delay(), gebruikt de code voor de knippersnelheid van de millis() in plaats van delay(). Met behulp van millis() het programma blijft actief en wijzigingen zijn onmiddellijk. "tijd" is een globale variabele gedefinieerd net onder de kop programma en de omvat. Deze wordt geïnitialiseerd in de Setup-functie. Let op het gebruik van de tijd, en knevel variabelen, evenals de millis() functie in de loop-functie om te zien hoe dit wordt gedaan.

 /*********************************************************************** * Filename ResCap.c * This program demonstrates a way to simulate an analog read by measuring * the time it takes to charge a capacitor through a variable resistor. * It uses a photocell and a force sensitive resistor but the technique will * work to read a potentiometer or any resistive sensor. ***********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <wiringPi.h> int photocellPin = 0; // Photocell and capacitor connected to pin zero. int fsrPin = 2; // Force sensitive resistor and capacitor connected to pin two. int ledPin = 1; // The LED connected to pin one. int toggle = 1; // On/off state of LED. unsigned long time; // Save the time to set the blink rate. 
 /*********************************************************************** * RCtime() - Function, uses a digital pin to measure a resistive sensor * by first discharging capacitor then measuring the time it takes to * charge the capacitor through a variable resistor. When the voltage * rises to Vcc/2 the pin will go high. ***********************************************************************/ int RCtime(int RCpin) { int PinVal = 0; // Start with zero. pinMode(RCpin, OUTPUT); // Set pin to output and pull to LOW. (ground) digitalWrite(RCpin, LOW); delay(2); // Allow time to let capacitor discharge. pinMode(RCpin, INPUT); // Now set the pin to an input and... while (digitalRead(RCpin) == LOW) { // Count how long it takes to rise up to HIGH. PinVal++; // Increment to keep track of time. if (PinVal == 30000) { break; // if we got this far, the resistance is to high, } // no input to sensor, leave the loop. } PinVal = PinVal/25; // Divide by 25 for calibration. if(PinVal > 1023) PinVal = 1023; // Cap The value at 1023. return PinVal; // Returns zero - 1023. } 
 /************************************************************************** * loop() - function runs in a continuous loop until program is stopped. * * More presure on the force sensitive resistor makes the LED blink faster. * More light on the photocell makes the light dimmer. **************************************************************************/ void loop(void) { int photocellReading = RCtime(photocellPin); // Read photocell. int fsrReading = RCtime(fsrPin); // Read force sensitive resistor. if(millis()-time > (fsrReading)) { toggle = !toggle; //If true not toggle time = millis(); //and reset time. } if(toggle) pwmWrite(ledPin, photocellReading*4); else pwmWrite(ledPin, 0); // printf("photocell %d - fsr %d\n", photocellReading, fsrReading); // uncomment for debugging. } 
 /*********************************************************************** * setup() - function is run by main() one time when the program starts. ***********************************************************************/ void setup(void) { wiringPiSetup(); // Required. pinMode(ledPin, PWM_OUTPUT); time = millis(); // Save the time to set the blink rate. } 
 /*********************************************************************** * main() - required ***********************************************************************/ int main(void) { setup(); while(1) { loop(); } } 

Gerelateerde Artikelen

PIC-programmer met USB-serieel converter voor 18F4550

PIC-programmer met USB-serieel converter voor 18F4550

Opmerking: Deze hack is alleen nodig als uw usb-serieel biedt geen ondersteuning voor de BREAK-functionaliteit. Anders, kunnen werken zoals het is, met de gebruikelijke programmering software zoals PicPgm, WinPic enz.De DIY programmeurs zoals JDM wer
Spiegelen/DV-Converter voor Mac te converteren Flip Video's op iMovie/FCP/FCE DV op Mac OS

Spiegelen/DV-Converter voor Mac te converteren Flip Video's op iMovie/FCP/FCE DV op Mac OS

De Flip Video Camcorder is een draagbare, easy-to-use oplossing voor het maken en delen van films van hoge kwaliteit. Video van de Tik is de ideale keuze voor het vastleggen van dagelijkse momenten die overal gebeuren, en ze te delen met familie en v
AVI naar Flash converter voor mac, AVI naar FLV, AVI naar SWF op mac

AVI naar Flash converter voor mac, AVI naar FLV, AVI naar SWF op mac

AVI naar Flash converter voor mac maakt deze taaie werk gemakkelijk door een paar stappen. Met mac AVI naar FLV converter, u mag het gemeenschappelijk formaat AVI naar FLV(flash video), converteren AVI naar SWF converteren en het genereren van een HT
Mac DVD naar Flash converter voor mac, rip/converteren DVD naar FLV SWF flash op mac voor website

Mac DVD naar Flash converter voor mac, rip/converteren DVD naar FLV SWF flash op mac voor website

DVD naar Flash converter voor mac een DVD ripper integreren in een Flash FLV- en SWF-maker. Haar DVD rippen functie ondersteunt alle DVD-films, inclusief commerciële DVD met kopieerbeveiliging, zelfgemaakte DVD, DVD + R, DVD-R, DVD-RW, DVD + RW, HD D
FLV naar SWF-converter voor mac, Flash FLV converteren naar SWF op mac

FLV naar SWF-converter voor mac, Flash FLV converteren naar SWF op mac

hoe naar FLV naar SWF op mac converterenWilt u uw website publiceert en een SWF-bestand invoegen in het juiste? Gebruik Flash 8.0 maken een ingesloten SWF met voor uw website, echter, vindt u dat het gemaakte SWF-bestand synchroon in video en audio g
8 bit seriële digitaal naar analoog (5v bereik) Converter voor microcontrollers (wanneer TTL en weerstanden is alles wat je hebt)

8 bit seriële digitaal naar analoog (5v bereik) Converter voor microcontrollers (wanneer TTL en weerstanden is alles wat je hebt)

zodat ik een DAC (digitaal naar analoog converter) nodig om te gebruiken met mijn pic12F675, en voor degenen onder u die nog nooit gehoord van deze kleine kerel, het is een 8 pin microcontroller van Microchip die slechts 6 I/O pinnen heeft...Dit is e
Eenvoudige & goedkope analoog naar digitaal converter

Eenvoudige & goedkope analoog naar digitaal converter

van de tijden waren ADC duur en zeldzame, komt een hardware-software oplossing voor data-acquisitie voor PCs. op basis van de oude haven van de Joystick van de IBM-compatibele, een techniek van de startconditie een monostabiele multivibrator een resi
Natuurlijke taal klok voor RaspberryPi

Natuurlijke taal klok voor RaspberryPi

Alles wat u nodig hebt is een RaspberryPi, ieder model zal doen.Dit programma is geschreven om te helpen me reacquaint met string handling in C. De RaspberryPi got me geïnteresseerd in programmeren weer na het doen van het niet in ongeveer 20 jaar.Al
555 timer calculator voor RaspberryPi, Arduino of een Linux PC

555 timer calculator voor RaspberryPi, Arduino of een Linux PC

Dit instructable is een rekenmachine om te bepalen van de weerstand en een condensator waarden voor gebruik gemeenschappelijke 555 timer-schakelingen. Ik heb ook versies voor de RaspberryPi en de Arduino met eenvoudige schakelingen te knipperen twee
DIY digitaal kompas (voor uw auto)

DIY digitaal kompas (voor uw auto)

Ik ben verbaasd dat sommige auto's niet over een digitaal kompas altijd zichtbaar beschikt. Je moet ofwel start de navigatie-app die zelfs verdwijnen kan wanneer u de radio aanpassen telkens weer. In dit project, maakt u een digitaal kompas, die kan
Vintage DAC voor RaspberryPi audio

Vintage DAC voor RaspberryPi audio

idee...Ik was curiosa over sommige oude school R2R DAC's namelijk de BurrBrown PCM56P. Ze gebruikt in de late 80's in enkele van de betere CD-spelers als SonyES222/DenonDCD1500/MaranzXY dan ook. Er is enige discussie in bepaalde forums over hun min o
35mm dia Converter voor mobiele telefoon

35mm dia Converter voor mobiele telefoon

EENVOUDIGE & goedkope hoge kwaliteit digitaal conversie!Deze foto nam ik van mijn vrouw leggen ongezien voor meer dan 40 jaar. Wat andere schatten af te wachten?U zult een korte lengte van de ABS of PVC pijp, zaag, liniaal, boren, schuurpapier (perka
8 x 8 LED Matrix voor RaspberryPi en 3 programma's

8 x 8 LED Matrix voor RaspberryPi en 3 programma's

Dit is een 8 x 8 LED matrix voor een RaspberryPi en drie programma's uit te voeren op het:1 - een "Hello World" programma met een volledige Engelse lettertype.2 - een dobbelspel.3 - een kleine versie van de 8 x 8 van Conway's Game of Life..U moe
Eenvoudige snelle GUI voor RaspberryPi

Eenvoudige snelle GUI voor RaspberryPi

Er zijn vele momenten waarop ik wil meer dan een tekst gebaseerd systeem, maar ik hoef niet een volledige grafische gebruikersinterface.Dit kan worden bereikt door het uitvoeren van een kale botten openbox. Openbox kunt u starten door het uitvoeren v