Detektorerna kan användas till EMC-programmet som du kan ladda ner gratis i menyn till vänster, men de kan lika gärna användas till egna program under Windows eller unix/linux om du gillar att programmera själv. I så fall läser du pulserna från elmätaren/detektorn som datatecken på serieporten med inställningen: 110,N,8,1 (binary/raw mode). En 50ms puls läses in som ett tecken med ASCII koden 0xE0 eller 0xF0.
Vad innebär detta praktiskt?
Kan någon ge en nybörjare som mig ett C# exempel?
Öppna serieporten som vanligt och vänta på att ett tecken ska komma.
Varje tecken kommer då motsvara en puls.
Vilket serieports exempel som helst för C# lär funka, likaså putty i serieportsmode för att testa detektorn. (Deras orginaldesign har ett för stort motstånd, det kommer aldrig några pulser, så testa den innan du försöker få igång nån egen kod, se också till att fixera givaren ordentligt på elmätaren, sensorn är känslig och behöver sitta rakt emot)
Det är alltså för låg resistans och man kan gå upp ganska mycket typ 10K kan fungera, har man en sats är det enkelt att testa, det har att göra med vilken fototransistor man har också.
hatt: om det inte finns någon speciell COM-port "komponent" i den kompiler du använder kan du öppna en fil som heter "COMx" där x beror på vilken COM-port du vill öppna. Vill du alltså öppna COM3 öppnar du filen "COM3". Detta gäller då under Windows.
Senast redigerad av Icecap 8 april 2009, 11:52:08, redigerad totalt 1 gång.
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
/*
* 'open_port()' - Open serial port 1.
*
* Returns the file descriptor on success or -1 on error.
*/
int open_port(void)
{
int fd; /* File descriptor for the port */
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{ /* Could not open the port */
fprintf(stderr, "open_port: Unable to open /dev/ttyS1 - %s\n",
strerror(errno));
}
return (fd);
}
void main()
{
int mainfd=0; /* File descriptor */
char chout;
struct termios options;
mainfd = open_port();
fcntl(mainfd, F_SETFL, FNDELAY); /* Configure port reading */
/* Get the current options for the port */
tcgetattr(mainfd, &options);
cfsetispeed(&options, B9600); /* Set the baud rates to 9600 */
cfsetospeed(&options, B9600);
/* Enable the receiver and set local mode */
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB; /* Mask the character size to 8 bits, no parity */
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8; /* Select 8 data bits */
options.c_cflag &= ~CRTSCTS; /* Disable hardware flow control */
/* Enable data to be processed as raw input */
options.c_lflag &= ~(ICANON | ECHO | ISIG);
/* Set the new options for the port */
tcsetattr(mainfd, TCSANOW, &options);
while (1)
{
read(mainfd, &chout, sizeof(chout)); /* Read character from ABU */
if (chout != 0)
printf("Got %c.\n", chout);
chout=0;
usleep(20000);
//printf("Waiting:\n",chout);
}
/* Close the serial port */
close(mainfd);
}
AndLi:Ahh nu när du säger det så minns jag, för mig var det tvärtom men jag kör ju på ett annat sätt. Men för att förtydliga kanske man inte bör skriva stort motstånd då det kan tolkas vilket som
v-g: Men orginaldesignen har 4kOhm jag har 1kOhm. Då är ju deras motstånd större än mitt.
Jag förstår inte hur 1kOhm kan bli större än 4kOhm hur man än vänder på det...
Om man inte börjar prata konduktivitet, och det verkar ju onödigt
Svart kapsel innebär att dagsljus är lite reducerat men den reagerar fortfarande på det om det är starkt nog. Ska du detektera en LED är skärmning ett måste.
Om du har datablad för fototrissan kan man jämföra med en klar variant så ser man skillnaden.