Bm ou menos
1 -111 dBm
2...30 -110...-54 dBm
31 -52 dBm ou maior
99 não detectou sinal
Portanto, depois de enviar o comando corretamente para o sim900 você deverá ler a resposta do sim900, e em seguida tratar a string recebida, retirando o valor desejado do rssi, salvando-o em uma variavel para então enviar ao lcd...
Segue um sketch que faz a leitura do rssi do sim900 e imprime o mesmo no serial monitor do arduino, estude-o, entenda como é que funciona, pois com certeza deverá ser necessário algumas modificações principalmente na instance da porta serial... dificilmente o nome da porta serial usada no sketch do exemplo ( no caso mySerial ) coincidirá com a que que foi usada no seu sketch, para verificar isso você deverá abrir a library do sim900 e verificar qual o nome usado...
O sketch:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
// AUX GSM Leitura de dados
String linhaAtual = "";
String db = "";
boolean lendoDB = false;
void setup()
{
mySerial.begin(19200); // inicia conexao SIM900
Serial.begin(9600); // inicia conexao PC
}
void loop()
{
delay(500); // delay de envio de dados
mySerial.println("AT+CSQ"); // envia comando ao SIM900
while(mySerial.available()>0) // se existem dados na porta serial
{
char dados = mySerial.read(); // variavel dados recebe informacoes
linhaAtual += dados; // variavel linha recebe dados
if (dados == '\n') // se tiver um ENTER em dados
{
linhaAtual = ""; // apaga dados da linha
}
if (linhaAtual.endsWith(" ")) // se a linha terminar com espaco em branco
{
lendoDB = true; // estamos lendo dados
db = ""; // limpo variavel que vai receber dados em DB
}
if (lendoDB) // se estamos lendo os dados
{
if (dados != ',') // faz leitura ate encontrar virgula
{
db += dados; // adiciona info a variavel db
}
else // se nao estamos lendo
{
lendoDB = false; // sem leitura
Serial.println(db); // enviamos os dados para o computador pela porta serial
}
}
}
}
fonte: http://microembarcado.blogspot.com.br/2013/11/sim900-labview-fazendo-leitura-de-sinal.html
Espero que isto possa lhe ajudar a conseguir ver a indicação do sinal no seu display lcd.
Abraço.…
Adicionado por Wiechert ao 4:35 em 6 setembro 2014
define polling 10 // the scan rate
// If the packets internal retry register matches// the set retry count then communication is stopped// on that packet. To re-enable the packet you must// set the "connection" variable to true.#define retry_count 10
// used to toggle the receive/transmit pin on the driver#define TxEnablePin 20
#define LED 9
// This is the easiest way to create new packets// Add as many as you want. TOTAL_NO_OF_PACKETS// is automatically updated.enum{ PACKET1, PACKET2, PACKET3, PACKET4, PACKET5, PACKET6, PACKET7, PACKET8, PACKET9, PACKET10, PACKET11, PACKET12, PACKET13, PACKET14, PACKET15, PACKET16, PACKET17, TOTAL_NO_OF_PACKETS // leave this last entry};
// Create an array of Packets to be configuredPacket packets[TOTAL_NO_OF_PACKETS];
// Create a packetPointer to access each packet// individually. This is not required you can access// the array explicitly. E.g. packets[PACKET1].id = 2;// This does become tedious though...//////////////////////////HMI READS/////////////////////////////packetPointer enableDisableHMI = &packets[PACKET1];packetPointer runFwdHMI = &packets[PACKET2];packetPointer runRevHMI = &packets[PACKET3];packetPointer resetHMI = &packets[PACKET4];packetPointer eStopHMI = &packets[PACKET5];packetPointer userSetSpeedHMI = &packets[PACKET6];
//////////////////////////HMI WRITES////////////////////////////packetPointer runLedHMI = &packets[PACKET7];packetPointer stopLedHMI = &packets[PACKET8];packetPointer errorLedHMI = &packets[PACKET9];packetPointer actualSpeedHMI = &packets[PACKET10];packetPointer motorCurrentHMI = &packets[PACKET11];
/////////////////////////VSD READS//////////////////////////////packetPointer statusWordVSD = &packets[PACKET12];packetPointer actualSpeedVSD = &packets[PACKET13];packetPointer motorCurrentVSD = &packets[PACKET14];
/////////////////////////VSD WRITES/////////////////////////////packetPointer commandWordVSD = &packets[PACKET15];packetPointer userSetSpeedVSD = &packets[PACKET16];packetPointer clearFaultsVSD = &packets[PACKET17];
////////HMI READ VARIABLES////////////unsigned int readEnableDisableHMI[1];unsigned int readRunFwdHMI[1];unsigned int readRunRevHMI[1];unsigned int readResetHMI[1];unsigned int readEstopHMI[1];unsigned int readUserSetSpeedHMI[1];
////////HMI WRITE VARIABLES//////////unsigned int writeRunLedHMI[1];unsigned int writeStopLedHMI[1];unsigned int writeErrorLedHMI[1];unsigned int writeActualSpeedHMI[1];unsigned int writeMotorCurrentHMI[1];
////////VSD READ VARIABLES///////////unsigned int readStatusWordVSD[1];unsigned int readActualSpeedVSD[1];unsigned int readMotorCurrentVSD[1];
////////VSD WRITE VARIABLES//////////unsigned int writeControlWordVSD[1];unsigned int writeUserSetSpeedVSD[1]={0};unsigned int writeClearFaultsVSD[1];
// High or Low variables as arraysunsigned int writeHigh[1]={1};unsigned int writeLow[1]={0};
const int vccPin = 17;const int gndPin = 21;
unsigned int BUTTONSTATE;unsigned int PREVBUTTONSTATE;
void setup(){ Serial.begin(19200); // Set modes of some pins for LED outputs pinMode(vccPin, OUTPUT); pinMode(gndPin, OUTPUT); digitalWrite(vccPin, HIGH); digitalWrite(gndPin, LOW); // Read all values from HMI modbus_construct(enableDisableHMI, 3, READ_HOLDING_REGISTERS, 50, 1, readEnableDisableHMI); modbus_construct(runFwdHMI, 3, READ_HOLDING_REGISTERS, 60, 1, readRunFwdHMI); modbus_construct(runRevHMI, 3, READ_HOLDING_REGISTERS, 70, 1, readRunRevHMI); modbus_construct(resetHMI, 3, READ_HOLDING_REGISTERS, 80, 1, readResetHMI); modbus_construct(eStopHMI, 3, READ_HOLDING_REGISTERS, 90, 1, readEstopHMI); modbus_construct(userSetSpeedHMI, 3, READ_HOLDING_REGISTERS, 10, 1, readUserSetSpeedHMI); // Write required values to HMI modbus_construct(runLedHMI, 3, PRESET_MULTIPLE_REGISTERS, 100, 1, writeRunLedHMI); modbus_construct(stopLedHMI, 3, PRESET_MULTIPLE_REGISTERS, 110, 1, writeStopLedHMI); modbus_construct(errorLedHMI, 3, PRESET_MULTIPLE_REGISTERS, 120, 1, writeErrorLedHMI); modbus_construct(actualSpeedHMI, 3, PRESET_MULTIPLE_REGISTERS, 0, 1, readActualSpeedVSD); modbus_construct(motorCurrentHMI, 3, PRESET_MULTIPLE_REGISTERS, 20, 1, readMotorCurrentVSD); // Read all values from VSD modbus_construct(statusWordVSD, 2, READ_HOLDING_REGISTERS, 8603, 1, readStatusWordVSD); modbus_construct(actualSpeedVSD, 2, READ_HOLDING_REGISTERS, 8604, 1, readActualSpeedVSD); modbus_construct(motorCurrentVSD, 2, READ_HOLDING_REGISTERS, 3204, 1, readMotorCurrentVSD); // Write required values to VSD modbus_construct(commandWordVSD, 2, PRESET_MULTIPLE_REGISTERS, 8601, 1, writeControlWordVSD); modbus_construct(userSetSpeedVSD, 2, PRESET_MULTIPLE_REGISTERS, 8602, 1, readUserSetSpeedHMI); modbus_construct(clearFaultsVSD, 2, PRESET_MULTIPLE_REGISTERS, 8501, 1, writeClearFaultsVSD); // Configure the MODBUS connection modbus_configure(baud, SERIAL_8E1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS); pinMode(LED, OUTPUT); pinMode(6,OUTPUT); pinMode(5,OUTPUT); digitalWrite(5,LOW); pinMode(3,OUTPUT); pinMode(2,OUTPUT); digitalWrite(2,LOW); pinMode(11,OUTPUT); pinMode(10,OUTPUT); digitalWrite(10,LOW);}
void loop(){ modbus_update(); // Get the latest register values for the buttons and screen elements... checkState(); // Convert the button register states into a single integer value for use in switch|case statement... switch(BUTTONSTATE){ case 0: while(BUTTONSTATE==0) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 1: while(BUTTONSTATE==1) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 2: while(BUTTONSTATE==2) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 3: while(BUTTONSTATE==3) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 4: while(BUTTONSTATE==4) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 5: while(BUTTONSTATE==5) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 6: while(BUTTONSTATE==6) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 7: while(BUTTONSTATE==7) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 8: while(BUTTONSTATE==8) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 9: while(BUTTONSTATE==9) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 10: while(BUTTONSTATE==10) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; case 16: while(BUTTONSTATE==16) { modbus_update(); checkState(); Serial.println(BUTTONSTATE); // Your Code Here... } break; default: break; } }
void checkState() // This function simply reads whether each button is active("1") or inactive ("0") and bitshifts each button to create a unique BUTTONSTATE value for each combination of button presses...{ PREVBUTTONSTATE=BUTTONSTATE; BUTTONSTATE = (readEnableDisableHMI[0])+(readRunFwdHMI[0]<<1)+(readRunRevHMI[0]<<2)+(readResetHMI[0]<<3)+(readEstopHMI[0]<<4); // Example: Drive enabled, and run forward... 0b00011 = dec "3"... so BUTTONSTATE = 3. if(BUTTONSTATE==11||BUTTONSTATE==12||BUTTONSTATE==13||BUTTONSTATE==14||BUTTONSTATE==15) // For our implementation these button press combinations are not valid... so just make them = to state 10... { BUTTONSTATE=10; } // As above... These are all the possible BUTTONSTATE values when the E-stop button is pressed... but if E-Stop is pressed we want to kill all buttons anyway... if(BUTTONSTATE==17||BUTTONSTATE==18||BUTTONSTATE==19||BUTTONSTATE==20||BUTTONSTATE==21||BUTTONSTATE==22||BUTTONSTATE==23||BUTTONSTATE==24||BUTTONSTATE==25||BUTTONSTATE==26||BUTTONSTATE==27||BUTTONSTATE==28||BUTTONSTATE==29||BUTTONSTATE==30||BUTTONSTATE==31) { BUTTONSTATE=16; } }…
Adicionado por Rodrigo Sutto ao 10:36 em 27 outubro 2016
ild
o codigo é esse
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//Programa : Controle 2 motores DC usando Ponte H L298N
//Definicoes pinos Arduino ligados a entrada da Ponte H
int IN1 = 4;
int IN2 = 5;
int IN3 = 6;
int IN4 = 7;
void setup()
{
//Define os pinos como saida
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
//Gira o Motor A no sentido horario
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(2000);
//Para o motor A
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);
//Gira o Motor B no sentido horario
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(2000);
//Para o motor B
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(500);
//Gira o Motor A no sentido anti-horario
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
delay(2000);
//Para o motor A
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);
//Gira o Motor B no sentido anti-horario
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(2000);
//Para o motor B
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(500);
}
…